Управление временем захвата фотографий веб-камерой USB на Raspberry Pi и Python

Я делаю снимки на своем Raspberry Pi, используя веб-камеру USB и Pygame. Эти изображения будут использоваться для отслеживания движения объекта, а затем для вращения двигателя. Поэтому было бы неплохо иметь постоянную частоту кадров. К сожалению, съемка темных объектов занимает почти в 4 раза больше времени, чем съемка ярких объектов. Я подозреваю, что это результат более длительного времени экспозиции.

Если это действительно проблема, есть ли способ установить время экспозиции на фиксированное число? Если нет, что еще я могу сделать?

результат кода ниже:

Темно: (нацелено на черную стену)
– Продолжительность: 14213 мс
– Мин.: 12 мс
– Макс.: 387 мс
– Среднее: 142 мс

Яркий: (нацелен на белую стену)
– Продолжительность: 3550 мс
– Мин.: 12 мс
– Макс.: 67 мс
– Среднее: 35 мс

print "importing.."

import time
import pygame
import pygame.camera
from pygame.locals import *

# INITIALIZE CAMERA
print "\ninitializing.."
pygame.init()
pygame.camera.init()
camlist = pygame.camera.list_cameras()
cam = pygame.camera.Camera("/dev/video0", (320,240))
cam.start()

time.sleep(1)

# MEASURE TIME
print "running.."
begin = int(round(time.time() * 1000))

min = 1000
max = 0

for i in range(1, 100):
        start = int(round(time.time() * 1000))    
        img = cam.get_image()        
        stop = int(round(time.time() * 1000)) - start

        if(stop > max):
                max = stop
        if(stop < min):
                min = stop

        print "{}\t{} ms".format(i, stop)

duration = int(round(time.time() * 1000)) - begin

print "Duration: {} ms".format(duration)
print "Min:\t{} ms".format(min)
print "Max:\t{} ms".format(max)
print "Avg:\t{} ms".format(duration / 100)

person Emiel Steerneman    schedule 28.10.2014    source источник
comment
Это не собственная камера Raspberry Pis? В зависимости от модели USB-камеры такой низкоуровневый контроль может быть невозможен. Лучше включить модель камеры и попытаться найти конкретные инструкции для Linux-драйвера.   -  person Mikko Ohtamaa    schedule 28.10.2014


Ответы (1)


Пока требуемая частота кадров достаточно низка, чтобы выдержать самую медленную экспозицию, вы можете спать после обработки каждого кадра, пока не придет время для нового кадра. У вас уже есть время, когда вы начали первый кадр. Когда первый кадр готов, добавьте требуемый интервал, чтобы получить следующий запуск, и рассчитайте время ожидания для следующего кадра.

person davidc    schedule 28.10.2014
comment
Да, спасибо, я думал об этом методе. К сожалению, это будет слишком медленно - person Emiel Steerneman; 28.10.2014
comment
Но поскольку других ответов я не получу и поскольку это может быть решением для других с той же проблемой, я соглашусь. - person Emiel Steerneman; 29.10.2014