Kinect Azureでビリヤードのミニテーブルを撮影し、台と台上のボールの認識を行うプロジェクトです。
付帯しているデータを使えばKinectとビリヤードの台はなくても試せます。
Open3Dの公式のドキュメントやexamplesを参考に開発しています。
過去に別のレポジトリで同じミニテーブルを2D(RGB)としてOpenCVで同様の処理を行いました。
Open3D == 0.9
$ pip install open3d
1_draw_geometries.pyから5_global_registration_two_images.pyを実行してください。引数は不要です。
- 0_point_cloud_data_from_kinect.py KinectでRGBD画像を撮影し、PLYデータに変換して保存します。data/配下に保存されたデータを使う場合にはこのファイルの実行は不要です。
- 1_draw_geometries.py data/billiard_table.plyの3D画像を表示します。
- 2_segment_table.py RANSACにより平面を検出するアルゴリズムを使ってビリヤードテーブルの面を検出します。
- 3_segment_object_on_table.py 2_segment_table.pyにより検出された平面よりも上にある点群を可視化します。
- 4_dbscan_object_on_table.py 3_segment_object_on_table.pyにより検出された点群をDBSCANによりクラスタリングし可視化します。これにより玉とバンクが異なるオブジェクトとして認識できます。
- 5_global_registration_two_images.py 2つの異なる視点から撮影した点群をRANSACにより重ねます。(1〜4の処理とは無関係です)
- ボールの番号の認識(多分CNNを使うことになる)
- ボールの中心座標の取得。Depthカメラの性質上、真球にはならないが計算でカバーできそう