GolangとGoogle Cloud Vision APIを使って牛の画像認識をする
こんにちは!今シーズンまだ1度もゲレンデに行けてない阿部@frkoutです。 近いといつでも行けると油断してあまり行かなくなったりするんでしょうか。 東京にいた前シーズンの時のほうがよく行ってたような気がします。
今回は、2016/2/19に Google Cloud Vision API がベータ公開されたということで早速触ってみました。
Google Cloud Vision APIとは
Google、機械学習ベースの画像認識API「Cloud Vision API」のベータ版を公開にあるように、 任意の画像に対してラベル付けをおこなったり、看板や商品のロゴを認識したり、顔認識が出来るAPIです。
公式ページには、
強力な機械学習モデルの能力を活用することで、画像の内容を理解できるアプリケーションの開発を可能にします。
とあるので、実際のところどのくらい画像の内容を理解できるのかざっと試してみます。
コード
Go言語でGoogle Cloud Vision APIを使うおよび GoDoc : package visionを参考に実装しました。 ※実際にはブラウザから画像をアップロードするアプリを実装したのですが本サンプルはAPIにリクエストを投げる部分のみとなっています
Type Feature にあるように、 feature type に検知方法を指定します。
物体認識 : LABEL_DETECTION
まずは、 物体認識 LABEL_DETECTION を試してみましょう
入力画像はこれ
結果
dairy cow(乳牛) のスコアが 0.97878551 ということで認識できています!
また、結果3番目の slaughterhouse(と畜場) のスコアが 0.70187515 となっていますが、これはフリーストール牛舎なので実際にはと畜場ではありません。 とはいえ画像の入力からここまで物体認識が出来ることに驚きです。 それ以外は working animal(使役動物) , dairy(酪農) , farm(牧場) と正しく認識されていることがわかります。
次に、弊社アシスタントディレクターの笹倉さんを使って物体認識してみましょう
結果
person スコアが 0.85619259 , profession スコアが 0.73947048 ということで、 0.85 人間で 0.74 専門職 であると笹倉さん(のこの画像)はCloudVisionAPIに判断されたようです。
顔認識 : FACE_DETECTION
次に FACE_DETECTION 顔認識を試してみましょう。
入力画像は引き続き弊社アシスタントディレクターの笹倉さんを使ってみました
結果(長い)
boundingPoly で顔の位置が、 landmarks で 顔の各パーツの位置が取れていることがわかります。 また、 panAngle , rollAngle , tiltAngle で顔の向きが取れていますね。
感情も取れていて Likelihood のそれぞれが笹倉さんは VERY_UNLIKELY ということでよく分からない表情をしていると CloudVisionAPIに判断されたようです。
ちなみに、笑顔の素敵な弊社エンジニアの永沼さんの画像をお借りして顔認識を行ったところ "joyLikelihood": "VERY_LIKELY" ということでした。やはり笑顔は大切ですね!
ロゴ認識 : LOGO_DETECTION
最後にロゴ認識 LOGO_DETECTION をやってみます。
入力画像はみんな大好き Apache Pig の彼です。
結果
スコアは 0.3194 とそんなに高くないですが、ちゃんと Hadoop Pig と認識されています。その他にもHadoopのゾウさんやHiveの謎の生き物を入力するとそれぞれ正しく認識されました。
その他にも、 CloudVisionAPI には "TEXT_DETECTION" や "LANDMARK_DETECTION" があり、それぞれ試してみましたがそこそこの精度で判別できました。(ちょうどいい感じの公開できる画像が用意できなかった...)
まとめ
Googleが公開した CloudVisionAPI をつかって画像内の物体認識と顔認識、そしてロゴ認識を実際にやってみました。
ロゴ認識でOSSのロゴが認識されるのには驚きました、他にもいろんなロゴを入力してみて遊んでみるといいかもしれません。
また、GoogleCloudVisionAPIに似たものとして、MicrosoftのProjectOxford や おなじみOpenCVなどがあり、状況によって使い分けると良いなぁと思いました。
いままでOpenCVでゴリゴリ実装していたものが、APIに投げるだけである程度できるということでとても便利です。
チャット会議中などに相手の顔写真のスクリーンショットを撮って、APIに投げることによって相手の機嫌を察することができたり、リアルタイムにAPIを叩いて笑顔の時にだけシャッターを切るようなアプリの実装も(お金をかければ)簡単にできますね!