Horus(Ciclop 3D Scanner 制御ソフトウェア)のPython3.x化

VirtualBox 上に Slackware と Debian と CentOS のテスト環境を用意したのですが、ホストのUSBカメラの認識が上手くいきません。LiveCDで試すときちんと認識するので、仮想環境での検証を諦め、実機に検証用環境をセットアップすることに。

結果、GhostBSD と Slackware と Debian と CentOS のクアドラブルブート環境が出来ました :slightly_smiling_face:

x86_64 Linux は PyPI のサポート対象であるため、wxPython 以外は pip で最新版をインストールの予定。

原因不明ながら、PC 上の Linux では最新版 opencv-python が問題なく動作するようです。なぜ ARM な Raspbian 環境では上手く動作しないのかは今後の検証課題とします。

macOS の検証環境としては、弁当箱 Mac mini Late 2014 1.4GHz を用意しました。無改造の Horus 0.2rc1 は起動出来ましたが、wxPython 及び opencv-python の最新版で動作させようとすると色々エラーを吐き上手く行きません。

ところで、macOS Mojave 以降では OpenGL が非推奨となるようです :thinking:
Horus でも将来的に OpenGL を使っている部分を Vulkan で置き換える必要が出てくるかも。

ほんっとうに御無沙汰しておりました。申し訳ありませんでした :scream:
3.x系への移植で詰まっていた部分がやーっと解決出来ましたので報告します。
ソースコードの、

lib\horus\gui\util\opengl_helpers.py
lib\horus\gui\util\opengl_gui.py

この中の割り算の取り扱いが 2.x 系から 3.x 系で変更になったことで表示が壊れてしまっていました。

割り算の結果の整数部分を得る

python2.x系
a / b
python3.x系
a // b

今までの改変で致命的な部分はおおよそ潰せました。

「いいね!」 1

他に

lib\horus\gui\util\scene_view.py

にも徐算が多数現れますので、int 型で割り算の商を求められる箇所を//で置き換えます。

また、

lib\horus\engine\driver\board.py

の serial 通信における文字列の扱いが python2.x 系と 3.x 系で作法が変わっていましたので適切に修正します。

これまでの一連の改変により、3.x 化 Horus と Ciclop の接続が出来ました(スキャンが出来るためにはまだ潰さなくてはならないバグ多数)。

現在のテスト環境

Python
3.8.10(Win 64)

インストールしたPythonパッケージ

matplotlib==3.3.4
opencv-python==4.1.2.30
scipy==1.6.3
wxPython==4.0.7.post2
PyOpenGL
pyserial

ところで、久しぶりに覗いたところ、BQLabs のサイトから Ciclop や Horus のページが無くなっていました。これに関連し、Windows や Mac 向けの Horus のリリースも DL 出来なくなっています。
※ Win や Mac 向けにインストーラーパッケージが無くても Python2.7 系から直接起動すれば大丈夫(ただし Python2.7 系がそもそも大丈夫じゃない)。

「Python 2.7.18」がリリース ~「Python 2」シリーズの最終版 - 窓の杜

Python Release Python 2.7.18 | Python.org
Python Release Python 2.7.18 | Python.org

Ciclop/Horus ソースコード入手先

Python 3.8.10 での Horus の起動テストとテクスチャバグの解消


Python3.8.10 上で Horus を介さずに pySerial で Ciclop に直接制御コマンドを送ると望む反応が返ってくるので、あとは Horus 側のコードの調整です。依存する Python パッケージのバージョンを上げると仕様変更からエラーの嵐になるので、上の投稿のパッケージのバージョンで固定してバグを潰していきます。あと一息。

その後色々試して判明。テクスチャバグ解消に関しては、opengl_helpers.py と opengl_gui.py の修正の成果ではなく、pyOpenGL のバージョンを 3.1.0 から 3.1.4 または 3.1.5 に上げた為。Horus のコード側ではなく Python パッケージ側の問題というのは頭にありませんでした。

動いたー!!!


連投ごめんなさい。でも言わせて。

動いたー!!!やったぜー!!!!!

  • 外見上の違いはありませんが Python3.x 系で動いてます。
  • 取り込んだのはみんな大好き #3DBenchy (3Dプリンタ向けのベンチマーク用データ)です。
  • 文字列の型と割り算とバージョンアップに伴う仕様変更がつらかった。
  • あとひとつ、まずいバグがあるのでそれを潰したら GitHub で公開します。
    • 潰せました。→2.x系と3.x系の文字列とバイト列の取り扱いの違いに起因して、plyファイルの読み込み、書き出しが出来なくなっていました。
  • プルリクエストお待ちしております。
「いいね!」 1

GitHub で fork してきました。

※ アナウンスのため、本トピックの最初のポストも書き換えました。

Horus Python 3.x port

一応辛うじて動くようになっていますが、まだまだ pre-alpha と言った雰囲気です 。
GitHub - neetandgeeks/horus: 3D Scanning multiplatform desktop application

既知のバグ

  • 警告ダイアログ等が wxPython の仕様変更に追いついていない箇所多数。
  • 例えばボードへの接続の前に Edit > Preferences から正しい値を設定していないと止まります。

以下は起動手順の抜粋(バグをあらかた潰せたら PyPI に登録して pip install 出来るようにしたいです)。

Installation

CAUTION

This Python 3.x port is currently highly unstable.

With Python 3.8.x

Example

on Windows like System
C:\Users\foobar> mkdir testenv &:: make your working directory
C:\Users\foobar> cd testenv &:: change current directory
C:\Users\foobar\testenv> py -3.8 -m venv horusenv &:: make your Python 3.8.x virtual environment
C:\Users\foobar\testenv> .\horusenv\Scripts\activate &:: activate virtual environment
(horusenv) C:\Users\foobar\testenv> cd ..\horus &:: change current directory to your extracted horus source
(horusenv) C:\Users\foobar\horus> py -m pip install -r requirements.txt &:: install dependencies
(horusenv) C:\Users\foobar\horus> py .\horus.py &:: run horus
on Unix like System
[foobar@localhost ~]$ mkdir testenv # make your working directory
[foobar@localhost ~]$ cd testenv # change current directory
[foobar@localhost testenv]$ python3.8 -m venv horusenv # make your Python 3.8.x virtual environment
[foobar@localhost testenv]$ source horusenv/bin/activate # activate virtual environment
(horusenv) [foobar@localhost testenv]$ cd ../horus # change current directory to your extracted horus source
(horusenv) [foobar@localhost horus]$ python3 -m pip install -r requirements.txt # install dependencies
(horusenv) [foobar@localhost horus]$ python3 ./horus.py # run horus
「いいね!」 1