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

Posted

技术标签:

【中文标题】ctypes 错误:libdc1394 错误:无法初始化 libdc1394【英文标题】:ctypes error: libdc1394 error: Failed to initialize libdc1394 【发布时间】:2012-09-23 05:57:38 【问题描述】:

我正在尝试将我的程序编译为一个共享库,我可以使用 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

发生了什么事?

【问题讨论】:

【参考方案1】:

libdc1394 是一个用于控制相机硬件的库。我想它来自你链接的opencv。也许内核驱动程序没有加载?我想它失败的原因有很多。

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

对相同错误消息的一些初始搜索产生了具有相同原因的结果 [1, 2]。因此,如果您在文件系统上找不到 /dev/raw1394,请尝试这些。

更新:

这似乎只是一个警告。模块 raw1394 似乎已被弃用,一些 libdc1394 版本可能正在寻找它,而它随着更新而消失。搜索它会给出许多结果和错误报告。但似乎该软件应该运行良好。所以如果你真的不需要它,你可以忽略它。 [3,4]

【讨论】:

我们不需要使用摄像头硬件,有没有办法不用OpenCV的那部分编译? /dev/raw1394 的修复似乎不起作用,我从modprobe 得到FATAL: Module raw1394 not found. 我在没有安装 USB 控制器的虚拟机(来自 Bitnami 的 VMWare Fusion Ubuntu 14.04 Django Stack)下运行时看到了这个问题。在我将 USB 控制器添加到 VM 后,此错误消失了。 与@goran 类似,我看到它运行一个虚拟机——VirtualBox 4.3.28,运行 CoreOS 647.0.0,其中运行带有 Fedora 21 映像的 Docker 1.5.0。在 Fedora 映像中以 >>> import cv2 弹出错误。 @ArthurTacca 我已经编辑了这个答案,以使发现忽略它是安全的更加突出。上一次编辑是在 2012 年,当时这个发现是新鲜的,还不是很确定。【参考方案2】:

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

libdc1394 error: Failed to initialize libdc1394

终于看到goran评论previous answer

所以我在 virtualbox 中启用了 USB 控制器......等等!一切正常!

谢谢戈兰!

【讨论】:

这应该是一个评论,而不是一个额外的答案。 我在回复帖子时没有注册,现在我已经注册但没有足够的声望将这条消息移入cmets,对不起 @jeremie 我正在使用 Virtual Box,并且 ubuntu 14.04 正在其上运行,USB 控制器已启用,但我仍然收到相同的消息 - libdc1394 错误:无法初始化 libdc1394,我正在运行 docker 容器安装openCV的地方【参考方案3】:

非常令人沮丧的是,没有人真正提出具体的解决方案。安装 OpenCV 后我遇到了这个问题。对我来说,删除此警告的最简单解决方案实际上是禁用此驱动程序:

sudo ln /dev/null /dev/raw1394

【讨论】:

这是您正在寻找的答案 - 如果您不使用硬件但使用 CV2! 这个解决方案在 debian 上似乎不是永久性的。重新启动后链接消失了。如何使其永久化? 我想要使其永久化,将ln /dev/null /dev/raw1394 添加到/etc/rc.local 就足够了(就在exit 0 行之前) 像魅力一样工作!在 AWS 上安装 caffe 时遇到了一些问题。你拯救了这一天。 在“alpr”命令行中使用 OpenAlpr 时同样的问题。使用此解决方案的问题消失了;无论如何,这在这个线程上不清楚为什么会发生【参考方案4】:

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

基本上,/dev/raw1394/dev/null 之间的链接不是永久的。你可以 bash 进入你的虚拟机,调用 ln /dev/null /dev/raw1394,但它只会持续到你重新启动你的容器。

我必须做的,这似乎是最简单但不是完美的方法,就是在容器启动期间放置链接。

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

我最终开始工作的方式,(它不漂亮,但有效)是通过更改 Dockerfile 的 CMD

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

【讨论】:

或者,您可以添加 RUN echo 'ln /dev/null /dev/raw1394' >> ~/.bashrc 并保持 CMD 不变【参考方案5】:

对于自己编译opencv并遇到此错误,并且不需要firewire视频捕获支持的人,您可以随时重新编译 -D WITH_1394=OFF 选项,如下所示:

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

如果您关闭此选项,您甚至可以失去 libdc1394-22-dev 依赖项 (ubuntu)。虽然我没有亲自测试过。

【讨论】:

【参考方案6】:

另一个使用 docker 镜像的解决方法是挂载一个卷

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

【讨论】:

这是如何以及为什么起作用的?这能让我使用网络摄像头吗?【参考方案7】:

我遇到了同样的问题。 通过先运行 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:~# 

【讨论】:

以上是关于ctypes 错误:libdc1394 错误:无法初始化 libdc1394的主要内容,如果未能解决你的问题,请参考以下文章

使用 ctypes 时 Dll 函数的名称错误 [重复]

OpenCV在Linux下的配置步骤(简单有效)

pyenv 失败:ModuleNotFoundError: No module named '_ctypes' 错误

WindowsError 异常访问冲突 - 在简单的 python c++ ctypes 接口中

Python ctypes给出分段错误

如何在没有错误消息的情况下调试 ctypes