ctypes错误:libdc1394错误:无法初始化libdc1394


69

我正在尝试将程序编译为一个共享库,可以在使用ctypes的Python代码中使用该共享库。

使用以下命令,库可以正常编译:

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

这是怎么回事?

Answers:


184

非常令人沮丧的是,没有人真正显示出具体的解决方案。安装OpenCV后出现此问题。对我来说,删除此警告最简单的方法是禁用此驱动程序:

sudo ln /dev/null /dev/raw1394

1
太棒了,您救了我一天!
Dmytriy Voloshyn

1
这就是您要寻找的答案-如果您不使用硬件但使用CV2!
2015年

3
这种解决方案在debian上似乎不是永久的。重新启动后,链接消失了。如何使其永久化?
基督教徒

3
我想,使其永久它应该足以补充ln /dev/null /dev/raw1394/etc/rc.local(之前exit 0线)
lucaferrario

1
奇迹般有效!遇到在AWS上安装caffe的麻烦。您保存了这一天。
Yonatan Simson

31

libdc1394是用于控制相机硬件的库。我猜想它是您链接的opencv。也许内核驱动程序没有加载?我想它可能会失败的原因有很多。

也许有些OpenCV专家可以回答得更好。但我敢打赌,问题出在OpenCV lib方面。

对于相同的错误消息一些初始搜索产生了具有同样的理由[结果12 ]。因此,如果/dev/raw1394在文件系统上找不到,请尝试使用那些。

更新:

看来这只是一个警告。该模块raw1394似乎已被弃用,并且某些libdc1394版本可能会在寻找它的同时随着更新消失。搜索它会给出许多结果和错误报告。但似乎该软件应该运行良好。因此,如果您真的不需要它,可以忽略它。[ 34 ]


1
我们不需要使用摄像头硬件,如果没有OpenCV的那一部分,也许有一种编译方法吗?
弗雷德里(Fredley),2012年

该修复程序/dev/raw1394似乎无效,我FATAL: Module raw1394 not found.来自modprobe
fredley

4
在未安装USB控制器的虚拟机(来自Bitnami的VMWare Fusion Ubuntu 14.04 Django Stack)下运行时,我看到了此问题。将USB控制器添加到VM后,该错误消失了。
goran 2014年

与@goran相似,我看到它运行一个VM-VirtualBox 4.3.28,运行CoreOS 647.0.0,其中运行带有Fedora 21映像的Docker 1.5.0。错误>>> import cv2在Fedora映像中弹出。
kdbanman 2015年

1
@ArthurTacca我已经编辑了此答案,以使发现可以忽略的安全性更加突出。上次编辑是从2012年开始的,当时这个发现是新鲜的,而且不确定。
luk32

9

好的。我花了一整天的时间。

基本上,之间的联系/dev/raw1394/dev/null是不是永久性的。您可以bash到您的VM中,调用ln /dev/null /dev/raw1394,但是它只会持续到重新启动容器。

我要做的似乎是最简单但不是完美的方法,是在Container启动期间放置链接。

我曾想将其作为服务来运行,但对于简单的工作来说似乎太多了。

我终于开始工作的方式(虽然不漂亮,但是有效)是通过更改CMDDockerfile的:

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


或者,您可以添加RUN echo 'ln /dev/null /dev/raw1394' >> ~/.bashrc并保持CMD不变
Paglian

6

在VirtualBox下运行Ubuntu精确度时,我遇到了类似的问题。首先,我按照以下说明安装了OpenCV:https : //help.ubuntu.com/community/OpenCV这修复了我尝试其他方法的几个问题,但libdc1394的问题仍然存在。

libdc1394 error: Failed to initialize libdc1394

我终于看到goran之前的回答发表评论

因此,我在virtualbox中启用了USB控制器。...瞧!一切正常!

谢谢goran!


3
这应该是评论,而不是其他答案。
paisanco 2014年

1
回答帖子时,我尚未注册,现在我已经注册,但没有足够的声誉将此消息添加到评论中,对不起
jeremie 2014年

@jeremie我正在使用Virtual Box,并在其上运行ubuntu 14.04,启用了USB contoller,但仍然收到相同的消息-libdc1394错误:无法初始化libdc1394,我正在运行安装了openCV的docker容器
kkk

4

对于编译自己的opencv并遇到此错误并且不需要火线视频捕获支持的人们,您始终可以使用以下-D WITH_1394=OFF选项进行重新编译 :

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

如果关闭此选项,您甚至可以释放libdc1394-22-dev依赖关系(ubuntu)。尽管我还没有亲自测试过。


3

使用Docker映像的另一个解决方法是挂载卷

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


这如何以及为什么起作用?这将使我能够使用网络摄像头吗?
罗希特·申德

0

我有同样的问题。通过先运行tsu然后运行debian来解决。

问题:

./start-debian.sh
root@localhost:~# python3 -c "import cv2; print(cv2.__version__)"
libdc1394 error: Failed to create juju: opendir: Permission denied
libdc1394 error: Failed to initialize libdc1394
3.2.0
root@localhost:~#

tsu
./start-debian.sh
root@localhost:~# python3 -c "import cv2; print(cv2.__version__)"
3.2.0
root@localhost:~# 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.