各局皆様、こんにちは。アマチュア無線局、JS2IIUです。
Best Buyで購入したLeap Motionですが、Pythonで動かせるようトライしてみました。しかし、うまくいかなかったのでメモを残しておきます。
以下手順は、うまくいきませんので、その点ご理解いただき、参考情報としてください。
目次
確認した環境
- MacOS 12.1
- MacBook Pro (13-inch, M1, 2020)
- チップ Apple M1
- Python 3.9.10
Leap Motionソフトウェアの日付が古いなーと思いながら、手を動かし始めたのですが・・・
Leap Motionソフトウェアの入手
Leap Motionを動かすためのソフトウェアをダウンロードします。UltraleapのDeveloperページからダウンロードできます。私はMacの環境なので関係ありませんが、Windowsの方は注意事項が書かれています。別のソフト(Leap Motion Orion)を使った方がいいとの記載があります。(アクセス日:2022年3月4日)
ダウンロードしたのはV2 Hand Tracking Software 2.3.1のMac用です。
なお、ダウンロードするにはユーザー登録が必要です。
ダウンロードしたファイルを展開するとこちら。README.txtにわかりやすく解説が書かれています。以下、README.txtから抜粋。
- Client software installerはLeap Motionのドライバとservice/daemonソフトをインストールする。
- LeapSDKにはヘッダーファイルとコードライブラリが入っている。ドキュメントと簡単なサンプルアプリも入っている。
LeapSDKのフォルダを探ると、Python関連ドキュメントもありました。
Leap Motionソフトウェアインストール
pkgファイルをクリックしてインストールします。あっという間です。
Leap Motion App HomeとLeap Motionというアプリがインストールされました。Leap Motion App Homeは動きません。んー、やな予感がします。
PythonでLeap Motionを動かしてみる
LeapSDKにはサンプルファイルが入っています。LeapSDK/samplesの中にSample.pyが入っています。このまま実行してもインポートのところでエラーが出てしまいます。
% python Sample.py
Traceback (most recent call last):
File "Sample.py", line 9, in <module>
import Leap, sys, thread, time
ImportError: No module named Leap
Leap.pyのインポート
Leap.pyはLeapSDK/lib の中にあります。このフォルダにあるファイルを全てコピーします。コピー先ですが、Sample.pyがあるフォルダにleapmotionlibという名前のフォルダを作りその中にコピーします。フォルダの名前はなんでも良いです。以下の図のようなフォルダ構成になりました。
leapmotionlibフォルダに__init__.pyという中身は空っぽのファイルを作ります。Terminalから以下のコマンドでファイルが作れます。
$ touch __init__.py
Sample.pyのソースコードに戻ります。
importの最初のところからうまくいっていません。VSCodeだと以下のようにimportがうまくいかないと波線が表示されます。とてもわかりやすい。
9行目のimport Leapのところをfrom leapmotionlib import Leapに変えます。このleapmotionlibは先ほどLeapSDK/libからファイルをコピーしてきた時のフォルダの名前です。また、11行目のLeapをleapmotion.Leapに修正します。
Python 3.9.10を使っているので、import threadもうまくいきません。import _threadに修正します。詳細はこちら(ImportError: No module named ‘thread’)を参考にしてください。
from leapmotionlib import Leap
import sys, _thread, time
from leapmotionlib.Leap import CircleGesture, KeyTapGesture, ScreenTapGesture, SwipeGesture
VSCodeの波線が消えて、うまくいきそうな感じになりました。
こういったところがVSCodeの素晴らしいところです。
Sample.pyの手直し
Sample.pyにはまだ修正が必要な箇所がたくさんあります。パッとみただけでも、print “something”のようにカッコが足りない箇所、不必要な「;」の2種類です、面倒ですが修正していきます。
LeapPython.soの問題
Sample.pyのエラーがなくなったので早速実行してみました。実行すると以下のようなエラーが出ます。LeapPython.soに問題がありそうです。missing compatible architecture (have ‘x86_64,i386’, need ‘arm64e’)。ここまできてあー残念。Intel mac用のライブラリでした。
ImportError: dlopen(/Users/.../LeapMotion/leapmotionlib/LeapPython.so, 0x0002): tried: '/Users/.../LeapMotion/leapmotionlib/LeapPython.so' (fat file, but missing compatible architecture (have 'x86_64,i386', need 'arm64e')), '/usr/local/lib/LeapPython.so' (no such file), '/usr/lib/LeapPython.so' (no such file)
失敗例
LeapPython.soにパッチを当てる
以前使っていたMacを引っ張り出してきてもいいのですが、面白くないのでなんとかしてみたいと思います。こちらのページ(Set up Leap Motion for Python development on macOS 11 Big Sur)にmacOS 11でパッチを当てる方法が書かれていますので、参考にしながらやってみます。
% install_name_tool -change /Library/Frameworks/Python.framework/Versions/Current/Python /usr/lib/libpython.dylib LeapPython.so
これ以上頑張ってもダメだな、というエラーが返ってきました。M1macですからね。
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: LeapPython.so (for architecture x86_64)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: LeapPython.so (for architecture i386)
いったんこの記事はここまでにしておきます。成功編はまた、乞うご期待。
参考
- V2 HAND TRACKING SOFTWARE (Ultraleap)
- Leap Motion with Python
- ImportError: No module named ‘thread’ (Stack overflow)
- Python で文字列と変数を出力する
- Set up Leap Motion for Python development on macOS 11 Big Sur
- Generating a Python 3.3.0 Wrapper with SWIG 2.0.9
- Python3でLeap Motion
最後まで読んでいただきありがとうございました。