For my project i need to process frames at high rate, the more the better but at least 60fps are mandatory. Im using opencv 4.1.1 in a Windows 10 machine vía Anaconda in case you need to know the platform. With the code provided im able to get 30 fps whatever is the frame rate or resolution setted.
My camera model is an ELP-USBFHD01M-L21, which is capable of:
- 1920 (H) x 1080 (V) MJPEG 30fps YUY2 6fps
- 1280 (H) x 1024 (V) MJPEG 30fps YUY2 6fps
- 1280 (H) x 720 (V) MJPEG 60fps YUY2 9fps
- 1024 (H) x 768 (V) MJPEG 30fps YUY2 9fps
- 800 (H) x 600 (V) MJPEG 60fps YUY2 21fps
- 640 (H) x 480 (V) MJPEG 120fps YUY2 30fps
- 352(H) x 288 (V) MJPEG 120fps YUY2 30fps
- 320 (H) x 240 (V) MJPEG 120fps YUY2 30fps
All of those frame rates are correctly tested with AMCAP software.
How can i reach the desired frame rate?
Code:
import cv2
import time
import numpy as np
if __name__ == "__main__":
VIDEO_SOURCE = 0
CAMERA_CAPTURE_FPS = 60
CAMERA_CAPTURE_WIDTH = 1280
CAMERA_CAPTURE_HEIGHT = 720
frameCounter = 0
fps = 0
startTime = time.time()
cap = cv2.VideoCapture(VIDEO_SOURCE)
print("Parameters BEFORE assignment: ")
print("WIDTH: " + str(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print("HEIGHT: " + str(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print("FPS: " + str(cap.get(cv2.CAP_PROP_FPS)))
print("FOURCC: " + str(cap.get(cv2.CAP_PROP_FOURCC)))
# Noting seems to change adding or deleting this 2 lines
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
cap.set(cv2.CAP_PROP_FOURCC, fourcc)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, CAMERA_CAPTURE_WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, CAMERA_CAPTURE_HEIGHT)
cap.set(cv2.CAP_PROP_FPS, CAMERA_CAPTURE_FPS)
print()
print("Parameters AFTER assignment: ")
print("WIDTH: " + str(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print("HEIGHT: " + str(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print("FPS: " + str(cap.get(cv2.CAP_PROP_FPS)))
print("FOURCC: " + str(cap.get(cv2.CAP_PROP_FOURCC)))
while True:
ret, frame = cap.read()
cv2.putText(frame, "FPS: " + str(fps), (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 1, cv2.LINE_AA)
frameCounter += 1
if time.time() - startTime >= 1:
fps = frameCounter
frameCounter = 0
startTime = time.time()
cv2.imshow("Camera stream", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
cap.release()
from Not able to reach 60fps in opencv with a supported camera
No comments:
Post a Comment