組込み屋さんは組込みだけでは食っていけない、という風潮があるので、別ジャンルに挑戦します。
Node-REDを使って、リアルタイムでWatsonとジャンケンします。
後述の技術不足により、Node-REDだけで完結しませんでした!
リアルタイムと言いながら、かなりの遅延があります。2秒くらい(もっと?)後出しされます。
完成品
環境は、ラズパイ+USBカメラです。
1秒に1回の頻度で、カメラから取り込んだ写真をWatsonで解析にかけ、勝てる手を写真の下に表示しています(いらすとやさんから素材を拝借しました)。
画像だけだとわかりにくいですが、ギリギリリアルタイム感が出ています。
上の写真更新後、2~3秒程度で、下の勝てる手が更新されます。
学習データがグー、チョキ、パー各20枚ずつしかないため、背景を白くしないと全然精度が出ません。背景が白くても精度はイマイチです…。
Node-REDのフロー
ダサいポイントが2つあります!
1. カメラ制御がpython scriptだ!
start cameraノードからpython scriptを起動しています。
中身は、opencvでカメラから画像を取り込み、1秒に1枚Node-REDのhttp inノード(camera)にpostします。
(1秒に1枚としているのは、Watson Visual Recognitionの無料枠をすぐ使い果たしてしまうから、というトホホな理由です)
この部分をなんとかNode-REDだけでやりたいところです(ヘルプミー!)。
C言語に直せ、というなら簡単なのだが…。
2. ページの静的コンテンツを無理矢理更新している
お気づきでしょうか。下の方に並んだexecノードに。
ここで、解析結果に基づき、ページの静的コンテンツをcpコマンドで置き換えています。
このダサさは↑の比ではありません!
うまくTemplateノードで結果を返せるようにしたいところです。
Websocketで結果を通知してあげれば、何とかなる、という感じのことはわかっているのですが、勉強不足です…。
感想
動かすところまで楽しみながらできました。
が、やはりWebフロントエンドの技術不足に悩まされました。
最終的な見た目も最低限、という感じです。
これでは、ユーザーさんも買ってくれなさそうです。
クラウドで解析していることもあり、遅延時間がかなり気になりました。
組込み屋さんとしては、このあたりが食いっぱぐれないための道の1つなんだろうなぁ。
ブラウザで、解析開始も、結果閲覧もできるので、ラズパイ+テザリング用Androidがあれば、気軽に試せるのは良いです。
普段は、シリアル繋いだり、sshで繋いだりなので。