timelery / 3D_billiard_table_recognition

experimental billiards table recognition using Open3D

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

3D billiard table recognition

Kinect Azureでビリヤードのミニテーブルを撮影し、台と台上のボールの認識を行うプロジェクトです。

付帯しているデータを使えばKinectとビリヤードの台はなくても試せます。

Open3Dの公式のドキュメントやexamplesを参考に開発しています。

Kinect and Billiard table

過去に別のレポジトリで同じミニテーブルを2D(RGB)としてOpenCVで同様の処理を行いました。

Requirements

Open3D == 0.9

Install

$ pip install open3d

Usage

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の処理とは無関係です)

動作デモ

TODO

  • ボールの番号の認識(多分CNNを使うことになる)
  • ボールの中心座標の取得。Depthカメラの性質上、真球にはならないが計算でカバーできそう

About

experimental billiards table recognition using Open3D


Languages

Language:Python 100.0%