im trying to save a video i get from a facetime camera on mac, i manage to show the video and flip it, but when i try to save it i get no file at all, and it wont show me any error, it did use to show me an error CAP_IMAGES: can't find starting number (in the name of file): that it was a codec error related, i installed ffmpeg as sugested on other post and i did set the codec to mp4v, still i cant write the file, i do want to write it to a file and then broadcast via web (security camera)
any idea what might be wrong? i paste my code below, thanks
here is the code im using
import cv2
import numpy as np
#import PyQt5
#from matplotlib import pyplot as pl
#hog = cv2.HOGDescriptor()
#hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
#cv2.startWindowThread()
def inc_brig(cuadro, value):
hsv = cv2.cvtColor(cuadro, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)
lim = 255 - value
v[v > lim ] = 255
v[v <= lim] = value
#cv2.add(hsv[:,:,2], value, hsv[:,:,2])
final_hsv = cv2.merge((h,s,v))
cuadro = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
return cuadro
i = 0
for i in range(4):
cap = cv2.VideoCapture(i) # start the camera
if not cap:
pass
else:
print('found at ' str(i))
break
#check if the camera has been initialized
if cap.isOpened():
pass
else:
cap.open()
videocodec = cv2.VideoWriter_fourcc(*'mp4v')
salida = cv2.VideoWriter('prueba_video.mp4', videocodec, 24.0, (int(cap.get(3)), int(cap.get(4)) ) )#(int(cap.get(3)), int((cap.get(4)))))
while(cap.isOpened()):
ret, frame = cap.read()
if frame is None:
print ('no frame')
else:
if ret == True:
frame = cv2.flip(frame, 1)
frame = inc_brig(frame, 40)
#detect people
# boxes, weight = hog.detectMultiScale(frame, winStride=(8,8))
#return coordinates for people boxes
# boxes = np.array( [[x, y, x w, y h] for (x, y, w, h) in boxes ])
# for (xA, yA, xB, yB) in boxes:
#display boxes in color picture
# cv2.rectangle(frame, (xA, yA), (xB, yB), (255,0,0), 2)
#frame = cv2.line(frame,(200,20),(511,511),(220,0,0),5) # draw lines
#fuente = cv2.FONT_HERSHEY_COMPLEX
#cv2.putText(frame,'Prueba motherfucker', (300,90), fuente, 1, (255,255,255), 2, cv2.LINE_AA)
#frame = cv2.rectangle(frame, (300,100), (800,600), (200,0,0), 3)
salida.write(frame) #write to file
cv2.imshow('Camara opencv', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
salida.release()
cv2.destroyAllWindows()
# show image using matplot
# imagen = cv2.imread('Test_Xv.jpg',0)
# pl.imshow(imagen, cmap='gray', interpolation='bicubic')
# pl.xticks([]), pl.yticks([])
# pl.show()
# show image using standart opencv window
# cv2.imshow('image',imagen)
# k = cv2.waitKey(0) & 0xFF
# if k == 27:
# cv2.destroyAllWindows()
# else:
# cv2.imwrite('Test_Gray.jpg', imagen)
# cv2.destroyAllWindows()
Edit1: i did follow Christof advice and be more especific when opening the device, still i get the same behaivior i would try also using a debugger and see where the problem is, below is my new code
#check if the camera has been initialized
i = 0
for i in range(4):
cap = cv2.VideoCapture(i) # start the camera
if cap.isOpened():
print('found at ' str(i))
break
if cap.isOpened() == False:
cap.open()
print('opening camera ' str(i))
break
Edit2: simplyfied the code and set only first device i only get 0 anyway, heres my code using if not cap.isOpened()
cap = cv2.VideoCapture(0) # start the camera
videocodec = cv2.VideoWriter_fourcc(*'MP4V')
salida = cv2.VideoWriter('prueba_video.mp4', videocodec, 24.0, (int(cap.get(3)), int(cap.get(4)) ) )#(int(cap.get(3)), int((cap.get(4)))))
if not cap.isOpened():
print('not open')
else:
while(cap.isOpened()):
ret, frame = cap.read()
if frame is None:
print ('no frame')
else:
if ret == True:
frame = cv2.flip(frame, 1)
frame = inc_brig(frame, 30)
salida.write(frame) #write to file
cv2.imshow('Camara opencv', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
salida.release()
cv2.destroyAllWindows()
Edit3: posting the general config for opencv on my machine, i did installed using pip command from terminal but before that i updated homebrew, for some reason homebrew erased all previuos stuff i had installed via pip so i had to reinstall opencv, wheels and all other stuff, im posting my modules as well
General configuration for OpenCV 4.6.0 =====================================
Version control: unknown
Platform:
Timestamp: 2022-08-16T23:32:48Z
Host: Darwin 17.7.0 x86_64
CMake: 3.24.0
CMake generator: Ninja
CMake build tool: /usr/local/bin/ninja
Configuration: Release
CPU/HW features:
Baseline: SSE SSE2 SSE3 SSSE3 SSE4_1
requested: DETECT
Dispatched code generation: SSE4_2 FP16 AVX AVX2 AVX512_SKX
requested: SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
SSE4_2 (1 files): POPCNT SSE4_2
FP16 (0 files): POPCNT SSE4_2 FP16 AVX
AVX (4 files): POPCNT SSE4_2 AVX
AVX2 (31 files): POPCNT SSE4_2 FP16 FMA3 AVX AVX2
AVX512_SKX (5 files): POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX
C/C :
Built as dynamic libs?: NO
C standard: 11
C Compiler: /Library/Developer/CommandLineTools/usr/bin/c (ver 10.0.0.10001044)
C flags (Release): -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wno-delete-non-virtual-dtor -Wno-unnamed-type-template-args -Wno-comment -fdiagnostics-show-option -Wno-long-long -Qunused-arguments -Wno-semicolon-before-method-body -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG
C flags (Debug): -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wno-delete-non-virtual-dtor -Wno-unnamed-type-template-args -Wno-comment -fdiagnostics-show-option -Wno-long-long -Qunused-arguments -Wno-semicolon-before-method-body -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG
C Compiler: /Library/Developer/CommandLineTools/usr/bin/cc
C flags (Release): -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wno-delete-non-virtual-dtor -Wno-unnamed-type-template-args -Wno-comment -fdiagnostics-show-option -Wno-long-long -Qunused-arguments -Wno-semicolon-before-method-body -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG
C flags (Debug): -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wno-delete-non-virtual-dtor -Wno-unnamed-type-template-args -Wno-comment -fdiagnostics-show-option -Wno-long-long -Qunused-arguments -Wno-semicolon-before-method-body -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG
Linker flags (Release): -Wl,-dead_strip
Linker flags (Debug): -Wl,-dead_strip
ccache: NO
Precompiled headers: NO
Extra dependencies: -framework OpenCL /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Accelerate.framework -lm -ldl -framework Cocoa -framework AppKit
3rdparty dependencies: libprotobuf ade ittnotify libjpeg-turbo libwebp libpng libtiff libopenjp2 IlmImf zlib quirc ippiw ippicv
OpenCV modules:
To be built: calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching video videoio
Disabled: world
Disabled by dependency: -
Unavailable: java python2 ts
Applications: -
Documentation: NO
Non-free algorithms: NO
GUI: COCOA
Cocoa: YES
VTK support: NO
Media I/O:
ZLib: build (ver 1.2.12)
JPEG: build-libjpeg-turbo (ver 2.1.2-62)
WEBP: build (ver encoder: 0x020f)
PNG: build (ver 1.6.37)
TIFF: build (ver 42 - 4.2.0)
JPEG 2000: build (ver 2.4.0)
OpenEXR: build (ver 2.3.0)
HDR: YES
SUNRASTER: YES
PXM: YES
PFM: YES
Video I/O:
DC1394: NO
FFMPEG: NO
avcodec: NO
avformat: NO
avutil: NO
swscale: NO
avresample: NO
GStreamer: NO
AVFoundation: YES
Parallel framework: GCD
Trace: YES (with Intel ITT)
Other third-party libraries:
Intel IPP: 2020.0.0 Gold [2020.0.0]
at: /private/var/folders/l9/04v9rl9d67q6pyg1n0jyjj9r0000gn/T/pip-install-mkqzz7zw/opencv-python_36a66675c7174c558792570d56da2f92/_skbuild/macosx-10.13-x86_64-3.10/cmake-build/3rdparty/ippicv/ippicv_mac/icv
Intel IPP IW: sources (2020.0.0)
at: /private/var/folders/l9/04v9rl9d67q6pyg1n0jyjj9r0000gn/T/pip-install-mkqzz7zw/opencv-python_36a66675c7174c558792570d56da2f92/_skbuild/macosx-10.13-x86_64-3.10/cmake-build/3rdparty/ippicv/ippicv_mac/iw
Lapack: YES (/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Accelerate.framework -lm -ldl)
Eigen: YES (ver 3.4.0)
Custom HAL: NO
Protobuf: build (3.19.1)
OpenCL: YES (no extra features)
Include path: NO
Link libraries: -framework OpenCL
Python 3:
Interpreter: /usr/local/Cellar/[email protected]/3.10.6_1/bin/python3.10 (ver 3.10.6)
Libraries: /usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib (ver 3.10.6)
numpy: /usr/local/Cellar/[email protected]/3.10.6_1/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/numpy/core/include (ver 1.23.2)
install path: python/cv2/python-3
Python (for build): /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Java:
ant: NO
JNI: /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/include /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/include/darwin /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/include
Java wrappers: NO
Java tests: NO
Install to: /private/var/folders/l9/04v9rl9d67q6pyg1n0jyjj9r0000gn/T/pip-install-mkqzz7zw/opencv-python_36a66675c7174c558792570d56da2f92/_skbuild/macosx-10.13-x86_64-3.10/cmake-install
-----------------------------------------------------------------
this are the modules installed by python via terminal
Package Version
--------------- --------
cmake 3.24.0
cycler 0.11.0
Cython 0.29.32
distro 1.7.0
ffmpeg 1.4
ffmpeg-python 0.2.0
fonttools 4.35.0
future 0.18.2
kiwisolver 1.4.4
matplotlib 3.5.3
numpy 1.23.2
opencv-python 4.6.0.66
packaging 21.3
Pillow 9.2.0
pip 22.2.2
protobuf 4.21.5
pyparsing 3.0.9
python-dateutil 2.8.2
scikit-build 0.15.0
setuptools 63.4.3
six 1.16.0
TBB 0.2
wheel 0.37.1
CodePudding user response:
Instantiation of a VideoWriter
appears to have failed. You say salida.isOpened()
returns False
.
VideoWriter
usually requires that OpenCV was built with support for ffmpeg. Other backends, such as AVFoundation, commonly are only used to access video cameras.
Since your OpenCV was built without support for ffmpeg, your only option is to use the .avi
video container format and the MJPG
codec/fourcc. Those two are built into OpenCV and always available.
If you haven't already got OpenCV for Python from PyPI, via the opencv-python
package (or one of its variants), then you should try that. It's the official OpenCV package for Python.
If you are willing to build OpenCV yourself, you can enable and disable features, and third-party dependencies, in the CMake configuration stage.