Lors de l'utilisation de mp4 avec OpenCV, il y avait un phénomène selon lequel il était lent de spécifier la position du cadre avec set et read. Puisqu'il a fallu trop de temps pour acquérir la vidéo à intervalles réguliers (toutes les 0,5 seconde), les contre-mesures sont décrites ci-dessous. (Si vous avez d'autres meilleurs moyens, veuillez me le faire savoir dans les commentaires.)
・ Ceux qui utilisent des données vidéo à des intervalles supérieurs à une image. (Seule la lecture est appropriée pour chaque image)
Utilisez grab pour sauter les images inutiles et lire pour obtenir les images requises.
Il a été possible de gagner 36% du temps.
conditions | temps de traitement(Secondes) |
---|---|
set + read | 10.131 |
grab + read | 6.491 |
Objectif de vérification: Luis Fonsi - Despacito ft. Daddy Yankee 720p 30fps Durée de la vidéo 4 minutes 41 secondes
Lors de l'utilisation d'OpenCV :: VideoCapture pour capturer des images toutes les secondes
Mesurez le temps de traitement de 2 modèles.
Environnement de vérification Windows10 64bit Python 3.6.9 OpenCV 4.1.1 numpy 1.16.5
1. set + read Résultat 10,131 secondes
set+read
import cv2
movie_path = "./movie/Luis Fonsi - Despacito ft. Daddy Yankee.mp4"
video = cv2.VideoCapture(movie_path)
#Obtenez le nombre d'images
frame_count = int(video.get(7))
#fréquence d'images(L'unité de temps d'une image est la milliseconde)Avoir
frame_rate = int(video.get(5))
#Toutes les n secondes
n = 1
#Nombre total d'images acquises
frame_all = int((frame_count / frame_rate) / n)
for i in range(frame_all): #Tourner par le nombre total d'images acquises
frame_set = frame_rate * n * i
if frame_set > frame_count:
break
video.set(1, frame_set)
ret, work_frame = video.read()
if ret is False:
break
#Voici le traitement de la trame
video.release()
set+lire le résultat
569 function calls in 10.131 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
281 8.791 0.031 8.791 0.031 {method 'set' of 'cv2.VideoCapture' objects}
281 1.248 0.004 1.248 0.004 {method 'read' of 'cv2.VideoCapture' objects}
1 0.087 0.087 10.131 10.131 time_check.py:4(test)
1 0.006 0.006 0.006 0.006 {method 'release' of 'cv2.VideoCapture' objects}
1 0.000 0.000 10.131 10.131 <string>:1(<module>)
1 0.000 0.000 10.131 10.131 {built-in method builtins.exec}
2 0.000 0.000 0.000 0.000 {method 'get' of 'cv2.VideoCapture' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
2. grab + read
Résultat 6,491 secondes
grab+read
import cv2
movie_path = "./movie/Luis Fonsi - Despacito ft. Daddy Yankee.mp4"
video = cv2.VideoCapture(movie_path)
#Obtenez le nombre d'images
frame_count = int(video.get(7))
#fréquence d'images(L'unité de temps d'une image est la milliseconde)Avoir
frame_rate = int(video.get(5))
#Toutes les n secondes
n = 1
#Lire le réglage de l'intervalle
read_interval = int((frame_rate * n) - 1)
for i in range(frame_count): #Tournez pendant quelques images
ret = video.grab()
if ret is False:
break
if i % read_interval is 0:
ret, work_frame = video.read()
if ret is False:
break
#Voici le traitement de la trame
video.release()
grab+lire le résultat
8437 function calls in 6.491 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
8149 5.154 0.001 5.154 0.001 {method 'grab' of 'cv2.VideoCapture' objects}
281 1.232 0.004 1.232 0.004 {method 'read' of 'cv2.VideoCapture' objects}
1 0.098 0.098 6.490 6.490 time_check_set.py:4(test)
1 0.006 0.006 0.006 0.006 {method 'release' of 'cv2.VideoCapture' objects}
1 0.000 0.000 6.490 6.490 <string>:1(<module>)
1 0.000 0.000 6.491 6.491 {built-in method builtins.exec}
2 0.000 0.000 0.000 0.000 {method 'get' of 'cv2.VideoCapture' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Merci d'avoir regardé jusqu'à la fin. Ce processus est d'environ 3 secondes plus court que la vidéo de 4 minutes, donc je ne pense pas qu'il soit trop gros.
・ Analyser de longues vidéos ・ Scène où les spécifications telles que le serveur de location sont limitées
Ensuite, il semble que cela puisse être plus efficace.
Recommended Posts