Google Cloud Platform に登録してCloud Vision APIの画像認識機能をお試ししてみる②

Google Cloud Platform の登録方法、Cloud Vision APIの画像認識機能の使い方

こちらを参照してください。puu-0328.hatenablog.com



①ラベル検出(LABEL_DETECTION)

ラベル検出(LABEL_DETECTION)は乗り物や動物など、画像に写っているさまざまなカテゴリの物体を検出できます。

まずは分かりやすく、この猫の写真でやってみます(ΦωΦ)

息切れしているオス猫(スコティッシュフォールド)|ぱくたそフリー写真素材
f:id:puu_0328:20170516164237p:plain

結果

   "labelAnnotations": [		
    {		
     "mid": "/m/01yrx",		
     "description": "cat",		
     "score": 0.9912357		

ちゃんとdescription(実行結果)に"cat"が返ってきました。
midというのは、画像を判断するために必要な一意のIDです。
scoreは画像を読み取った精度でが~1の範囲で返されます。
今回はかなり1に近いので、精度が高い(descriptionが信用できる)ことがわかります。




次は体が隠れてしまっている猫..

さびしいにゃん|ぱくたそフリー写真素材
f:id:puu_0328:20170516165023p:plain

結果

   "labelAnnotations": [
    {
     "mid": "/m/083jv",
     "description": "white",
     "score": 0.9419842
    }

description(実行結果)は"white"でした
間違った結果のくせに、精度が高い(自信満々)ですね。。



最後は手描きの猫です。

ペイントで描いた猫
f:id:puu_0328:20170516165814p:plain


結果

   "labelAnnotations": [		
    {		
     "mid": "/m/0215n",		
     "description": "cartoon",		
     "score": 0.86530787		
    }		


description(実行結果)は"cartoon(漫画)"でした。
精度はまあまあといった感じでしょうか。


②顔検出(FACE_DETECTION)

画像に含まれる複数の人物の顔を検出できます。
感情の状態や帽子の着用といった主要な顔の属性についても識別されます。
ただし、個人を特定する顔認識には対応していません。


顔検出は人物の表情だけでなく、目鼻の位置など返ってくる値が多いです。
参考:Method: images.annotate  |  Google Cloud Vision API  |  Google Cloud Platform

今回は、下表の結果のみ掲載します。

フィールド名 意味
detectionConfidence 顔検出の精度(0~1)
landmarkingConfidence 顔の各パーツを検出した精度(0~1)
joyLikelihood 顔が楽しんでいるか
sorrowLikelihood 顔が悲しんでいるか
angerLikelihood 顔が怒っているか
"surpriseLikelihood 顔が驚いているか
nderExposedLikelihood 肌の露出度)
blurredLikelihood 画像がぼやけているか
headwearLikelihood 帽子かなにかを被っているか

また、結果は精度(0~1)と以下の5段階で返ってきます。

結果 意味
VERY_LIKELY 非常に当てはまる
LIKELY あてはまる
UNKNOWN 不明
UNLIKELY 当てはまらない
VERY_UNLIKELY 全く当てはまらない


まずは、笑顔たっぷりのこの写真でやってみます

満面の笑みの女の子|ぱくたそフリー写真素材
f:id:puu_0328:20170516171921p:plain

結果

"detectionConfidence": 0.5244219,					
"landmarkingConfidence": 0.52761644,					
"joyLikelihood": "VERY_LIKELY",					
"sorrowLikelihood": "VERY_UNLIKELY",					
"angerLikelihood": "VERY_UNLIKELY",					
"surpriseLikelihood": "VERY_UNLIKELY",					
"underExposedLikelihood": "VERY_UNLIKELY",					
"blurredLikelihood": "VERY_UNLIKELY",					
"headwearLikelihood": "UNLIKELY"

_______日本語訳_______

顔検出の精度: 0.5244219(半分くらい)
顔の各パーツを検出した精度:0.52761644(半分くらい)
顔が楽しんでいるか:非常に当てはまる
顔が悲しんでいるか:全く当てはまらない
顔が怒っているかいるか:全く当てはまらない
顔が驚いているか:全く当てはまらない
肌の露出度:全く当てはまらない
画像がぼやけているか:全く当てはまらない
帽子か何かを被っているのか:当てはまらない			

画像のままの結果となりました。


次はこのように、目が隠れている画像です。

いちご少女|ぱくたそフリー写真素材
f:id:puu_0328:20170516172322p:plain

結果

200		
- Show headers -		
{		
 "responses": [		
  {		
  }		
 ]		
}	

何も返ってきませんでした。
どうやら、顔として検出できなかったようです。



最後は、この何tも言えない表情です。
人間に「どういう感情だと思う?」と聞いても答えが分かれそうですね
ちなみに、「腕っぷし自慢のウェーイ系 」という画像だそう。。

腕っぷし自慢のウェーイ系|ぱくたそフリー写真素材
f:id:puu_0328:20170516172739p:plain

結果

     "detectionConfidence": 0.99624336,
     "landmarkingConfidence": 0.683373,
     "joyLikelihood": "UNLIKELY",
     "sorrowLikelihood": "VERY_UNLIKELY",
     "angerLikelihood": "VERY_UNLIKELY",
     "surpriseLikelihood": "VERY_UNLIKELY",
     "underExposedLikelihood": "VERY_UNLIKELY",
     "blurredLikelihood": "VERY_UNLIKELY",
     "headwearLikelihood": "VERY_LIKELY"

_______日本語訳_______


顔検出の精度: 0.99624336(かなり精度が高い)
顔の各パーツを検出した精度:0.683373(まあまあ)
顔が楽しんでいるか:当てはまらない
顔が悲しんでいるか:全く当てはまらない
顔が怒っているかいるか:全く当てはまらない
顔が驚いているか:全く当てはまらない
肌の露出度:当てはまらない
画像がぼやけているか:全く当てはまらない
帽子か何かを被っているのか:非常に当てはまる
	

感情についてはUNNOWN(不明)が返ってくるかと思ったら、
どれも当てはまらない結果となりました。

帽子はちゃんと被っていることが認識されていますね。
(不自然なカツラの人とか、人工知能で見抜けるかも(^o^))



OCR:光学式文字認識(TEXT_DETECTION)

画像内のテキストを検出、抽出できます。幅広い言語がサポートされ、言語の種類も自動で判別されます。

こちらも結果が多いので、locale(文字の言語)とdescription(結果)のみ記載します。



まずは適当感満載の手作り画像で実践

てすと
f:id:puu_0328:20170516173719p:plain

結果

     "locale": "ja",
     "description": "てすとテストtest\n",

正しくdescription(実行結果)に"てすとテストtest\n"が返ってきました。
文字がはっきりしていれば、日本語と英語が混ざっていても問題なさそうです。
言語も"ja"(日本語)となっています。


次はこの記号/日本語/英語/ハングル文字が混ざった画像

出口への案内板|ぱくたそフリー写真素材
f:id:puu_0328:20170516174238p:plain

結果

     "locale": "lb",				
     "description": "58EE\n「Ir\nEE\nExit\n",				

「58EE  Ir  EE Exit」とは。。

ひどい結果。。( ;∀;)
かろうじて、「Exit」は読めているので出口であることは認識できるか。。と言った感じですね。
言語は"lb"だそう。 あまり馴染みがないですが、「インド・ヨーロッパ語族ルクセンブルク語」であってるのかな?(・.・;)





最後は人で作られた文字

人文字[英数字/記号]|ぱくたそフリー写真素材
f:id:puu_0328:20170516175212p:plain

結果

     "locale": "su",
     "description": "HELLO wo NLD\n",	


HELLO wo NLD。。
まあ、少し小文字にされたり、'R'が'N'と認識されたりしていますが、上出来のような気がします。
これなら手書き文字とかでも大丈夫かも。

言語は"su"(オーストロネシア語族:スンダ語)らしいです。。


最後に

今回は物体認識、感情認識、文字認識とやってみました。
精度は微妙ですが、条件分岐なんかで工夫すれば結構使えそうです。

今回は「Cloud Vision API 」を使って結果を取得しましたが、
実際にプログラム上でリクエスト送信&レスポンス取得についてやってみようと思います。