vision kitでオブジェクト検出及び料理検出デモ!検出率はかなり高い

2019年2月25日

vision kitの第5弾です。

最初の記事は、vision kit を組み立てでしたので、デモを試すのは4回目となります。

今まで、顔検出と笑顔検出・写真撮影実施オブジェクト認識と顔検出、さらに、2つの顔検出(自動写真撮影と顔検出表示)を実施してきました。

今回は、オブジェクト検出デモを実行しますが、どのくらいの検出率が出るのでしょうか。

どうか、最後までご確認をお願いしますね。

スポンサーリンク

オブジェクト検出デモ実行

まだまだデモプログラムはあります。

オブジェクト検出デモは画像を取得し、その中から、猫、犬、または人物をチェックするものです。

このデモを実行する前に画像を準備する必要があります。

カメラで写真を撮るか、SDカードに写真を保存します。

写真の準備

これだけの写真を用意しました。

次に、次のコマンドを入力してEnterキーを押し、image.jpgを使用するファイルに置き換えます。

./object_detection.py --input .jpg 

さて、その結果はどうなっているか見てみましょう。


エラー発生!

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/inu_1.jpg
Traceback (most recent call last):
File "./object_detection.py", line 59, in 
main()
File "./object_detection.py", line 49, in main
result = inference.run(image_center)
File "/opt/aiy/projects-python/src/aiy/vision/inference.py", line 152, in run
return self._engine.image_inference(self._key, image, params)
File "/opt/aiy/projects-python/src/aiy/vision/inference.py", line 347, in image_inference
params=_get_params(params)))).inference_result
File "/opt/aiy/projects-python/src/aiy/vision/inference.py", line 240, in _communicate
return self._communicate_bytes(request.SerializeToString())
File "/opt/aiy/projects-python/src/aiy/vision/inference.py", line 246, in _communicate_bytes
raise InferenceException(response.status.message)
aiy.vision.inference.InferenceException: ImageInference: Input image must not be smaller than 256 x 256

あれれ、何かエラーが発生しました。最後のエラーを見ると、写真が小さすぎたのでしょうか?

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input 3.jpeg
Object #0: kind=PERSON(1), score=0.500732, bbox=(160, 237, 223, 190)

こちらの写真でやると、何ら問題が起こりません。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ls -l /home/pi/inu_1.jpg
-rw-r--r-- 1 pi pi 15734 Dec 5 10:11 /home/pi/inu_1.jpg
pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ls -l 3.jpeg
-rw-r--r-- 1 pi pi 246154 Aug 4 00:28 3.jpeg

写真の大きさを見てみると、エラー発生の写真が小さすぎるように見えますね。

試しに、neko2.jpgでもやってみましたが、同じエラーが発生します。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/neko2.jpg
Traceback (most recent call last):
・
・
aiy.vision.inference.InferenceException: ImageInference: Input image must not be smaller than 256 x 256

写真を大きくして再挑戦してみます。今度は、ソフト「縮小専用」で 320 × 320 にして再実行しました。

ワンちゃんがたくさん

今度は、実行時に –output オプションを付けて、結果をファイル出力してみます。まずは、この写真から実行してみます。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/inu_1.jpg --output /home/pi/inu_1_cp.jpg
pi@raspberrypi:~/AIY-projects-python/src/examples/vision $

実行後、出力結果が出されません。即ち、この写真からは、人間、犬、猫はいなかったと判断されたようです。

左がインプット、右がアウトプットの写真です。全く同じですね。

少女と犬

それでは、少女と犬の後ろ姿の写真を使用してデモしてみましょう。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/inu_hito.jpg --output /home/pi/inu_hito_cp.jpg
Object #0: kind=PERSON(1), score=0.948442, bbox=(61, 197, 152, 335)
pi@raspberrypi:~/AIY-projects-python/src/examples/vision $

kindは検出されたオブジェクトのタイプで、スコアはモデルが与えた結果に関する信頼度です。 bboxは、そのオブジェクトがイメージ内にある場所です。

これを見ると、人間がひとりいて、スコアが 94.8% ですので、ほぼ間違いないですと言ってますね。しかし、犬を認識できていません。

出力の写真を見ると、少女が資格で囲われており、これを認識しましたということでしょう!

しかし、犬の後ろ姿を「犬」と認識できなかったようです。

3人の人間と犬1匹

今度は、キャンプ場で安らぐ人3名と、くつろいだ犬1匹でやってみます。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/inu_hito3.jpg --output /home/pi/inu_hito3_cp.jpg
Object #0: kind=PERSON(1), score=0.878627, bbox=(340, 183, 100, 185)
Object #1: kind=PERSON(1), score=0.784649, bbox=(140, 202, 147, 178)

オブジェクトを2つ見つけて、スコアは87.8%と78.5%で人間と判断しています。

人間一人と犬が見落とされました。アウトプットの写真を見ると、寝そべった犬と座った少女が判定できていません。

たくさんの猫ちゃんたち

犬の写真が尽きたので、今度は猫の写真にトライしてみます。

先程の犬と同様、たくさんの猫たちがいますが、犬の時とは違って、皆寝転がっています。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/neko.jpg --output /home/pi/neko_cp.jpg
pi@raspberrypi:~/AIY-projects-python/src/examples/vision $

犬の時と同様、object_detection.py は、猫を判定できません。

ですので、アウトプット写真は、インプットと同じなので割愛いたします。

猫と人

それでは、猫を抱く女性を題材にして実行してみます。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/neko_hito.jpg --output /home/pi/neko_hito_cp.jpg
Object #0: kind=PERSON(1), score=0.928149, bbox=(28, 166, 287, 367)

またしても、抱かれた猫ちゃんを判定できません。

抱いている女性に対しては、92.8% という高い確率でヒトと判断しました。アウトプットを見ると、女性を確認した枠がついています。

猫2匹

手持ち最後の写真として、猫2匹をどう判定するかやってみます。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./object_detection.py --input /home/pi/neko2.jpg --output /home/pi/neko2_cp.jpg
Object #0: kind=CAT(2), score=0.901401, bbox=(110, 39, 404, 362)

すばらしい!猫2匹を判定しました。

しかも、90.1% の確率です。アウトプットはこれです。

料理識別器デモ実行

料理識別器モデルは、画像から食品を識別することができるそうです。

写真の準備

こちらのデモにおいても、まず、画像を準備する必要があります。そこで、次の写真を用意しました。

ステーキ、おにぎり、オムライス、ナポリタン、トンカツと5つの料理の写真です。それぞれを入力にして結果がどう出るか見てみましょう。

コマンドは、以下になります。image.jpgを使用するファイルに置き換えます。

./dish_classification.py --input image.jpg

さて、ここからは、5つの料理の結果判定です。

ステーキ

上記のステーキの写真を入力にして実行しました。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./dish_classification.py --input /home/pi/jpg_181230/steak.jpg
Result 0: Yakiniku (prob=0.409912)
Result 1: Salisbury steak (prob=0.106201)

処理が完了するのに、少々時間がかかります。

処理完了後、結果のリストと、識別された食品 のタイプと、そのモデルがその回答の信頼度(1つのうちのどれ)を示す確率スコアが表 示されます。

これを見ると、焼き肉が 41.0%、ソールズベリーステーキ? 10.6% と出ました。明らかに、ステーキだと思うんですが、うまく判定しませんね。

おにぎり

次は、おにぎりで試してみます。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./dish_classification.py --input /home/pi/jpg_181230/onigiri.jpg
Result 0: Onigiri (prob=0.998047)

20秒近く待たされましたが、すばらしい結果が出ました!99.8%の確率で、おにぎりと判定しました。見事です。

オムライス

次は、オムライスです。

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./dish_classification.py --input /home/pi/jpg_181230/omuraisu.jpg
Result 0: Omurice (prob=0.915039)

すばらしい!こちらも 91.5%と、おにぎりの確率からは落ちましたが、オムライスと判定しました。

ナポリタン

今度は、スパゲティ・ナポリタンです。英語でも、ナポリタンというのでしょうか?

pi@raspberrypi:~/AIY-projects-python/src/examples/vision $ ./dish_classification.py --input /home/pi/jpg_181230/naporitan.jpg
Result 0: Spaghetti (prob=0.535156)
Result 1: Spaghetti aglio e olio (prob=0.139648) 

フムフム、ナポリタンと言わないまでも、スパゲティと判断しました。
53.5% と 14.0% の二つの候補で、約70%です。まあ、よくやったというべきですかね。

トンカツ

さて、最後はトンカツです。

日本の洋食の代表作です。見事、判定してくれるでしょうか?

projects-python/src/examples/vision $ ./dish_classification.py --input /home/pi/jpg_181230/tonkatu.jpg
Result 0: Tonkatsu (prob=0.993164)

スゲェ!見事に、トンカツを判定しました。確率99.3% ですから、ほぼ断定したと言ってます。恐れ入りました!

スポンサーリンク

最後に

今回は、オブジェクト検出デモと料理識別器デモを実施しました。

オブジェクト検出デモでは、写真から人間や動物を認識できるか検証しました。なかなかの結果が出せましたね。

料理識別器デモでは、写真から何の料理かを認識させましたが、さすがの結果が出ました。

皆さんも確認してみてください。

■思えば「aiy vision kitで遊ぶ!」の記事も増えてきました。

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら