ITmedia NEWS > STUDIO >
ニュース
2017年06月13日 10時44分 UPDATE

はじめてのAI:アダルト画像が含まれているか判定できるAPIを使って、家族の入浴写真を分析してみた

画像から年齢や性別を認識する「Face API」と感情を認識する「Emotion API」を使えるようになった筆者。今回は、これまでで1番多くの情報を得ることができる「Computer Vision API」を学びます。

[太田智美,ITmedia]

 AIについて学びたくて、この春から勉強を始めた筆者。日本マイクロソフト テクニカルエバンジェリスト大田昌幸(おおたまさゆき)先生に教えてもらい、Microsoftが公開しているAPIを使って、AIを学んでいます。

 これまで、画像から年齢や性別を認識する「Face API」と感情を認識する「Emotion API」を勉強してきましたが、いよいよ今回は画像から多くの情報を得ることができる「Computer Vision API」を使ってみます。

 Computer Vision APIは、画像内のテキストの読み取りや手書き文字の読み取り、著名人の認識、サムネールの生成、画像の種類や写真内の配色の特定、アダルトコンテンツの自動制御などができるAPI。取得できる情報が多く、なんだか楽しそうです。


はじめてのAI「Computer Vision API」 (左)ママ、(中央)筆者、(右)パパ


 APIを試すのには「Postman」を使いたいと思います。「Postman? なにそれおいしいの?」という方は、前回の記事を参考にインストールしてみてください。

「Computer Vision API」を使ってみる

 「Computer Vision API」の公式ページを見ると、「API Reference」と書かれたボタンがあります。これをクリックすると、APIを使うための仕様や操作方法などが書かれたページに行きます。ここに書かれているRequest URL、ヘッダー情報(Request headers)、ボディ情報(Request body)などをPostmanに入れていきます。

 まず、「Request URL」の「https://[location].api.cognitive.microsoft.com/vision/v1.0/analyze」を、PostmanのURL記入用の場所にコピー&ペーストします。このとき、「[?visualFeatures][&details][&language]」の部分はコピーしなくて大丈夫です。[]で囲われている部分はそのあとに続く記述例なので、必要になったときに入れましょう。その部分の詳細は、「Request parameters」のカ所に書かれているのでのちほど見ていきます。

 「[location]」には、「Open API testing console」と書いてある横の5つのボタン「West US」「East US 2」「West Central US」「West Europe」「Southeast Asia」から地域を選択し、それぞれに応じたものを入れます。「West US」を選ぶのであれば

https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze

となり、「East US 2」であれば

https://eastus2.api.cognitive.microsoft.com/vision/v1.0/analyze

となり、「West Central US」であれば

https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/analyze

となり、「West Europe」であれば

https://westeurope.api.cognitive.microsoft.com/vision/v1.0/analyze

となり、「Southeast Asia」であれば

https://southeastasia.api.cognitive.microsoft.com/vision/v1.0/analyze

となります。選ぶ地域によってレスポンス速度が変わってくるので、自分がサービス提供をしたい一番近い地域を選ぶといいようです。今回はキーを「West Central US」用に作ったため、

https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/analyze

をPostmanにコピー&ペーストします。POST MethodなのでPOSTを指定し、実行すると以下のような画面になります。


はじめてのAI「Computer Vision API」

 「Request parameters」の「visualFeatures」は、「カテゴリ」「タグ」「画像説明 」「顔の有無(顔がある場合は、座標・性別・年齢)」「画像がクリップアートか線画か」「色」「アダルトコンテンツかどうか(ヌードまたは性行為が存在するかを判定)」を返すというものです。

 「details」は、「有名人かどうか」「ランドマークがあるかどうか」を返してくれます。「language」は、英語か中国語かを選択します。デフォルトでは「英語」になっています。

 全てを適応させたい場合、このようなURLをPostmanに記載します。

https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Categories,Tags,Description,Faces,ImageType,Color,Adult&details=Celebrities,Landmarks&language=en

 続いて、「Request headers」のリファレンスを見ます。「Ocp-Apim-Subscription-Key」は、APIにアクセスするためのサブスクリプションキーを作って入力してくださいという項目です。こちらのキーの作り方は以前の記事に細かく記載しているので、詳しい説明は省きますが(前回記事参照)、「Computer Vision API」の項目のチェックボックスと利用規約にチェックを入れて「Subscribe」を押します。キー(「Key 1:XXXXXXXXXXXXXXXXXXXXXXXXXXX」など)が出てくるのでそれをコピーし、PostmanのHeadersの「Key」の欄に「Ocp-Apim-Subscription-Key」と入れ、その隣の「Value」と書かれている欄に先ほどのキーをペーストします。「Content-Type」には、送信するBodyのデータがJSON形式なので「application/json」と入れます。ここまでの操作をするとこんな画面になるはずです。


はじめてのAI「Computer Vision API」

 最後にPostmanの「Body」をクリックし、ラジオボタンで「raw」を選び、認識したい画像のURLをJSON形式で入れます。今回は冒頭のあの家族写真を使ってみることにします。入浴写真はアダルトではありませんが、ちゃんと認識されるでしょうか?

{
	"url":"https://www.facebook.com/photo.php?fbid=630310917009867&set=t.100000928946715&type=3&theater"
}

 「Send」を押して成功すると(HTTPステータスコードがResponse 200の場合)、「カテゴリ」「タグ」「画像説明」「顔の有無(顔がある場合は、座標・性別・年齢)」「画像がクリップアートか線画か」「色」「アダルトコンテンツかどうか(ヌードまたは性行為が存在するかを判定)」「有名人かどうか」「ランドマークがあるかどうか」を返してくれます。


はじめてのAI「Computer Vision API」 今回使う筆者の家族写真

{
    "categories": [
        {
            "name": "people_group",
            "score": 0.5234375,
            "detail": {
                "celebrities": []
            }
        }
    ],
    "adult": {
        "isAdultContent": false,
        "isRacyContent": false,
        "adultScore": 0.047589391469955444,
        "racyScore": 0.049652073532342911
    },
    "tags": [
        {
            "name": "person",
            "confidence": 0.99420565366745
        },
        {
            "name": "beverage",
            "confidence": 0.5468829870223999
        }
    ],
    "description": {
        "tags": [
            "person",
            "woman",
            "food",
            "table",
            "sitting",
            "cup",
            "holding",
            "people",
            "plate",
            "girl",
            "posing",
            "black",
            "restaurant",
            "eating",
            "close",
            "young",
            "man"
        ],
        "captions": [
            {
                "text": "a close up of a woman holding a cup",
                "confidence": 0.67846061613545583
            }
        ]
    },
    "requestId": "3f1ab005-5deb-4275-8b04-9c7b49a589f3",
    "metadata": {
        "width": 960,
        "height": 720,
        "format": "Jpeg"
    },
    "faces": [
        {
            "age": 70,
            "gender": "Male",
            "faceRectangle": {
                "left": 696,
                "top": 272,
                "width": 263,
                "height": 274
            }
        },
        {
            "age": 25,
            "gender": "Female",
            "faceRectangle": {
                "left": 359,
                "top": 120,
                "width": 217,
                "height": 217
            }
        },
        {
            "age": 40,
            "gender": "Female",
            "faceRectangle": {
                "left": 48,
                "top": 241,
                "width": 207,
                "height": 207
            }
        }
    ],
    "color": {
        "dominantColorForeground": "Grey",
        "dominantColorBackground": "Black",
        "dominantColors": [
            "Black",
            "Grey",
            "White"
        ],
        "accentColor": "887143",
        "isBWImg": false
    },
    "imageType": {
        "clipArtType": 0,
        "lineDrawingType": 0
    }
}

 今回の結果では、70歳の男の人と、25歳の女の人と、40歳の女の人が映っていて、「"isAdultContent": false,」となっていることから、アダルト画像ではないと判定されました。アダルトスコアもとても低く、「"adultScore": 0.047589391469955444,」となっています(MAXの数値は1)。

 「{"name": "beverage","confidence": 0.5468829870223999}」というデータでは、「飲み物が映っている可能性が54.68829870223999%」ということになります。「Computer Vision API」では、画像に映っている物体を認識し、約2000種類の学習済みオブジェクトをもとにタグ付けをしています。

 次回は、今回勉強して使えるようになった「Computer Vision API」を使ったサービスを提供している企業に取材に行きます。きっと一度は目にしたことのある「あのサービス」も実はComputer Vision APIを使っているみたいです……!

 【次回予告】「Computer Vision API」はどう使われてる? 企業に取材してきた

太田智美

筆者プロフィール:太田智美

プロフール画像

 小学3年生より国立音楽大学附属小学校に編入。小・中・高とピアノを専攻し、大学では音楽学と音楽教育(教員免許取得)を専攻し卒業。その後、慶應義塾大学大学院メディアデザイン研究科に入学。人と人とのコミュニケーションで発生するイベントに対して偶然性の音楽を生成するアルゴリズム「おところりん」を生み出し修了した。

 大学院を修了後、2011年にアイティメディアに入社。営業配属を経て、2012年より@IT統括部に所属し、技術者コミュニティ支援やイベント運営・記事執筆などに携わり、2014年4月から2016年3月までねとらぼ編集部に所属。2016年4月よりITmedia ニュースに配属。プライベートでは2014年11月から、ロボット「Pepper」と生活を共にし、ロボットパートナーとして活動している。2016年4月21日にヒトとロボットの音楽ユニット「mirai capsule」を結成。


教えてくれた先生:大田昌幸(おおたまさゆき)先生

AI

 スタートアップでのWeb開発経験を経て、2011年に日本マイクロソフトに入社。現在はソリューション開発企業向けのテクニカル エバンジェリストとして活動。東京工業大学や慶應義塾大学にて非常勤講師の経験も持つ。AzureなどのMicrosoft製品に加えて、社外の技術も加えた新規ソリューション開発を企業とともに企画・実現する活動に取り組んでいる。



Copyright© 2017 ITmedia, Inc. All Rights Reserved.