Я неожиданно получаю очень низкий FPS (~ 16 к / с) при захвате с внутренней веб-камеры (1280x720 @ 30 к / с) недавнего Dell XPS 9560.
Это тривиальный код, который я использую (python3, OpenCV 3.4.0)
import cv2, time
cam = cv2.VideoCapture(0)
n_frames = 0
execution_time = 0
while True:
t_start = time.time()
rv, frame = cam.read()
n_frames+=1
if rv:
#also tried to comment imshow. Same FPS.
cv2.imshow('window', frame)
if cv2.waitKey(1) >= 0:
break
pass
else:
print('Cannot read Frame')
t_end = time.time()
execution_time += (t_end-t_start)*1000
if execution_time > 10000:
print ('avg FPS in 10 seconds: %.2f' % (n_frames*1000/execution_time))
n_frames = 0
execution_time = 0
Я пытался написать ту же самую простую программу на C ++ и получил тот же результат, тот же ~ 16 FPS.
Иногда и C ++, иПрограмма Python может генерировать более высокий FPS за более короткое время.
Наблюдая за использованием процессора с помощью i7z, я мог видеть, что все 4 ядра работают на очень низкой частоте, близкой к минимальной, в большинстве случаев со случайными скачками, которые, казалось, не сильно влияют насредний FPS.
Затем я перенес точно такой же код на Jetson TX1.Для тех, кто этого не знает, это система на чипе, основанная на ARM, на которой установлена выделенная Ubuntu 16.10.Он подключен к камере USB 2.0, 1920x1080 при 25 к / с.
Нет необходимости говорить, что я получил ровно 25 FPS, как и ожидалось.
Кто-нибудь может объяснить это поведение?Это связано с различиями на уровне операционной системы?
Как получить полный FPS в любом случае?
Спасибо за помощь
РЕДАКТИРОВАТЬ: после VTT комментарий, я подключил одну и ту же внешнюю (предположительно 30 к / с) USB-камеру к обеим системам, и я получил 15 FPS на обеих.Это указывает на дерьмовые камеры / USB-автобус.Мне нужно будет разобрать внутреннюю камеру устройства jetson и подключить его к ноутбуку, чтобы еще раз проверить, связано ли это с камерой.