Mostraremos el FPS de procesamiento en tiempo real del archivo de video o la cámara web según nuestra elección.
FPS o fotogramas por segundo o velocidad de fotogramas se puede definir como el número de fotogramas mostrados por segundo. Se puede asumir que un video es una colección de imágenes o podemos decir fotogramas que se muestran a cierta velocidad para producir movimiento. si desea identificar el objeto en el video, 15 fps pueden ser suficientes, pero si desea identificar el número de automóvil que se mueve a una velocidad de 40 km / h. en la carretera, necesitaría al menos 30 fps para una identificación sin problemas. Por tanto, será bueno que sepamos calcular FPS en nuestros proyectos de Visión por Computador.
Pasos para calcular FPS en vivo:
- El primer paso será crear un objeto VideoCapture usando cv2.VideoCapture(). Podemos leer videos desde la cámara web o un archivo de video según nuestra elección.
- Ahora procesaremos el metraje capturado cuadro por cuadro hasta que capture.read() sea verdadero (aquí capture representa un objeto y esta función, además con el cuadro, también devuelve bool y proporciona la información de si el cuadro se ha leído correctamente o no).
- Para calcular FPS, mantendremos el registro de la hora en que se procesó el último cuadro y la hora de finalización cuando se procesó el cuadro actual. Por lo tanto, el tiempo de procesamiento para un cuadro será la diferencia de tiempo entre el tiempo actual y el tiempo del cuadro anterior.
Processing time for this frame = Current time – time when previous frame processed
Entonces, los fps en el momento actual serán:
FPS = 1/ (Processing time for this frame)
- Dado que FPS siempre será Integer, convertiremos FPS a entero y luego lo encasillaremos en string porque será fácil y más rápido mostrar la string usando cv2.putText() en el marco. Ahora, con la ayuda del método cv2.putText() , estaremos imprimiendo el FPS en este marco y luego mostraremos este marco con la ayuda de la función cv2.imshow() .
Código: implementación de código Python del enfoque mencionado anteriormente
Python3
import numpy as np import cv2 import time # creating the videocapture object # and reading from the input file # Change it to 0 if reading from webcam cap = cv2.VideoCapture('vid.mp4') # used to record the time when we processed last frame prev_frame_time = 0 # used to record the time at which we processed current frame new_frame_time = 0 # Reading the video file until finished while(cap.isOpened()): # Capture frame-by-frame ret, frame = cap.read() # if video finished or no Video Input if not ret: break # Our operations on the frame come here gray = frame # resizing the frame size according to our need gray = cv2.resize(gray, (500, 300)) # font which we will be using to display FPS font = cv2.FONT_HERSHEY_SIMPLEX # time when we finish processing for this frame new_frame_time = time.time() # Calculating the fps # fps will be number of frame processed in given time frame # since their will be most of time error of 0.001 second # we will be subtracting it to get more accurate result fps = 1/(new_frame_time-prev_frame_time) prev_frame_time = new_frame_time # converting the fps into integer fps = int(fps) # converting the fps to string so that we can display it on frame # by using putText function fps = str(fps) # putting the FPS count on the frame cv2.putText(gray, fps, (7, 70), font, 3, (100, 255, 0), 3, cv2.LINE_AA) # displaying the frame with fps cv2.imshow('frame', gray) # press 'Q' if you want to exit if cv2.waitKey(1) & 0xFF == ord('q'): break # When everything done, release the capture cap.release() # Destroy the all windows now cv2.destroyAllWindows()
Salida: archivo de video que muestra FPS en vivo en color verde.
Publicación traducida automáticamente
Artículo escrito por AyushMalik y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA