vision kitでオブジェクト検出及び料理検出デモ!検出率はかなり高い
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で遊ぶ!」の記事も増えてきました。
ディスカッション
コメント一覧
まだ、コメントがありません