この記事は 驚異のFANZA女優検索 Advent Calendar 2021 の 1 日目の記事です。
メガネをかけたFANZA女優一覧
FANZA女優からメガネをかけた女優だけをピックアップしたページを作った。メガネをかけたFANZA女優一覧だ。あくまでDMMが提供している女優の画像がメガネをかけているかが分かるだけだが、公式にその女優を表す画像として提供されている顔写真がメガネをかけているかは割と重要な指針になると思う(何の?!)。実際に本家FANZAにもめがねというジャンルがあることはあるがそういうことじゃない感が強い。その点、自分のページはちゃんとほぼ(認識の精度のせいで残念ながら100%ではない。2人メガネをかけていない女優がいた)メガネをかけている。こういうのがいい。
Azure Face API
作ったきっかけは、ちょっと思う所があって顔認識を調べていてAzure Face APIをみたことだ。HPを見ると「1 人以上の人間の顔と、ポーズ、フェイス マスク、顔ひげなどの各種の属性を検出できます。」と書いてある。属性に何があるか調べて顔属性を見てみた。すると以下のようなパラメータが取れると書いてあった。…!。メガネを認識できるじゃないか!これは是非FANZA女優からメガネをかけた女優一覧を作らねばと思った。
- アクセサリ
- 年齢
- ぼかし
- 感情
- 露出
- 顔ひげ
- 性別
- 眼鏡
- 髪の毛
- 頭部姿勢
- 化粧
- マスク
- ノイズ
- オクルージョン
- 笑顔
Cognitive Services の docsがとても便利
AzureのCognitive ServicesのFace APIを作って、エンドポイントとキーを取得しておけば、docsが非常に良く出来てドキュメントとして読めるだけでなく、APIを直接POSTすることが出来る。今回は眼鏡だけで良いので、returnFaceAttributesをglassesにして後は全部消した。
これでSendボタンを押せばglassesのレスポンスが返ってくる。
faceAttributesがNoGlassesならメガネなし、ReadingGlassesならメガネだ!
C#のコードで書く
docsのページで試して上手くいったら、これをC#に持ってきてコードにする。これで画像を投げればその画像がメガネをかけているかは判断出来るようになった。全女優の画像を全てこのメソッドにかけて、その結果をデータベースに反映した。
internal async Task<bool> HasGlassesAsync(string actressImageUrl)
{
//女優の画像URLからHttpContentを取得
var content = await GetImageContent(actressImageUrl);
//Headers.ContentTypeにapplication/octet-streamを設定
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
//Face APIのdetectでreturnFaceAttributesだけを指定してPOST
var responseMessage = await HttpClient.PostAsync($"{AzureFaceApiUrl}/detect?returnFaceAttributes=glasses", content);
//レスポンスからJSONを取得
var json = await responseMessage.Content.ReadAsStringAsync();
//JSONをデシアライズ
var detectResponse = JsonSerializer.Deserialize<DetectResponse[]>(json);
//faceAttributes.glassesがReadingGlassesならメガネ。それ以外ならメガネなし。
return detectResponse[0]?.faceAttributes.glasses == "ReadingGlasses";
}
DBで絞り込む。
後はデータベースをその条件=メガネで絞り込んだ女優を表示すればOKだ。
SELECT * FROM Actress Where HasGlasses = 1
まとめ
これで出来上がったのがメガネをかけたFANZA女優一覧だ。メガネ好きの人がいれば是非見て欲しい。そうでない人も見てみると今まで見えなかったものが見えるかもしれない。メガネだけに。