После многих попыток оказывается, что виновником (в MS Windows 10/11) является просто фокусировка окна, когда фокусируется окно, отображающее записи с помощью cv2 imshow() (тот, к которому прикреплена клавиша ожидания), веб-камеры занимают 0,01-0,03 секунд, чтобы получить новый кадр с помощью cap.read(), однако, когда окно не сфокусировано, время доходит до 0,07-0,11 секунды, а fps падает до 10.
Вы можете увидеть видео такого поведения здесь:
Упрощенный код выглядел так:
Код: Выделить всё
while True:
camlog.debug("camera loop start %d, %s" % (framecount, str(datetime.now())))
stream_ok, frame = webcam.read()
if pipeargs.source2 is not None:
stream_ok2, frame2 = webcam2.read()
else:
stream_ok2 = True
camlog.debug("camera read %s, %s" % (stream_ok, str(datetime.now())))
if stream_ok and stream_ok2:
framecount += 1
camlog.debug("image show %s" % str(datetime.now()))
cv2.imshow(self.tablename, frame)
video.write(frame)
if cv2.waitKey(1) & 0xFF == 27: break
Подробнее здесь: https://stackoverflow.com/questions/789 ... ot-focused