-
-
Save keithweaver/70df4922fec74ea87405b83840b45d57 to your computer and use it in GitHub Desktop.
''' | |
Using OpenCV takes a mp4 video and produces a number of images. | |
Requirements | |
---- | |
You require OpenCV 3.2 to be installed. | |
Run | |
---- | |
Open the main.py and edit the path to the video. Then run: | |
$ python main.py | |
Which will produce a folder called data with the images. There will be 2000+ images for example.mp4. | |
''' | |
import cv2 | |
import numpy as np | |
import os | |
# Playing video from file: | |
cap = cv2.VideoCapture('example.mp4') | |
try: | |
if not os.path.exists('data'): | |
os.makedirs('data') | |
except OSError: | |
print ('Error: Creating directory of data') | |
currentFrame = 0 | |
while(True): | |
# Capture frame-by-frame | |
ret, frame = cap.read() | |
# Saves image of the current frame in jpg file | |
name = './data/frame' + str(currentFrame) + '.jpg' | |
print ('Creating...' + name) | |
cv2.imwrite(name, frame) | |
# To stop duplicate images | |
currentFrame += 1 | |
# When everything done, release the capture | |
cap.release() | |
cv2.destroyAllWindows() |
I am trying same code in Pycharm-django project but I am getting following stream of errors. I am new at it so I don't know how to fix this.
Errors :
Traceback (most recent call last):
File "C:\Users\Dell\Desktop\pp\test2\venv\lib\site-packages\numpy_init_.py", line 142, in
from . import core
File "C:\Users\Dell\Desktop\pp\test2\venv\lib\site-packages\numpy\core_init_.py", line 24, in
from . import multiarray
File "C:\Users\Dell\Desktop\pp\test2\venv\lib\site-packages\numpy\core\multiarray.py", line 14, in
from . import overrides
File "C:\Users\Dell\Desktop\pp\test2\venv\lib\site-packages\numpy\core\overrides.py", line 16, in
add_docstring(
RuntimeError: implement_array_function method already has a docstring
Traceback (most recent call last):
File "C:/Users/Dell/Desktop/pp/test2/templates/ex.py", line 1, in
import cv2
File "C:\Users\Dell\Desktop\pp\test2\venv\lib\site-packages\cv2_init_.py", line 5, in
from .cv2 import *
ImportError: numpy.core.multiarray failed to import
Does anyone know how to fix this ?
I need break the movie at 15 frames per second. I tried the following code but it does not work. Instead it is breaking with 25 frames per second
FramesPerSecond = 15
captureTheVideo = cv2.VideoCapture('a.mp4')
captureTheVideo.set(cv2.CV_CAP_PROP_FPS, FramesPerSecond)
what algorithm to use to select best frame?
nice, not working
In case anyone wants to skip frames / and use youtube clips
import cv2
import numpy as np
import os
from cap_from_youtube import cap_from_youtube
# Playing video from file:
youtube_url = 'https://www.youtube.com/watch?v=6j1Oj5N7kwE'
cap = cap_from_youtube(youtube_url, 'best')
try:
if not os.path.exists('data'):
os.makedirs('data')
except OSError:
print ('Error: Creating directory of data')
fps = 25
seconds_to_skip = 30
# fps * seconds_to_skip
# start frame is
currentFrame = 8500
# if you want a start frame use this, otherwise set currentFrame to 0 and comment line below
cap.set(cv2.CAP_PROP_POS_FRAMES, currentFrame)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
if ret:
print ('Creating frame...' + str(currentFrame))
cv2.imwrite('./data/frame{:d}.jpg'.format(currentFrame), frame)
currentFrame += (fps * seconds_to_skip) # i.e. at 30 fps, this advances one second
cap.set(cv2.CAP_PROP_POS_FRAMES, currentFrame)
else:
cap.release()
break
# When everything done, release the capture
cv2.destroyAllWindows()
How would one snapshot photos from the video frames so that these snapshots are save every minute up until 24 hours?