StereoPiでのOpenCVの探玢ビデオからの深床マップ





今日、Raspberry PiのOpenCV孊習者向けのPythonの䟋、぀たりデュアルチャンバヌStereoPiボヌドを共有したいず思いたす。 完成したコヌドおよびRaspbianむメヌゞを䜿甚するず、写真のキャプチャからキャプチャしたビデオの深床マップの取埗たで、すべおの手順を実行できたす。



入門



これらの䟋は、本番゜リュヌションではなく、トピックに心地よく浞るこずを目的ずしおいるこずをすぐに匷調する必芁がありたす。 あなたがOpenCVの䞊玚ナヌザヌであり、ラズベリヌを扱っおいる堎合は、適切な操䜜のために䞀口でコヌディングし、さらにラズベリヌGPUを䜿甚するこずをお勧めしたす。 蚘事の最埌で、Python゜リュヌションの「ボトルネック」ず党䜓的なパフォヌマンスに぀いお詳しく説明したす。



私たちは䜕に取り組んでいたすか



アむアンずしお、ここにそのようなセットアップがありたす







Raspberry Pi Compute Module 3+に搭茉されたStereoPiボヌド。 最も簡単な2台のカメラは、Raspberry PiバヌゞョンV1ov5647センサヌ䞊に接続されおいたす。



むンストヌルされるもの





すべおの゜フトりェアのむンストヌルプロセスはこの蚘事の範囲倖であり、完成したRaspbianむメヌゞをダりンロヌドするこずをお勧めしたす蚘事の最埌にあるgithubぞのリンク。



ステップ1写真をキャプチャする



これを行うには、1_test.pyスクリプトを䜿甚したす



コン゜ヌルを開き、ホヌムフォルダヌからサンプルのあるフォルダヌに移動したす。



cd stereopi-tutorial
      
      





スクリプトを実行したす。



 python 1_test.py
      
      





開始埌、ステレオ画像のプレビュヌが画面に衚瀺されたす。 Qボタンを抌すずプロセスが䞭断され、最埌にキャプチャされた画像が保存され、次のスクリプトのいずれかで深床マップを蚭定するために䜿甚されたす。



このスクリプトを䜿甚するず、すべおのハヌドりェアが正垞に動䜜しおいるこずを確認できるだけでなく、将来の䜿甚に備えお最初の画像を取埗できたす。



最初のスクリプトは次のようになりたす。





ステップ2キャリブレヌション甚の写真を収集する



真空䞭の球圢の銬に぀いお話す堎合、高品質の深床マップを取埗するには、2぀の完党に同䞀のカメラが必芁です。カメラの垂盎軞ず光軞は完党に平行で、氎平軞は䞀臎しおいたす。 しかし、珟実の䞖界では、すべおのカメラはわずかに異なり、完党に配眮するこずは䞍可胜です。 そのため、゜フトりェアキャリブレヌショントリックが考案されたした。 珟実䞖界の2台のカメラを䜿甚しお、既知のオブゞェクトの倚数の写真を撮圱しチェス盀のある写真がありたす、特別なアルゎリズムがすべおの「䞍完党さ」を蚈算し、理想に近づくように写真を修正しようずしたす。



このスクリプトは䜜業の最初の段階を実行したす。぀たり、キャリブレヌション甚の䞀連の写真を䜜成するのに圹立ちたす。



各写真の前に、スクリプトは5秒のカりントダりンを開始したす。 今回は、原則ずしお、ボヌドを新しい䜍眮に移動し、䞡方のカメラで゚ッゞをクロヌルしないこずを確認し、その䜍眮を固定するのに十分です写真にブレがないように。 デフォルトでは、バッチサむズは30枚の写真に蚭定されおいたす。



打ち䞊げ



 python 2_chess_cycle.py
      
      





プロセス





その結果、/ scenesフォルダヌに䞀連の写真がありたす。



写真をペアにカットしたす



3番目のスクリプト3_pairs_cut.pyは、撮圱した写真を「巊」ず「右」の画像に切り取り、/ pairsフォルダヌに保存したす。 実際、このスクリプトを陀倖しお、その堎で切り取りを行うこずもできたすが、今埌の実隓では非垞に圹立ちたす。 たずえば、さたざたなシリヌズのスラむスを保存したり、スクリプトを䜿甚しおこれらのペアを操䜜したり、他のステレオカメラでペアずしお撮圱した写真を手のひらで芋たりするこずもできたす。



さらに、各画像をカットする前に、スクリプトはその画像を衚瀺したす。これにより、倚くの堎合、次のキャリブレヌション手順の前に倱敗した写真を確認し、それらを削陀できたす。



スクリプトを実行したす。



 python 3_pairs_cut.py
      
      





短いビデオ





完成した画像には、実隓に䜿甚した写真ずカットペアのセットがありたす。



æ ¡æ­£



スクリプト4_calibration.pyは、すべおのペアをチェスボヌドで描画し、写真を修正するために必芁な修正を蚈算したす。 このスクリプトは、チェス盀が芋぀からなかった写真を自動的に砎棄したため、写真が倱敗した堎合でも䜜業は停止したせん。 30組の写真がすべおアップロヌドされるず、蚈算が開始されたす。 箄1分半かかりたす。 完了埌、スクリプトはステレオペアの1぀を取埗し、蚈算されたキャリブレヌションパラメヌタヌに基づいおそれらを「修正」し、修正された画像を画面に衚瀺したす。 この時点で、キャリブレヌションの品質を評䟡できたす。



コマンドで実行



 python 4_calibration.py
      
      





䜜業䞭のキャリブレヌションスクリプト





デプスマップのセットアップ



5_dm_tune.pyスクリプトは、最初のスクリプトで撮圱した写真ずキャリブレヌション結果を読み蟌みたす。 次に、深床マップの蚭定を倉曎しお倉曎内容を確認できるむンタヌフェむスが衚瀺されたす。 ヒントパラメヌタヌを蚭定する前に、異なる距離近く30〜40センチ、平均距離メヌトルたたは2および距離にあるオブゞェクトを同時に持぀フレヌムを取埗したす。 これにより、近くのオブゞェクトは赀、遠くのオブゞェクトは濃い青になるパラメヌタヌを遞択できたす。



画像には、深床マップ蚭定を含むファむルが含たれおいたす。 「蚭定を読み蟌む」ボタンをクリックするだけで、スクリプトに蚭定を読み蟌むこずができたす。



以䞋を開始したす。



 python 5_dm_tune.py
      
      





セットアッププロセスは次のようになりたす。





リアルタむム深床マップ



最埌の6_dm_video.pyスクリプトは、以前のスクリプトの結果キャリブレヌションず深床マップの蚭定を䜿甚しお、ビデオから深床マップを構築したす。



打ち䞊げ



 python 6_dm_video.py
      
      





実際の結果





私たちのスクリプトがあなたの実隓に圹立぀こずを願っおいたす



念のため、すべおのスクリプトにキヌストロヌク凊理があり、Qボタンを抌すこずで䜜業を䞭断できるこずを远加したす。たずえば、Ctrl + Cのように「倧たかに」停止するず、Pythonずカメラのやり取りのプロセスが䞭断し、ラズベリヌの再起動が必芁になりたす。



䞊玚者向け





ご枅聎ありがずうございたした。 ゜ヌスぞの玄束されたリンクはこちらです。



All Articles