最近、何の因果かYOLOで遊ぼうというイベントの講師をしないかというお誘いをいただきまして、分不相応とは思いつつもやらせていただいてます。
で、そろそろ次回使うアノテーションツールの準備をしようと思ったんですが
VoTTはno longer being maintained!
とか言ってるし
CVATはdocker前提のようなのでたぶんwindows勢が死ぬし
VIAはclient sideのJSで動いてるらしいので、(データ数が増えた時とか、長時間作業した時)イマイチ信用がおけない*1
ということで、安定のlabelImgをインストールしようとしたんですが、M1 macだとすんなりとは導入できません。 READMEに書いてあるとおり、pipでインストールしようとすると、次のようなエラーが出ます。
% pip3 install labelImg DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621 Requirement already satisfied: labelImg in /opt/homebrew/lib/python3.9/site-packages (1.8.5) Collecting pyqt5 Using cached PyQt5-5.15.6.tar.gz (3.2 MB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... error error: subprocess-exited-with-error × Preparing metadata (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [29 lines of output] Traceback (most recent call last): File "/opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 156, in prepare_metadata_for_build_wheel hook = backend.prepare_metadata_for_build_wheel AttributeError: module 'sipbuild.api' has no attribute 'prepare_metadata_for_build_wheel' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 363, in <module> main() File "/opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 345, in main json_out['return_val'] = hook(**hook_input['kwargs']) File "/opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 160, in prepare_metadata_for_build_wheel whl_basename = backend.build_wheel(metadata_directory, config_settings) File "/private/var/folders/cp/mpvg43bj17xfjdsvlclvhf1m0000gn/T/pip-build-env-m96blqiu/overlay/lib/python3.9/site-packages/sipbuild/api.py", line 51, in build_wheel project = AbstractProject.bootstrap('pep517') File "/private/var/folders/cp/mpvg43bj17xfjdsvlclvhf1m0000gn/T/pip-build-env-m96blqiu/overlay/lib/python3.9/site-packages/sipbuild/abstract_project.py", line 83, in bootstrap project.setup(pyproject, tool, tool_description) File "/private/var/folders/cp/mpvg43bj17xfjdsvlclvhf1m0000gn/T/pip-build-env-m96blqiu/overlay/lib/python3.9/site-packages/sipbuild/project.py", line 594, in setup self.apply_user_defaults(tool) File "project.py", line 63, in apply_user_defaults super().apply_user_defaults(tool) File "/private/var/folders/cp/mpvg43bj17xfjdsvlclvhf1m0000gn/T/pip-build-env-m96blqiu/overlay/lib/python3.9/site-packages/pyqtbuild/project.py", line 70, in apply_user_defaults super().apply_user_defaults(tool) File "/private/var/folders/cp/mpvg43bj17xfjdsvlclvhf1m0000gn/T/pip-build-env-m96blqiu/overlay/lib/python3.9/site-packages/sipbuild/project.py", line 241, in apply_user_defaults self.builder.apply_user_defaults(tool) File "/private/var/folders/cp/mpvg43bj17xfjdsvlclvhf1m0000gn/T/pip-build-env-m96blqiu/overlay/lib/python3.9/site-packages/pyqtbuild/builder.py", line 67, in apply_user_defaults raise PyProjectOptionException('qmake', sipbuild.pyproject.PyProjectOptionException [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed × Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with the package mentioned above, not pip. hint: See above for details.
エラーメッセージを参考にいろいろググってみたところ
- labelImgは pyqt5に依存
- M1 mac用はpyqt6以降で対応
という状況のようでした・・・o..rz
こちらのnoteではpython3.7にダウングレードしたらいけたよ!って話ですが
さらにぐぐってたら、githubのこちらのissueにpyside6ブランチを試してみなってあったので、これでやってみようと思います。
> git clone https://github.com/tzutalin/labelImg.git > cd labelImg > git checkout pyside6 > pip3 install pipenv > pipenv run pip install pyside6 lxml > pipenv run make pyside6 > pipenv run python3 labelImg.py
これで、何の問題もなく、labelImgが起動しました。
最後にApplicationsフォルダにナイスなアイコンを表示できるようにインストールしておきましょう。
初めにsetup.pyがmain branch用のままなので、依存パッケージとしてpyqt5が入っているのをpyside6に変更します
> sed -i -e 's/pyqt5/pyside6/' setup.py
続いて、READMEの[Optional]と書かれた行のコマンドをちょっと変えて順に実行していきます。
> rm -rf build dist > python3 setup.py py2app -A > mv "dist/labelImg.app" /Applications
これでlaunchpadを開くと、素敵なアイコンが表示されてるはずです
あれ・・・???
この状態でも画像は無いですが、一応起動はしてくれます。
でもpipenv run python3 labelimg.py
で起動してた時は日本語表示だったのが、英語表示になってしまいましたorz
うーん、イマドキのpythonのパッケージャーとか良く分からんのでとりあえずpipenv
から起動する方式でやることにします。
issueを眺めてるとqt6関連のissueが乱立してて、はたしてこのブランチでやるのが今後主流になるかどうか分かりませんが、とりあえず現時点ではこれで動かすのが一番簡単そうですね。
*1:実際に評価したわけではないので、やってみたら特に問題はでないかもしれませんが・・・