このコードは OpenCV を使用して、ビデオ デバイスによってキャプチャされた各フレーム内のマーカーの位置を検出します。マーカーの物理的寸法に基づいて、姿勢推定も行います。定義された各マーカーのデータは、UDP を介してプレーン テキストの形式で利用できます。カメラに対するオブジェクトの回転の変換と、カメラの画像に表示されるオブジェクトの 2D 重心の XY 座標を返します。マーカーが表示されていない場合、返される数値は NaN になります。
このコードは追跡に一時的な情報を使用しないことに注意してください。
代わりに、キャプチャされたフレームごとにマーカーを検出し、その姿勢を推定しようとします。
.ini
構文の構成ファイルで使用できます。cv2
備えた標準の Python 環境と、使用可能なnumpy
モジュールが必要です。コードは Mac 上で Python 2.7 と OpenCV 3.4.1 を使用して開発されましたが、Python 3 や他のプラットフォームでも動作するはずです。マーカーを作成する手順は次のとおりです。 1. オブジェクトの写真を撮り、トリミングします。理想的には、解像度がカメラと互換性がある必要があります。 2.、構成ファイルを編集し、次の行が設定されていることを確認します。
[General]
一般セクションではほとんどすべてを同じままにすることができますが、カメラを調整する必要があります。調整方法については、こちらをお読みください。新しいマーカーを追加する場合は、設定を微調整する必要があるため、カメラの画像が表示されることを確認してください。
camera_show_picture = 1
それ以外の場合、新しいマーカーが構成ファイル内の新しいセクションとして追加されます。
ヘッダーはマーカーのわかりやすい名前です。
[My custom marker]
ファイル名とマーカーの物理的寸法を指定します。
marker_file_name = <File name in the same directory or full path>
marker_width = <Units are in mm.>
marker_height = <Units are in mm.>
新しいマーカーを設定するときは、次の設定を変更する必要があります。
marker_minimum_matching_distance = <Decrease it from 50>
marker_minimum_number_of_matches = <Set this to at least 4>
pose_estimation_running_average = <more than 1>
marker_minimum_matching_distance
distance は、マーカー画像とカメラの間の特徴の一致の品質に反比例します。設定が高すぎると、マーカーの外側のフィーチャが照合され、設定が低すぎると、まったく照合されません。
姿勢推定にはmarker_minimum_number_of_matches
が必要です。平行translation
座標とrotation
角度を計算するには、少なくとも 4 つの一致する点が必要です。ただし、変換に必要な一致が多いほど、推定の精度は高くなります。設定が高すぎると、ポーズ推定は少数のフレームでのみ機能します。
最後に、 pose_estimation_running_average
は、何フレームの位置データを平均化するかを設定します。返された位置があまりにも「ぎくしゃく」している場合は、この数値を増やします。ただし、平均化されるフレームが増えるほど、遅延は大きくなります。
さらに、各colour
チャネルは0
から255
までの任意の自然数にすることができます。 marker_feature_colour_*
項目は、マーカー画像とカメラの画像の間で一致する品質の高い場所を示すためのものです。 marker_indicator_colour_*
設定は、表示された一致の平均値によって計算された座標を示す単一のインジケーターの色を決定します。理想的には、このインジケーターは常にマーカーの内側にあり、UDP パケットでcentroid
として返される必要があります。
marker_feature_colour_R = <0...255>
marker_feature_colour_G = <0...255>
marker_feature_colour_B = <0...255>
marker_indicator_colour_R = <0...255>
marker_indicator_colour_G = <0...255>
marker_indicator_colour_B = <0...255>
python tracker_main.py
を実行します。幸運を!