web-dev-qa-db-ja.com

ctypesエラー:libdc1394エラー:libdc1394の初期化に失敗しました

Python ctypesを使用したコード内から使用できる共有ライブラリにプログラムをコンパイルしようとしています。

ライブラリは、次のコマンドを使用して正常にコンパイルします。

g++ -shared -Wl,-soname,mylib -O3 -o mylib.so -fPIC [files] `pkg-config --libs --cflags opencv`

ただし、ctypesを使用してインポートしようとすると

from ctypes import *
mylib = CDLL("/path/to/mylib.so")
print mylib.test() // Expected output: Hello World

次のエラーが表示されます。

libdc1394 error: Failed to initialize libdc1394

どうしたの?

67
fredley

誰も実際に具体的な解決策を示していないことに非常にイライラします。 OpenCVのインストール後にこの問題が発生しました。私にとって、この警告を削除する最も簡単な解決策は、実際にこのドライバーを無効にすることでした:

Sudo ln /dev/null /dev/raw1394
181
Vad

libdc1394は、カメラハードウェアを制御するためのライブラリです。リンクしたopencvが来ると思います。たぶん、カーネルドライバーが読み込まれないのでしょうか。失敗する理由はいくつかあると思います。

おそらく、OpenCVの専門家の方がより良い回答をすることができます。しかし、問題はOpenCV lib側にあると確信しています。

同じエラーメッセージの最初の検索で、同じ理由[ 12 ]の結果が得られました。ファイルシステムで/dev/raw1394が見つからない場合は、それらを試してください。

更新:

これは警告にすぎないようです。モジュールraw1394は非推奨になっているようで、一部のlibdc1394バージョンはアップデートで消えたときにそれを探しているかもしれません。それを検索すると、多くの結果とバグレポートが得られます。しかし、ソフトウェアは正常に動作するはずです。したがって、本当に必要ない場合は無視してください。 [、 4 ]

30
luk32

はい。私はそれに一日中過ごしました。

基本的に、/dev/raw1394/dev/nullの間のリンクは永続的ではありません。 VMにbashしてln /dev/null /dev/raw1394を呼び出すことができますが、コンテナーを再起動するまで持続します。

私がしなければならなかったのは、最も単純ではあるが完璧なアプローチではないように思えましたが、コンテナの起動時にリンクを配置することです。

私はそれをサービスとして実行することを考えましたが、単純な仕事には多すぎるように思われました。

私がようやく機能するようになったのは(きれいではありませんが機能します)、DockerfileのCMDを変更することです。

CMD sh -c 'ln -s /dev/null /dev/raw1394'; <your-script-here>

8
Ivan Seidel

VirtualBoxの下でUbuntuを正確に実行すると、同様の問題が発生しました。まず、次の手順に従ってOpenCVをインストールしました: https://help.ubuntu.com/community/OpenCV これにより、他の方法を試していたいくつかの問題が修正されましたが、libdc1394の問題はまだありました。

libdc1394 error: Failed to initialize libdc1394

最後に、 goran のコメント の前の回答 を見ました

それで、virtualboxでUSBコントローラーを有効にしました。すべてが完璧に機能します!

ゴランありがとう!

6
jeremie

独自のopencvをコンパイルしてこのエラーが発生し、firewireビデオキャプチャサポートが必要ない場合は、次のように-D WITH_1394=OFFオプションを使用していつでも再コンパイルできます。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_1394=OFF ./

このオプションをオフにすると、libdc1394-22-dev依存関係(ubuntu)を失うことさえできます。私はこれを個人的にテストしていませんが。

4
Ying-Chi I

Dockerイメージを使用する別の回避策は、ボリュームをマウントすることです

docker run -v /dev/null:/dev/raw1394

3
Syi