👙

画像からセクシー女優を検索するツールを実装してみた

2022/02/03に公開

目次

  1. 画像からセクシー女優を検索するツールを実装してみた(本記事)
  2. セクシー女優の顔特徴量をUMAPで次元削減、クラスタリングしてみた

はじめに

画像に含まれているセクシー女優(と言うか、端的にはAV女優)を検索するOSS(オープンソースソフトウェア)を実装してみました。どうぞご査収ください。

https://github.com/kleamp1e/pornstar-recognizer

なぜ作ったの?

画像からセクシー女優を検索するサイトは、探せばいくつか見つかりますが、以下のような不満がありました。

  • UIがイマイチ
    • 特に1枚の画像に複数の人物が含まれている場合に、サクサクと検索できない
  • 動画から簡単に検索できない
    • 自分でフレームを切り出し、画像に変換する必要があって面倒
  • インターネットに画像を送信する必要がある
    • プライベートな写真から「似ている人」を探す場合は送信し辛いですよね?
  • APIが公開されていない
    • まあ、そりゃそうですね

そんなわけで、勉強も兼ねて自分で実装してみました。

どんな技術を使ったの?

いわゆる「顔検出」、「顔認証」という技術を使いました。

Zennを眺めていたら、Yuya Katoさんがシリーズものの記事を公開してくれており、とても参考になりました。ありがたや。

また、ちょっと調べただけでも、同じようなテーマの記事が見つかりました。みんな考えることは一緒ですね。

どこからデータを集めたの?

日本でAVと言えば「FANZA」(リンク先は成人向けなので注意)ですよね。
都合が良いことに「AV女優一覧」(リンク先は成人向けなので注意)のページもあるので、顔の画像はこちらから拝借しました。

今回、OSSとして公開したツールに含まれているのは、作品数順上位1,000人、それぞれ5枚の5,000枚分のデータ(顔特徴量のみ、画像は含まず)です。

どうやって使うの?

まだフロントエンド(ウェブアプリなど)は作成しておらず、現状ではバックエンド(APIサーバ)のみです。
そのため、curlなどのツールを使ってAPIを呼び出す必要があります。

画像からの検索は、「顔検出」と「顔識別」の2段階に分かれています。

  • 顔検出: POST /detectに顔を含む画像を送信します。
    • 画像に含まれる複数の顔が検出されます。
    • それぞれの顔情報には、バウンディングボックスや顔特徴量などが含まれています。
  • 顔識別: POST /recognizeに、顔特徴量を含むJSONを送信します。
    • 送信するJSONデータは{"embedding": "xxx"}みたいな感じです。
    • セクシー女優の名前、類似度、FANZAの動画一覧ページへのURLなどが出力されます。

具体例を以下に示します。

# 検索対象の画像を取得します。
wget https://pics.dmm.co.jp/mono/actjpgs/hatano_yui.jpg

# 顔検出します。
curl -X POST \
  --header "Content-Type: multipart/form-data" \
  --form "file=@hatano_yui.jpg;type=image/jpeg" \
  http://localhost:8001/detect \
  > hatano_yui.json

# 顔検出した結果から顔特徴量を抽出します。
jq "{embedding: .response.faces[0].embedding}" \
  < hatano_yui.json \
  > hatano_yui_embedding.json

# 顔特徴量からAV女優を検索します。
curl -X POST \
  --header "Content-Type: application/json" \
  --data-binary @hatano_yui_embedding.json \
  http://localhost:8001/recognize

ビルド方法、起動方法などはREADME.mdを参照してください。

最後に

既存のPythonライブラリを使うことで、簡単に顔検出、顔認証することができました。
ぶっちゃけ、難しかった(と言うか面倒だった)のは、顔画像の収集と前処理です。

さすがにAPIサーバだけだと使いづらいので、次はフロントエンドを作ってみようと思います。
現時点でもAPIがあるので、動画からフレームを切り出して自動的に検索・・・なども簡単に行えそうです。夢が広がりますね♪

今のところ1,000人分のデータしか含まれていませんが、要望があれば拡充したいと思います。

セクシー女優の顔特徴量をUMAPで次元削減、クラスタリングしてみた』に続く。

Discussion