これまでに紹介した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の前に、次のようにコップなどを置きます。
そして、classify_NaoImage.pyを実行します。
例えば、Naoの前にコップがある場合は、cupやcoffee mugと認識されて、Naoが「cup or coffee mug」と発話します。
> python classify_NaoImage.py cup coffee mug
また、保存された画像classify_caffenet_result.pngは以下のようになります。
例えば、Naoの前に、ドライバーが置かれている場合は、screwdriverと認識されて、Naoが「screwdriver」と発話します。
保存された画像classify_caffenet_result.pngは以下のようになります。
次回は、Deep CNNがどのようにしてコップやドライバーなどを認識しているのかを知るために、Deep CNNの一つ一つの処理を可視化して説明します。