ラズパイのカメラを経由し、ターゲットに書いてある数字をディープラーニングで学習させたシステムで認識させようとしている。それによって舞台上にある目標位置に、ロボットが自動的に移動できるようにしたいわけだ。
ロボットのシステムソフトはjavaで書いてるので、ロボットのopencvもjavaで動かしたいのだが、色々やってもうまくいかないので、opencvはC++で動かして、それをネットワーククライアントにして、javaのシステムの方にネットワークサーバーを動かしてカメラデータを把握することにした。
ただ、カメラの生データをネットワークで取得すると、時間がかかりすぎりので、クライアント側で、分割して、システムの入力データに合うように加工し、画像認識の28X28ピクセルデータにしてロボットのシステムに送るようにすれば早い。システム側で、その画像に目標とする数字が書いてあるかを認識するのだ。認識システムそのものは、ここにも記載したディープラーニングで学習させたニューラルネットワークにさせる。
左上の画像が、ラズパイとカメラ、右上が数字が書いてあるターゲット、左下が、その画像を縦横4分割した場合の画像セットである。下の左から三番目の画像に、数字の4が写っている。それをニューラルネットワークに通すと、だいたい、信頼性の低い形で8とかの認識結果を出すのだが、ターゲットのあるところは、4が最も信頼性がある数字として出してくる。でも、その信頼性はとても低い。4以外にしたのはこの黒い画像も写り込んでいるからだ。