我正在尝试使用OpenCV 3.2(来自menpo conda channel)读取.mov文件的帧。我在Ubuntu 16.04 64位设置上使用Python 3.5.3通过Anaconda。
问题是,当我遇到src/sql/sql.ts has no exported member "Sql"
调用时,我从OpenCV收到以下错误消息,并且循环立即中断并捕获cap.read()
条件。
以下是我正在运行的全部代码:
if num == 0
import cv2
import numpy as np
import sys
f = sys.argv[1]
cap = cv2.VideoCapture(f)
frames = []
num = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret: break
gframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frames.append(gframe)
num += 1
if num % 100 == 0:
frames.append(gframe)
if num % 1000 == 0:
print(num)
if num == 0:
print("Something went wrong: no frames found.")
exit(0)
cap.release()
我在这个主题上发现了其他一些StackOverflow问题,但它们并没有完全转化为我的确切情况:
至于第三点 - 这里有很多其他问题都有引用user@ubuntu:/data$ python read.py movie.mov
Unable to stop the stream: Inappropriate ioctl for device
Something went wrong: no frames found.
user@ubuntu:/data$
,但很难看出它们中是否有任何与这个问题直接相关。
作为一个局部的一边:我已经在我的macOS机器上安装了这个完全相同的opencv3 conda包,我在这里粘贴的代码工作得很好,并且在我尝试过的Ubuntu机器上完全相同的.mov文件
有什么想法吗?
答案 0 :(得分:3)
通过彻底解决问题来解决问题。
使用OpenCV的opencv-feedstock配方进行conda-forge。在recipe
文件夹中是conda的构建信息。我修改了build.sh
文件,更改了以下选项:
-DBUILD_PNG=1
-DBUILD_JPEG=1
-DWITH_CUDA=1
-DWITH_FFMPEG=1
从父目录运行conda build --numpy 1.12 recipe
(必须指定NumPy版本,因为构建脚本要求列出numpy x.x
,这意味着您必须在运行时提供版本),并等待。
永远 (严肃地说,在非常强大的机器上花费几个小时 - 时间接收器是CUDA),但构建最终成功完成。
然后只需要安装本地构建的bz2存档(conda install --use-local opencv
)。没有更奇怪的ioctl错误消息,上面的脚本运行得很好。
答案 1 :(得分:-1)
我遇到了与Anaconda私人环境相同的问题。 Ubuntu 16.04上的Python 3.5。
最初使用
安装Opencv3conda install -c menpo opencv3
解决方案:
删除Opencv3 conda remove opencv3
使用pip install opencv-contrib-python
如果问题仍然存在:
sudo apt-get install ffmpeg
sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev