物体認識系コンポーネント群
物体認識系コンポーネント群
投稿日時:
木, 2016-10-27 22:22
概要
- 物体位置姿勢推定のためのRTCおよびプログラム
- 既存、物体位置姿勢推定RTCの改良・改善
特徴
- 単眼カメラで物体位置姿勢推定が出来る
- さまざまなアルゴリズムで物体位置・姿勢推定が出来る
仕様
- 言語:C++
- OS:Windows7
- OpenCV:3.1
ソースコード及びマニュアル
- 全部入りは-->こちら<--からダウンロードしてください.
更新履歴
- 12月7日
ソースコードとマニュアルをアップしました.
- 12月13日
コンポーネントを追加しました.
問合先(メールアドレス):
130447051@openrtm.org
最終更新日時:
水, 2016-12-14 11:26
コメント
ソースコード、マニュアルを読んだのですが、以下の点が気になりました。
コメント有難うございます.
名城大学の高御堂です.
返信遅くなりまして申し訳ございません.
・位置・姿勢を同時変換行列でTimedDoubleSeq型により出力していますが、これで大丈夫でしょうか?TimedDoubleSeq型で出力するとどこに何が入っているか分かり辛いと思います。4×4の行列なのだから2次元配列に格納できれば直感的には分かりやすくなるとは思うのですが、何かいい方法をご存じであれば教えてください。 本コポーネントは知能化プロジェクトの時に開発された物体位置・姿勢推定コンポーネントの改良を行っています。なので、ポート当の仕様はその当時のままとなっております。 位置、姿勢の表現ですが、4×4行列ではなく、一部を省略した、3×4行列で出力しております。 それぞれのデータの内容は、
R11 R12 R13 T11
R21 R22 R23 T12
R31 R32 R33 T13
の行列を、
R11 R12 R13 T11 R21 R22 …R33 T13
の順番で配列に格納します. このことはマニュアルに乗っていないので、追加させていただぎす。ご指摘有難うございます。
・buildフォルダは必要ないので削除することをお勧めします。
ご指摘有難うございます。
・サービスポートでの物体モデルID設定の方法がよくわかりません。サービスポートのコンシュマー側の作成例等はないのでしょうか?
モデル登録するサンプルコンポーネント追加しました。 マニュアルには追加されていないので、追加させていただきます。
・ModelInfoServiceインタフェースでoctetの配列で物体モデルのIDを渡していますが、何故stringにしなかったのでしょうか?
8bitのデータを送るのにcharよりもoctetのほうが速度が出るということがあったので,octetにしたと言う経緯があります. もともとのRTCとの入れ替えを可能な形態でしたため,今回はこのような形になっておりますが,stringにしたほうが直感的にわかるというご指摘かと思うので,今後検討します.
・invokeEvent関数で_readModelFlagという変数がfalseになるまで待つ処理があるのですが、316行目付近の処理をinvokeEvent関数で実行したら何か問題があるのでしょうか? onExeFlagという変数がfalseになるまで待つ処理はミューテックスで排他処理した方が簡単になると思うのですが、何か問題があるのでしょうか?
ご指摘有難うございます。質問の該当部分はオリジナルのままになっております。自分がコードの内容を正確に理解できていないので、そのままとなっています。今後、改良する際に検討させていただきます。
・Displayというコンフィギュレーションパラメータは、onかoffのみの選択であればWidgetの設定をした方が使いやすいと思いました。
こちらも、オリジナルのままとなっています。 検討させていただきます。
・他の人が作成したソースコードを同梱しているのであれば別フォルダに分離した方がいいと思います。
ご指摘有難うございます。自分の知識が足りず、手探りで行った結果、今の形になっております。今後、改良していきたいと思います。
内容を確認させていただきました.
姿勢推定という有用なアルゴリズムを上手く RTC 化した汎用性の高いコンポーネントだと感じました.
3点コメントがあります.ご参考にしていただければと思います.
・使用しているコードにGPLライセンスのものが含まれるようですので,作成されたRTCのライセンスも明確に表記されていると再利用される場合も安心して使えると思います.
・コンポーネント群とのタイトルですので,もしObjectSensorRTCの他にも作成したコンポーネントがあればぜひアップロード下さい.
・上記コメントにもありますが,第三者のライブラリを取り込む際は,疎な関係になるように工夫した方が良いと思います,例えば,visonlibだけを更新する必要がある場合に,現在の構成だと該当箇所のソースコードを手作業で入れ替えるのは手間のように感じました.
高橋様,
コメントありがとうございます.
名城大学の高御堂です.
返信遅くなりまして,申し訳ございません.
・使用しているコードにGPLライセンスのものが含まれるようですので,作成されたRTCのライセンスも明確に表記されていると再利用される場合も安心して使えると思います.
ライセンスが明記されていない点について,ご指摘ありがとうございます. 今回使用しているコードのライセンスについてですが,大原さんが大阪大学から名城大学に移動した際に,メンテナンスを含めた責任を大原がもっており,その上で,私が使わせていただいております. ライセンス上グレーな部分があるので,今度依存関係を可能な限り取り扱うようにしていきます.
・コンポーネント群とのタイトルですので,もしObjectSensorRTCの他にも作成したコンポーネントがあればぜひアップロード下さい.
サービスポートを活用するためのサンプルコンポーネントと,アルゴリズムを変えたコンポーネントを追加させていただきました.
・上記コメントにもありますが,第三者のライブラリを取り込む際は,疎な関係になるように工夫した方が良いと思います,例えば,visonlibだけを更新する必要がある場合に,現在の構成だと該当箇所のソースコードを手作業で入れ替えるのは手間のように感じました.
こちらは,CMakeListを書き換えて,分けるようにします.ご指摘ありがとうございます.
産総研の河内です。 OpenCV3.1導入マニュアルについて質問させて下さい。
こちらも2015-12-21リリースのVERSION3.1のソースコードで確認しています。(Windows7で、CMake時、vc2013 32bit を指定)
河内様
コメントありがとうございます. 名城大学の高御堂です. 返信遅れてしまい,申し訳ございません.
・Windows用ではなくLinux/Mac用をダウンロードすると書いてありますが、 Windows用に含まれるsourcesを使うと何か問題があるのでしょうか。
私の勘違いで,Windowsはインストーラのみが入っていると認識しておりました.コードの内容を確認したところ,こちらもLinux/Mac用も同じようでしたが,こちらも私の勘違いで,導入はGithubからダウンロードしていたようです. なので,マニュアルどうりにインストールする場合は,Githubをダウンロードしてください. ご指摘,ありがとうございます.
・CMake設定をデフォルトのままDebugビルドをすると、python27_d.lib を開くことができないと怒られるとおもうのですが、この対応はどうされたのでしょうか。
こちらが導入する際には,表示されませんでした. おそらく,こちらもCMakeListの違いのため生じると思われます.
・opencv_contribは何のために必要なのでしょうか。
こちらは,拡張モジュールで,今回コンポーネントで使用しているSIFTやSURFなどが入っています. こちらは,特許申請されているので,必要なければ導入する必要はございません. 後に更新させていただきました,AKAZEとORBについてはopencv_contribを導入しなくても,動作します.
・opencv_contribを利用する場合のCMake時、「OPENCV_ENABLE_NONFREE」にチェックを入れると ありますが、デフォルトではこの設定がありません。私の環境では、「OPENCV_EXTRA_MODULES_PATH」だけです。 表示されるようにするための変更について教えて下さい。
こちらは,私が導入したバージョンから変更があったようです. 私が導入したバージョンを特定し,マニュアルのURL等を変更させていただきます.
・本日opencv_contribをドキュメントにあるURLからダウンロードして使用したところ、CMakeでエラーになりました。
私の該当のCMakeListには,記載されていませんでした.なので,先の理由と同じだと思われます.