Leap MotionをMac使ってみる(失敗編)

投稿者: | 2022-03-05
opened program for working online on laptop

各局皆様、こんにちは。アマチュア無線局、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)

いったんこの記事はここまでにしておきます。成功編はまた、乞うご期待。

参考

最後まで読んでいただきありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です