Python: muestra FPS en tiempo real en el que se procesa el archivo de cámara web/video usando OpenCV

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *