cv2: при считывании изображений с web-камеры в цикле первые 6 изображений не изменяются

Скрипт на Python сохраняет изображения с веб-камеры с интервалом 3 сек. Для теста я показываю пальцы руки, увеличивая количество на 1 для каждого нового снимка. Проблема в том, что первые 6 изображений всегда показывают только 1 палец, хотя, я ожидал, что количество пальцев будет увеличиваться с каждым снимком. Дальше, с 7 снимка количество пальцев увеличивается на 1. В итоге, на 10 снимке всего 5 пальцев, хотя должно быть 10.

import cv2
import time

class Get_photo:
    def __init__(self):
        # Initialize the camera
        self.cap = cv2.VideoCapture(0)

    def save_photo(self, photo_name):
        # Check if the camera is opened correctly
        if self.cap.isOpened():

            self.ret, self.frame = self.cap.read()

            # Save the image
            if self.ret:
                cv2.imwrite(f"test/{photo_name}.jpg", self.frame)

    def close_cam(self):
        # close cam
        self.cap.release()

if __name__ == "__main__":
    time_begin = time.time()
    get_photo = Get_photo()
    for count in range(0, 20):
        time_start = time.time()
        time.sleep(3)
        get_photo.save_photo(count)
        time_end = time.time()
        print(f"Spent time on the picture: {time_end-time_start} seconds.")
    get_photo.close_cam()
    finish_time = time.time()
    print(f"Total time spent: {finish_time-time_begin} seconds.")

Если переделать цикл так, чтобы каждый раз инициализировать объект класса и каждый раз закрывать камеру, то все отрабатывает правильно, но на это затрачивается больше времени.
Не могу понять, почему первые 6 изображений не меняются, а остальные отстают? Для примера добавляю gif с демонстрацией, секундомера, где видно что снимки "отстают": Пример

Т.к пауза между снимками 3 сек,то как минимум на последнем снимке должно быть время > 1 мин (20 снимков * 3 сек)

P.S: даная ошибка возникает на ОС: Ubuntu 20.04.6 LTS Протестировал этот код на windows 10 все работает отлично.


Ответы (0 шт):