Контролиране на времето за заснемане на снимки с USB уеб камера на Raspberry Pi и Python

Правя снимки на моя Raspberry Pi с помощта на USB уеб камера и Pygame. Тези изображения ще се използват за проследяване на движението на обект, след което ще завъртят мотор. Следователно постоянна честота на кадрите би била добра. За съжаление, правенето на снимки на тъмен обект изглежда отнема почти 4 пъти повече време, отколкото с ярки обекти. Подозирам, че това е резултат от по-дълго време на експозиция.

Ако това наистина е проблемът, има ли някакъв начин да настроите времето на експозиция на фиксирано число? Ако не, какво друго мога да направя?

резултат от кода по-долу:

Тъмно: (насочен към черна стена)
- Продължителност: 14213 ms
- Мин.: 12 ms
- Макс.: 387 ms
- Ср.: 142 ms

Ярко: (насочен към бяла стена)
- Продължителност: 3550 ms
- Мин.: 12 ms
- Макс.: 67 ms
- Ср.: 35 ms

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