ラベル 画像処理 の投稿を表示しています。 すべての投稿を表示
ラベル 画像処理 の投稿を表示しています。 すべての投稿を表示

2013年2月13日水曜日

Image recognition and Noise reduction

ロボットの原価を低減させる為に、市販の部品を使っていますが、いろいろ課題が発生します。
ロボットの目には、2,000円台のWebcamを使っていますが、高価な物に比べて不安定です。従って、画像認識において、図1のような元のイメージからピンクのボールを認識する場合、大量のノイズが発生する事が多いです。
図2は、その状態を解り易くする為に二値化した物です。大量のノイズが存在します。
このような状況で、図3の様にボールだけを認識しなければなりません。
画像処理は、奥が深いです。だから、面白いです。更に、ロボットと組み合せると、”面白い”の二乗になります。ロボットは、動いていますから、限りなく短い時間で処理をしなければなりません。その情報を元に、駆動系の制御をします。
webcamが、どのような画像を取得しているか解りません。従って、プログラムはそれを前提に作らないとなりません。いやはや、とっても面白い世界です。

しかし、結局、ロボットは、ソフトウェアが勝負ですね。また、ソフトの工数を減らす為には、高価なデバイスが必要になります。結局、高い原価構成のジレンマに陥ります。
だから、企業レベルでロボットの原価を考えると、価格は高くならざるおえません。
それを、僕は、RDCSで解決しています。

図1 元画像 
(白い格子は、画像の保存時に付加)
図2 noiseの大量発生
noiseが解り易いように二値化した画像
HSV色空間では、大量のnoiseを拾ってしまう場合がある
 図3 認識結果
noise処理を行い、ボールだけを認識する 
この処理もRaspberry Piで実行しますが、画像の保存をしなければ処理は瞬時に終わります。

peace!

2013年2月9日土曜日

Performance of the recognizing a moving ball on Raspberry Pi

自律型ロボットは、自分で空間認識をする必要があります。その為には、リアルタイムで画像解析が必要になりますが、Raspberry Piでそれをする事は無理があります。
しかし、どこまで可能なのか?知る必要があり各種の画像処理のパフォーマンステストをしています。
結果的に言えば、私のプログラムのチューニングをすれば、かなりの事ができるという事でした。プログラムを見直すと、無駄な処理やループが沢山ありました。今は、とにかく、数を優先している為、ロジックに無駄が沢山あります (-_-)

(私が開発しているのは、人が操作しない、自律型ロボットです。人が操作する物は、ラジコンだと考えて、ハッキリ分けています。趣味の一つがラジコン飛行なので、、、)

テストの例
「画像入手(webcam 640x480 CV_U8C3) -> 動くボール認識 -> 認識画像出力」
上記100回の処理時間 → 10回計測 平均45秒 約2回/秒 の認識処理
同上 ファイル出力無し → 10回計測 平均30秒 約3回/秒 の認識処理

テスト方法は、下図のピンクのボールを手に持って、Webcamの前で不規則に動かします。Raspberry Pi上の認識プログラムが、usb接続されたwebcamから画像を入手して、動いているボールだけを認識します。
図1
ピンクのボールをwebcamの前で不規則に動かし、ボールだけを認識する
図2
左上から右下に、処理結果の順で並べている
赤が、手で不規則に動かしたボールの認識結果。
光の影響があるので、完全な'円'になっていない。白丸は同じボールであることを示す
認識プログラムは、複数の動く物体を認識できる
図2の8枚のボールの動きは、約3.6秒間(45秒/100x8)の動きのsnapshotになります。
1回の処理毎に、認識した結果をファイルに保存した画像の一部を並べました。保存をしない場合は、同じ時間で、12回のボール認識ができます。

1秒間に、3回の画像認識処理ができれば、僕のロボットの要求仕様を十分に満たす事が出来ます。実際には、風景内の沢山の認識をしているので、ロボットの運用上は1秒間に1回の画像認識処理で十分です。

Raspberry Piは、見た目以上に、すごいヤツです。

peace!

2013年2月7日木曜日

A memorandum : fswebcam

fswebcamは、デフォルトでbannerを出力するので、それを抑制する設定。
忘れない様に、、、
いままでは、画像処理の途中で無くなっていたので無視していたけど、
ある処理をする為に、赤いラインが邪魔になるので、調べました。
デバイスを指定しているのは、Raspberry Piに2台のWebcamを接続している為。
保存ファイル名は、2050-02-07-123950.jpgの様になります。


fswebcam -d /dev/video0 -r 640*480 --no-banner --line-colour '#FF000000' -save /tmp/`date +%Y-%m-%d-%H%M%S.jpg` -S 3


bannerが消えました
ファイル名の2050年は、冗談です。 (^_^)

peace!

Recognizing tomatos on my robot using Raspberry Pi

15万円台、トマト収穫ロボットの基礎技術の紹介です。

今回は、ロボットの目、形状認識の紹介です。
特徴は、2次元の画像データ1枚から、トマトを抽出し、かつ抽出したトマトの3次元の位相関係を作る点です。この位相関係が出来れば、その後の処理を効率よくすすめる事が出来ます。
    Step1: 2次元画像を使ったトマト形状認識と、その他 controlデータ抽出
    Step2: 3次元位相構造の作成

この認識で使っているアルゴリズムは、Computer Visionで開発された様々なOpenCVに実装されているアルゴリズムと、トマトを栽培しながら観察した植物体の位相構造などから作ったアルゴリズムを組合せました。(3D GISの開発経験も役に立ちました)
この内容は、トマト収穫機や収穫済みのトマトのパッキングなど、広範囲に使える基礎的な技術です。また、webcamなどの安価なカメラで行う事を前提に開発しています。

下に表示した画像からのトマト抽出結果は、ブログ標題の背景写真を使っています。トマトの表面が光っている、またガクがついているなど、画像を使った形状認識に於いては、条件が悪いデータです。

青い範囲(640x480)が、Actuatorのmotion planning の対象であり、その中は精度を高めて認識をしています。赤い丸で囲まれた物が、第一段階の画像処理をして認識したトマトです。青い四角の範囲では、ほぼ100%の認識です。この処理は、アルゴリズムの高速化に苦労しました。今は、i5クラスのマシンで1秒の数分の1以下のオーダです。

第一ステップの認識
青い四角は、特に認識精度を要求する範囲
赤い○は、トマトとして認識した形状
シアンの○は、後処理に必要なcontrolデータ
画像のふちは、切れたデータの処理が完成していないので
誤認識が発生しています。(改善予定)
この処理の後に、第二段階として、さらに独自のテンプレートを使った位相構造抽出処理をして、一定の誤差内の3次元データを生成します。3次元データが出来た段階で、トマト認識処理は終了です。第二段階は位相構造の演算が主なので短時間で終わります。
その3次元データは、ActuatorのMotion Planningの元データになります。
このように書くと、単純だけど、僕に取っては認識処理は結構複雑で悩みました。

可能な限り、2次元の画像データから3次元のデータを生成します。その方がコストが安く出来ます。全ては、15万円トマト収穫機の実現のためです。

この認識は、Raspberry Piの性能では負荷が高いので、他の処理への影響も考えてserviceで実施する様にしています。
ただし、プログラム処理ロジックのチューニングの余地がかなりあるので、他の機能の性能が定量的に把握できた段階で、再検討をします。1台のRaspberry Piを専用に割当てても良いし。。。。。

今は、Raspberry Piで画像を取得して、Recognizing Serviceに送って、あっという間に処理して返します。RDCSの腕の見せ所です。
RDCSによって、Raspberry Piは、実際の性能以上のロボットコントローラになります。
こういうのが、smartですよね。
The network is the computer. いい言葉です。

peace!

2013年2月5日火曜日

OpenCv cookbook for Raspberry Pi

何気に、OpenCVのソフトを整理していたら、cookbook 向きのサンプルプログラム集ができてきた。基本的な動きが分かるプログラムだけど、全部で40数個。
今度の教育の提案の時に使おうと思います。

下は、有名なLenna さんの画像を使って顔と目の認識。OpenCVは、こんな事が簡単に出来てしまいます。Raspberry Piはこの処理を”一呼吸”おいた感じでやってしまいました
LXDE の上で、大変な事になっています。
ついでに、gimp が起動しています。
僕は、グラフィック系の勉強は、あんまりパフォーマンスが高くないマシンの方が良いと思っているので、Raspberry Piがちょうどいいかもしれません。
恐るべし、Raspberry Pi。最近、そう思ってきた。

まぁ、提案の題は、こんな感じ。大人向きだから、これでいいでしょう。
子供達のための、ビジュアル技法を使った、問題解決法

peace!

2013年1月17日木曜日

Recognizing and Extracting tomatos from a photo digital image.

トマト収穫ロボットを作るためには、画像からのトマト認識が重要です。
その画像認識技術の開発を進めています。
複数の方法を組合せて認識しますが、安定してきたので紹介します。
OpenCVも使っていますが、認識技術の中核は自作しました。

下の写真は、遠目で撮った写真から収穫が可能なトマトの候補を認識した結果です。何故、このような離れた位置からの認識が必要なのかは、長くなるので別な機会に説明します。
まだまだロジックの改良が必要ですが、目標は達成できそうです。
トマト収穫ロボットでは、2000x1500程度の画素数のwebcamを使うので、遠目の撮影を行う為のトマトとの位置関係、そして移動ロボットへの搭載方法を考えています。
元々、Low Cost Robotなので、1台専用にしても良いですが、、、

葉の陰や、重なっていても、それなりに認識しています。
この処理は、ロボットに搭載しているRaspberry Piの性能では、実用上の速度で出来ないので、RDCS上に配置されたi5 2.5GHz のマシンで動く、Space Recognizing Serviceで行います。その結果をロボットに返します。
遠目の撮影で、かつ 影になっているのトマト認識
黄緑色の十字マーカーは、認識した収穫候補のトマトを表します 
(処理対象の画像解像度 3680 × 2760)
画像認識の点で言えば、如何に、一枚の画像から多くの情報を、位相関係も含めて、かつ高速に抽出するのかが、私の一番重要視している点です。
50センチ程度から撮影した画像で行えば、ほぼ位相関係も含めて認識が可能となってきました。実際の収穫対象のトマトを選定する為には、まずは十分です。あとは、画像から推定するトマトの糖度ですが、なんとかなるでしょう。なんたって、サンプルが大量にありますから、実験しながら試行錯誤し、閾値の組合せを作れば良いです。接近したトマト画像の認識処理は、Raspberry Piで処理する目処も立ちました。

ちなみに、このトマトは、フルーツトマトで、糖度が約10以上あります。
私のトマト栽培は、化学合成農薬/肥料や、有害物の混ざり込む可能性のある農業用水を使いません。有用な微生物や安全な水を活用して作っています。
その理由は、自分が化学合成物に少し敏感な体質だからです。安心して食べれる物を作って、普通に食べれるのは、そのような体質の私にとっては大きな幸せです。

あ〜、時間が足りない、プログラムもっと、作りたい、改良したい。
工作の方は、ラジコン飛行機をしていたので、なんとかなりそうです。
そんな事もあり、主要な機能を遠隔から無線で操縦するする物はラジコンだと思っています。ロボットは、対象の作業を自律的に行う装置だと考えています。私は、人手を減らす為に使うので操縦しないですむようにしたいです。

peace!

2013年1月14日月曜日

A locomotion control of a 2-wheel-robot using 2 webcams


ロボットは、ソフトウェアの塊、最近つとに感じます。作っても、作っても、まだ足りない。でも、進んでいるはず。。。
そして、いろいろなアイディアが生まれてくるけど、実装の時間がない、まどろっこしさ。。。
それに、http://szeliski.org/Book/ の情報を知ってしまったが故に、試したい事は沢山ある。何故、一日は、24時間しか無いのだろうか?

農作業は、特定のルートの移動と、ルート内での作業の繰り返します。
従って、2つの移動制御が要求されます。ただし、コストをかけないので、周囲に誘導する装置もなく、ロボットに搭載した2つのカメラの情報だけで制御します。
お金がないので。。。

1)指定されたルートを、指定された速度で移動する (直進、回転)
2)指定された位置で、指定された方向で停止する

このテストロボットは、2つのWebcamから取得した画像を利用して、2 Wheels の移動制御を行います。(testing robotは、ソフト開発を目的としています。実機でのテストは大掛かりになりますが、このようなtesting robotを使うとソフト開発がどこでも可能となり開発効率が高まります。)
また、前にいる人やロボットと一定の間隔を保ち移動する事も可能です。
画像から如何に、多くの特徴を抽出して、関連づけるか。その点に苦労しています。実は、タイトルの写真も、その機能検証に使いました。
「何個のトマトが、どのように重なって、いるのか?

このロボットには、最初に移動ルートの目安になる画像を複数与えます。ロボットはその画像を分析して、かつWebcamからの画像を使い、自分で移動しながらルートを導きだします。スマートフォンで、ルートのマークとなる所の写真を、順番に撮影しRDCSに転送する。すると、ロボットが自分で動いてルートを探します。2つのWebcamなので、必ず左回りです。3つにするか、側面カメラをサーボで回転させれば右回り、左回り両方可能となります。主にハウス内で使うので、Webcam2台仕様で十分です。
このtesting robotのビデオは、近いうちにアップします。

画像処理には、OpenCVを使っていますが、本当にOpenCVには感謝しています。

安価なWebcam2台とRaspberry Piで作ります。地形を認識しながら進むロボットより、格安で移動ロボットが作れます。

Testing 2 wheel robot
Raspberry Pi で、2つのカメラ、およびモータ制御コントローラを制御します。
Fail Safe & Recovery 以外の画像処理は、同じRDCS上にある Space Recognizing Service に画像を転送して処理を依頼し、結果を受け取り次の移動制御をします。ただ、imagingについては、少しずつRaspberry Pi上での処理を増やす予定です。
Webcamの画像取得は、fswebcamを使っています。

Testing 2 wheel robot. A Raspberry Pi under two webcams.

Raspberry Piは、カメラの台座の下に装着しています。


昨年末に届いた Raspberry Piは、ピンクのプラスチックケースに入っていました。そのケースを見て、「自分で加工してケースを作って下さい」との意図を感じるのは、僕だけではないと思います。RS版のRaspberry Piだけでしょうか?ただし、UK製ではありません。
そのケースに、上の写真のような加工をして使っています。これで、ケースを買わなくても済みます。写真はケースの裏を、上にして撮影しました。ネジでRaspberry Piをケースに止めています。内部にRaspberry Piの固定ができる様になっているので、1本で十分です。そのネジのナットより高さのあるゴムを4隅につけています。ただ、プラスチックの材質はそんなに良くないので、加工の時には注意が必要です。

でも、今の時代、オープンソースもあれば、安価で高性能な部品が沢山あります。創造力を働かせて取り組めば、少しのお金で実現する事ができると信じてます。時間は必要ですが、、、

意図する意味は少し違うけど、、、
All it needs is courage, imagination, and a little dough.                  Charles Chaplin

peace!

追加
Design Philosoph and Concept of my robots  も見てね!