0

OS 10.7.2 と Apple のデフォルトの python 2.7.1 がインストールされた Mac を使用しています。ソース経由でopencv 2.3.1をインストールしimport cvましたが、Python内から動作することを確認できます。import cv一番上に何もない最小限のpythonスクリプト(「cvTest.py」として保存)を作成し、 py2appを(ターミナルコマンド経由でpy2applet --make-setup cvTest.py; python setup.py py2app)使用しました。結果のスタンドアロン アプリを、opencv がインストールされていない別のコンピューター (Mac、OS 10.7.2) に移動し、アプリを実行しようとすると、console.app 経由で次のエラーが表示されてクラッシュします。

11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest: Traceback (most recent call last):
11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest:   File "/Users/ra/Downloads/cvTest.app/Contents/Resources/__boot__.py", line 103, in <module>
11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest:     _argv_emulation()
11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest:   File "/Users/ra/Downloads/cvTest.app/Contents/Resources/__boot__.py", line 101, in _argv_emulation
11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest:     _get_argvemulator().mainloop()
11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest:   File "/Users/ra/Downloads/cvTest.app/Contents/Resources/__boot__.py", line 40, in mainloop
11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest:     stoptime = Evt.TickCount() + timeout
11-11-10 1:17:38.591 PM [0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest: AttributeError: 'module' object has no attribute 'TickCount'
11-11-10 1:17:38.661 PM cvTest: cvTest Error
11-11-10 1:17:39.888 PM com.apple.launchd.peruser.502: ([0x0-0xcb9cb9].org.pythonmac.unspecified.cvTest[49524]) Exited with code: 255

次に、単純な bash スクリプトを作成して、スタンドアロン アプリを掘り下げ、端末からアプリのバイナリを実行できるようにしました。

#!/bin/bash
CMD=$0
PROGDIR=$(echo $CMD|perl -pe 's|/[^/]*$||')
cd "$PROGDIR"
"./cvTest.app/Contents/MacOS/cvTest"

これを実行すると、次のエラーが発生します。

Traceback (most recent call last):
  File "/Users/ra/Downloads/cvTest.app/Contents/Resources/__boot__.py", line 137, in <module>
    _run('cvTest.py')
  File "/Users/ra/Downloads/cvTest.app/Contents/Resources/__boot__.py", line 134, in _run
    execfile(path, globals(), globals())
  File "/Users/ra/Downloads/cvTest.app/Contents/Resources/cvTest.py", line 1, in <module>
    import cv
  File "cv.pyc", line 1, in <module>
ImportError: No module named cv2.cv
2011-11-10 13:18:26.239 cvTest[49578:707] cvTest Error

[Process completed]

それで、ここで何が起こっているのですか?エラーが発生するのはなぜですか? opencv を py2app で作成されたアプリにバンドルして動作させる方法はありますimport cvか?

4

3 に答える 3

0

正直、よくわかりません。しかし、私はとりわけコンピュータービジョンベース(OpenCVをラップする)のオープンソースプロジェクトに取り組んでいます(http://www.simplecv.org)。私たちが抱えている問題の1つは、ワンクリックインストーラーが必要なため、プラットフォーム間での展開にあります。

WindowsでInnosetupを使用してみたところ、多くの問題が発生しました。私はうんざりしていたので、自分で書き始めました。基本的に、このプログラムが行うのはブートストラッププログラムです。exeをダウンロードして実行すると、必要なファイル/ライブラリのリストが取得され、インストールが開始されます。したがって、この場合、ライブラリがインストールされていないマシンにソフトウェアをインストールできます。最初に実行するのは、Python、setuptools、opencvなどです。

基本的に、私がオープンソースとしてリリースしているアプリは、innosetupの代わりになりますが、クロスプラットフォームになります。現在(約85%)完了していることを確認したい場合は、 https ://github.com/ingenuitas/SimpleCV/blob/installer/install/simplecv-installer.pyで確認できます。

マニフェストファイルを提供するだけのユニバーサルインストーラーになるように、完了したらこのプロジェクトをフォークする予定です。既存のマニフェストは次のとおりです: https ://github.com/ingenuitas/SimpleCV/blob/installer/install/manifest.json

于 2011-11-10T19:30:17.450 に答える
0

問題は、py2app が完全に異なる Python ディストリビューションをパッケージに組み込むことです。ディストリビューションは自己完結型であるため、アプリケーションが実行時に使用する可能性のあるすべてのライブラリ (OpenCV を含む) を含める必要があります。残念ながら、py2app は必要な cv2.so ファイルが dist/helloworld.app/Contents/Resources/lib/python2.7/lib-dynload/ から欠落しているようです ( http://pythonhosted.org/py2app/implementation.htmlを参照)。

OpenCV の実際のインストールは次のようになります。

bash-3.2$ ls -1 /usr/local/lib/python2.7/site-packages/cv*
/usr/local/lib/python2.7/site-packages/cv.py
/usr/local/lib/python2.7/site-packages/cv.pyc
/usr/local/lib/python2.7/site-packages/cv2.so

したがって、理論的には cv2.so を dist/helloworld.app/Contents/Resources/lib/python2.X/lib-dynload/ にコピーすると問題が解決するはずです。

残念ながら、別の問題が発生します。

bash-3.2$ dist/main_wx.app/Contents/MacOS/main_wx 
Segmentation fault: 11

cv2.so には、含める必要のある大量の依存関係があります。

bash-3.2$ otool -L /usr/local/Cellar/opencv/2.4.5/lib/python2.7/site-packages/cv2.so 
/usr/local/Cellar/opencv/2.4.5/lib/python2.7/site-packages/cv2.so:
        /usr/local/lib/python2.7/site-packages/cv2.so (compatibility version 0.0.0, current version 0.0.0)
        /usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_core.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_flann.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_imgproc.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_video.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_ml.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_highgui.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_features2d.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_calib3d.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_photo.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_objdetect.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_contrib.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_legacy.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_gpu.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_ocl.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/local/Cellar/opencv/2.4.5/lib/libopencv_nonfree.2.4.dylib (compatibility version 2.4.0, current version 2.4.5)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
        /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

それらをどのように扱うかはわかりませんが、それらがなければ何も機能しないと感じています. 他の誰かがそれを使用して解決策を見つけることができることを願って、これをここに残します。

于 2013-10-25T09:25:00.560 に答える