Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

公開日 : 2018-03-04

Python 機械学習のための画像収集②:Pythonで、DMMの女優検索APIから、AV女優2840名の身長・バスト・カップ数・ウェスト・ヒップ・生年月日データを取得しました。

このエントリーをはてなブックマークに追加

#やりたいこと


  • Microsoft AzureのFace APIを使って、Lineから送られてきた画像から、似ているAV女優を取得したい




#実装のためのステップ分け


  • AV女優の名簿作成
    • AV女優の名前をアダルトサイトからスクレイピング
    • スクレイピングした女優の詳細情報をDMMから取得(学習データ)←いまココ
    • AV女優画像の保存
  • Microsoft Azure Storageに画像をすべて保存
  • AV女優の学習
    • Microsoft Face APIを利用して、画像をすべて学習させる
  • Line Botとの連携
  • AV女優の画像を送信
    • AV女優の画像をGoogle App ScriptでMicrosoft Azure Face APIに送信
    • 似ているAV女優の画像を受信
  • Line Botに返す


#前回までの流れ



  • 前回、6000名のAV女優の名前と画像の名簿を作成しました。取得したい値をとしては、女優名・サムネイル画像
  • 機械学習のためには、画像が少ないかと思うので、せめてもう一枚くらい欲しいということで、ここで伝家の宝刀DMM.APIを利用します。


Python 機械学習のための画像収集①:アダルトサイトからAV女優6000名の名簿データをスクレイピングし、スプレッドシートを公開しました

やりたいこと Microsoft AzureのFace APIを使って、Lineから送られてきた画像から、似ているAV女優を取得する




#取得したいデータ


すでに取得したデータとしてCSVに

  • 女優名
  • 女優のサムネイル画像
が存在します。これに、今後の統計分析兼機械学習のために、以下の情報を追加で取得します。

  • DMMの画像 ← 機械学習用の学習データ
  • 身長
  • 生年月日 ← おばさんをフィルターするため
  • B バスト
  • C カップ数
  • W ウエスト
  • H ヒップ

#データの取得方法


DMM女優検索APIから、以下の情報が取れます。

http://www.dmm.co.jp/digital/videoa/-/actress/recommend/

レスポンスフィールド
フィールド説明
request
parameters
└ parameterリクエストパラメータ
  ├ nameパラメータ名keyword
  └ valueあさみ
result
├ statusステータスコード200
├ result_count取得件数20
├ total_count全体件数64964
├ first_position検索開始位置1
└ actress女優情報
 ├ id女優ID15365
 ├ name女優名麻美ゆま
 ├ ruby女優名(読み仮名)あさみゆま
 ├ bustバスト96
 ├ cupカップ数H
 ├ waistウェスト58
 ├ hipヒップ88
 ├ height身長158
 ├ birthday生年月日1987-03-24
 ├ blood_type血液型AB
 ├ hobby趣味香水集め、英会話、ピアノ
 ├ prefectures出身地東京都
 ├ imageURL画像URL
  ├ small画像(小)http://pics.dmm.co.jp/mono/actjpgs/thumbnail/asami_yuma.jpg
  └ large画像(大)http://pics.dmm.co.jp/mono/actjpgs/asami_yuma.jpg
 └ listURLリストページURL(アフィリエイトID付き)
  ├ digital動画http://www.dmm.co.jp/digital/videoa/-/list/=/article=actress/id=15365/affiliate-990
  ├ monthly_premium月額動画 見放題chプレミアムhttp://www.dmm.co.jp/monthly/premium/-/list/=/article=actress/id=15365/affiliate-990
  ├ ppm10円動画http://www.dmm.co.jp/ppm/video/-/list/=/article=actress/id=15365/affiliate-990
  ├ monoDVD通販http://www.dmm.co.jp/mono/dvd/-/list/=/article=actress/id=15365/affiliate-990
  └ rentalDVDレンタルhttp://www.dmm.co.jp/rental/ppr/-/list/=/article=actress/id=15365/affiliate-990

#実装コード


  • Pythonで実装
    • requests: HTTPの通信を行う。Web APIを利用するため
    • pandas: 取得するデータをpandasできれいに並べるために
  • Web API
    • DMM 女優検索APIから以下の情報を取得
  • 処理内容
    • スクレイピングした6000名のAV女優の名前が、DMMのWeb APIから見つけることができたら以下の値を取得
      • DMMの画像 ← 機械学習用の学習データ
      • 身長
      • 生年月日 ← おばさんをフィルターするため
      • B バスト
      • C カップ数
      • W ウエスト
      • H ヒップ
    • その結果を別のCSVに保存する
  • DMM
    • アフィリエイトIDと、API IDがあると、女優検索APIのエンドポイントからJSON形式でデータが取得できます。


skebe.py

import pandas as pd
import requests

"""---------------------------------------
設定:DMMのアフィリエイトIDとAPI IDを指定します
---------------------------------------"""

DMM_AFFILIATE_ID = ""
DMM_API_ID = ""
API_END_POINT = "https://api.dmm.com/affiliate/v3/ActressSearch?api_id=" + DMM_API_ID + "&affiliate_id=" + DMM_AFFILIATE_ID + "&keyword={}" + "&output=json"

"""---------------------------------------
カウンター
---------------------------------------"""

count = 0
skipped_count = 0

"""---------------------------------------
設定:DMMのアフィリエイトIDとAPI IDを指定します
---------------------------------------"""

df1 = pd.read_csv("output.csv") #女優名前データが入ったcsv
df = pd.read_csv('default.csv', index_col=0) #女優名・女優の画像URL・DMMの画像URLが列に入っている

for i, rows in df1.iterrows():
    name = rows["name"]
    image = rows["image"]
    try:
        end_point = API_END_POINT.format(name)
        r = requests.get(end_point)
        data = r.json()
        actress = data["result"]["actress"][0]["name"]
        if name == actress: #CSVの女優名とDMMの女優名が一致した場合
            dmmimage = data["result"]["actress"][0]["imageURL"]["large"]
            birthday = data["result"]["actress"][0]["birthday"]
            height = data["result"]["actress"][0]["height"]
            B = data["result"]["actress"][0]["bust"]
            C = data["result"]["actress"][0]["cup"]
            W = data["result"]["actress"][0]["waist"]
            H = data["result"]["actress"][0]["hip"]

            print("name={}".format(name))
            print("image={}".format(image))
            print("dmmimage={}".format(dmmimage))
            print("height={}".format(height))
            print("birthday={}".format(birthday))
            print("bust={}".format(B))
            print("cup={}".format(C))
            print("hip={}".format(H))
            print("waist={}".format(W))
    except Exception as e:
        print(e)
        skipped_count +=1
        print("{}をスキップしました:スキップ数:{}".format(name,skipped_count))
        dmmimage = ""
        birthday = ""
        height = ""
        B = ""
        C = ""
        H = ""
        W = ""
    se = pd.Series([name,image,dmmimage,height,birthday,B,C,W,H],["name","image","dmmimage","height","birthday","B","C","W","H"])
    df = df.append(se,ignore_index=True)
    print(df)
df.to_csv("final.csv")
print("DONE")



#取得結果

DMMのAPIから、データを取得した



  • 6759名中
    • 3919名がスキップ
    • 2840名の情報を取得
  • 実際の画像ファイルを保存しておいたので、みたい人はぜひ!

#今後行うこと


  • データのクリーニング(似ているAV女優を探すプロジェクト用)
    • DMMに存在しなかった女優の削除
  • データのクリーニング(機械学習用プロジェクト)
    • height birthday B C W Hの値が存在するものだけを取得したいので、Jupiter Notebookでデータのクリーニング

#ちょっと思いついたこと


  • SVMで、カップ数の予測できそう
    • 身長・バスト・ウェスト・ヒップから、カップ数を予測できそうな気がする
  • データでロリ巨乳とか区分けすることができそう。
  • 偏差値化したら面白そう




スポンサーリンク