【发布时间】:2020-04-30 22:36:29
【问题描述】:
我遇到了一个困扰我好几天的 OpenCV 问题:调用 cv2.VideoCapture() 函数时出现段错误。
启动我的脚本时(使用 GDB):
extract-all_1 | Thread 1 "python3" received signal SIGSEGV, Segmentation fault.
extract-all_1 | 0x00007f83857fe33b in bool pyopencv_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(_object*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, ArgInfo const&) [clone .isra.1286] ()
extract-all_1 | from /usr/lib/python3/dist-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so
extract-all_1 | (gdb) quit
在没有 GDB 的情况下运行我的脚本时,容器以代码 139 退出
我发现调用“cv2.VideoCapture()”函数时出现问题:
def perform_video_extraction(video_path):
input_movie = cv2.VideoCapture(video_path)
nb_total_frames = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))
[...]
提示:
- 我处理 MP4 视频文件
- 我尝试将 >30fps 到 25fps 的视频压缩
- 我已尝试使用 OpenCV 3.4.9、4.1.0、4.1.1、4.1.2、4.2.0 和 4.3.0(pip 安装)
- 我尝试从源代码编译 OpenCV 4.2.0 和 4.3.0
- 我已经使用 CUDA 10.0、10.1 和 10.2 连续尝试了上述每个版本:每种情况的每个版本都会产生相同的错误
- 使用 CPU(非 cuda)版本的 OpenCV 时不会重现此段错误
这是我的 Dockerfile(CUDA 10.2 和 OpenCV 4.2.0 从源代码构建):https://pastebin.com/raw/a42wtcRG
这是cmake 摘要构建返回的内容:https://pastebin.com/raw/SFPUakyL
我的配置:
- Ubuntu 18.04
- 英伟达 Docker (CUDA 10.2, CUDNN 7, Ubuntu 18.04, devel)
- Python 3.6
您对调试此问题有什么建议吗?
谢谢
【问题讨论】:
标签: docker opencv python-3.6 nvidia-docker