python - Solución permanente para videocaptura Opencv
ffmpeg (2)
Esta pregunta se ha planteado numerosas veces en muchos sitios web, pero no es una solución definitiva. Estoy tratando de ejecutar Opencv con un video usando la función:
import cv2
cap = cv2.VideoCapture(''video.mp4'')
if(cap.isOpened()==False):
print "Error opening camera"
Pero falla cada vez. He intentado casi todos los pasos desde varios sitios, pero no pude hacerlo funcionar (incluida la reconstrucción de ffmpeg por separado).
Cualquier ayuda sería muy apreciada.
Mi plataforma es Ubuntu17 y Python3.
Esta respuesta está escrita teniendo en cuenta Linux y Python, pero la idea general se puede aplicar a cualquier sistema operativo y lenguaje compatibles con OpenCV.
La clase
VideoCapture
no abre el archivo de video puede tener muchas causas, pero las tres siguientes se aplican a la mayoría de los casos.
Soporte OpenCV FFMPEG:
Por defecto, OpenCV usa ffmpeg para leer archivos de video. Es posible que OpenCV no se haya creado con soporte FFMPEG. Para saber si OpenCV fue construido con soporte FFMPEG, en la terminal ingrese:
python -c "import cv2; print(cv2.getBuildInformation())" | grep -i ffmpeg
La salida debería ser algo como:
FFMPEG: SI
Si la salida es
No
entonces siga una guía en línea para construir OpenCV desde la fuente con soporte ffmpeg.
Códec FFMPEG:
Es posible que FFMPEG no tenga códec para su archivo específico. Vamos a utilizar este video como ejemplo, para mostrar si FFMPEG tiene capacidad de decodificación para este archivo.
Primero, necesitamos encontrar el formato de codificación utilizado en este archivo de video.
Utilizaremos el programa
mediainfo
.
En la terminal, ingrese:
mediainfo video_file.mp4
En la salida, debajo del encabezado del video , busque el formato . En este caso, la codificación de video utilizada es AVC , que es otro nombre para H264.
Ahora, intentamos encontrar si FFMPEG admite códec para decodificar archivos codificados con AVC . En terminal:
ffmpeg -codecs | grep -i avc
En mi máquina, la salida es:
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 parte 10 (decodificadores: h264 h264_crystalhd h264_vdpau) (codificadores: libx264 libx264rgb)
Estamos interesados en DEV , que significa decodificación, codificación y video. Esto significa que AVC es un formato de codificación de video y FFMPEG admite capacidades de codificación y decodificación para este formato.
Ruta de archivo
Por último, verifique si la ruta del archivo es correcta o incluso si el archivo existe.
Seguí los pasos de Link
y
Este comando Cmake en el enlace anterior es el siguiente que funcionó
=. . $ (python3 -c "de distutils.sysconfig import get_python_inc; print (get_python_inc ())") -DPYTHON3_PACKAGES_PATH = $ (python3 -c "de distutils.sysconfig import get_python_lib; print (get_python_lib ())") -DE CMD -D CMAKE_INSTALL_PREFIX = / usr / local -D INSTALL_PYTHON_EXAMPLES = ON -D INSTALL_C_EXAMPLES = OFF -D PYTHON_EXECUTABLE = / home / user / anaconda3 / bin / python -D BUILD_EXAMPLES = ON -DCMAKE_BUILD_ RELE_BUILD ..
No conozco bien la compilación de OpenCV, pero PYTHON_EXECUTABLE = / home / user / anaconda3 / bin / python path es el punto en el que creo que se actualizan los enlaces de OpenCV para python en particular