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的主要内容,如果未能解决你的问题,请参考以下文章
pyenv 失败:ModuleNotFoundError: No module named '_ctypes' 错误