Deep CNNとNaoの連携による一般物体認識

これまでに紹介したDeep CNNによる一般物体認識(classify_caffenet.py)、Naoが撮影した画像の取得(vision_getandsaveimage.py)およびNaoの発話(hello.py)を連携させることにより、Naoに、見ている物を言い当てさせてみます。

まず、ホームディレクトリの~/.bashrcにて、classify_caffenet.pyが置かれているディレクトリ~/Works/DeepNetのパスを、環境変数PYTHONPATHに追加します。

export PYTHONPATH=/usr/local/caffe/python/:/usr/local/lib/python2.7/dist-packages/:~/Software/pynaoqi-python2.7-2.1.2.17-linux64:~/Works/DeepNet:$PYTHONPATH

そして、変更した~/.bashrcをsourceコマンドを用いて読み込みます。

source ~/.bashrc

次に、ホームディレクトリの~/Nao/PythonSDKに、次のpythonスクリプトを作成し、classify_NaoImage.pyとして保存します。

import vision_getandsaveimage as video
from naoqi import ALProxy
import classify_caffenet as caffenet

# obtain and save image from Nao
video.showNaoImage("nao.local",9559)

# classify using caffenet
net, results_df=caffenet.classify('camImage.png')

# say predicted labels
cnt = 0
tts = ALProxy("ALTextToSpeech", "nao.local", 9559)
for label in results_df['label'][results_df['score'] > 0.1]:
        if cnt == 0:
                print label
                tts.say(label)
        else:
                print label
                tts.say('or ' + label)
        cnt = cnt + 1

本スクリプトでは、まず、vision_getandsaveimage.pyのshowNaoImageを実行し、Naoのカメラで撮影した画像を取得します(camImage.pngとして保存)。そして、classify_caffenet.pyのclassifyを実行し、認識結果のラベルやスコアが格納されたresults_dfを取得します。そして、スコアが0.1より大きいラベルを、順次、ALTextToSpeechを用いてNaoに発話させています。

なお、本スクリプトcalssify_NaoImage.pyは、下記からダウンロードできます。
http://revast-blog.com/download/index.php?fname=classify_NaoImage.py

次に、Naoを起動し、Naoの前に、次のようにコップなどを置きます。
IMG_3889

そして、classify_NaoImage.pyを実行します。
例えば、Naoの前にコップがある場合は、cupやcoffee mugと認識されて、Naoが「cup or coffee mug」と発話します。

> python classify_NaoImage.py
cup
coffee mug

また、保存された画像classify_caffenet_result.pngは以下のようになります。
classify_caffenet_result

例えば、Naoの前に、ドライバーが置かれている場合は、screwdriverと認識されて、Naoが「screwdriver」と発話します。
保存された画像classify_caffenet_result.pngは以下のようになります。
classify_caffenet_result

次回は、Deep CNNがどのようにしてコップやドライバーなどを認識しているのかを知るために、Deep CNNの一つ一つの処理を可視化して説明します。