О стереосъемке я писал уже
довольно давно в 2005 году. Развитие проекта фотокубики и появление у
меня 3D принтера позволило
собрать простую стереокамеру, которая, однако, показала неплохие
результаты и имеет потенциал для развития.
Предлагаемая стереокамера может рассматриваться как упрощенный
вариант аппаратов, описанных в статьях Панорамная камера на 4-х Raspberry Pi и
Съемка панорам с квадракоптера 4
камерами Raspberry Pi. Число компьютеров уменьшено с 4х до
2х и добавлен видоискатель.
Использовался экран 5" Display Waveshare Raspberry Pi Touch Screen Display Monitor 800x480 HDMI - LCD. Он чувствителен к касанию, но в реальной съемке пользоваться пером не очень удобно, поэтому все управление камерой осуществляется одной спусковой кнопкой и КЗУ (контактно запоминающие устройство) для выбора выдержки. Драйверы перьевого ввода отстают от выхода релизов RASPBIAN, и хотя для этой конструкции это не принципиально, но экранное меню и прочие красоты я пока отложил в долгий ящик. Конкретно данная камера собрана на двух Raspberry Pi моделей A и B+. В данной конструкции B+ избыточна, но потенциально позволяет реализовать дистанционное управление через WiFi.
Желтая кнопка на фотографии в данной конструкции не
задействована.
Спусковая кнопка подает 5 В через сопротивление в 1 кОм на
спаренную оптопару TLP521-2, которая запускает съемку на
обоих компьютерах. Развязка через стереопару нужна чтобы при
старте один из компьютеров не сделал ложный снимок запущенный
сигналом с другого компьютера. С этим легко справится и
программно, но это решение уменьшает и вероятность выгорания сразу
двух компьютеров в случае возникновения нештатной ситуации. Три
перемычки задают в двоичном коде степень двойки на которую
множится минимальное время экспозиции. Программы на обеих
компьютерах одинаковые, что повышает синхронность их срабатывания,
хотя и не гарантирует. Ниже приведенная программа постоянно
выводит картинку предварительного просмотра на HDMI. Контроль
осуществляется перетыканием на лету разъема с одной камеры на
другую.
import RPi.GPIO as GPIO
import time
import picamera
fr=0
flag1=0
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(27, GPIO.IN, pull_up_down = GPIO.PUD_UP)
f = open('/home/pi/fotopicam/foto.txt', 'r')
fs = f.read()
f.close()
ffs = fs +'f'
f = open('/home/pi/fotopicam/foto.txt', 'w')
f.write(ffs)
f.close()
with picamera.PiCamera() as camera:
camera.resolution = (2592, 1944)
camera.framerate = 15
#camera.rotation = 180
camera.awb_mode = "sunlight"
camera.exif_tags['IFD0.Artist'] = "RWPBB"
camera.iso = 100
camera.exposure_mode = "auto"
camera.analog_gains =1
time.sleep(0.5)
camera.exposure_mode = "off"
bp=GPIO.input(23) + 2*GPIO.input(22) + 4*GPIO.input(27)
sp=400*2**bp
camera.shutter_speed = sp
camera.start_preview()
start = time.time()
def printFunction(channel):
global start
fin = time.time()
if fin-start>4:
start = time.time()
global fr
fr=fr+1
bp=GPIO.input(23) + 2*GPIO.input(22) + 4*GPIO.input(27)
sp=400*2**bp
camera.shutter_speed = sp
camera.capture("/home/pi/fotopicam/"+ffs+"pir%03d.jpg" % fr)
camera.exposure_mode = "auto"
time.sleep(0.5)
camera.exposure_mode = "off"
GPIO.add_event_detect(24, GPIO.FALLING, callback=printFunction, bouncetime=300)
while True:
a=1
GPIO.cleanup()
Крепление камер напечатано на 3D принтере и позволяет их
закрепить, как с портретной, так и с ландшафтной ориентацией и
менять стереобазу. Оптимальной обычно считается база равная 1/30 расстояния до ближайшего объекта.
Для просмотра я по-прежнему считаю решение с использованием StereoPhotoViewer Applet наиболее
удачным. Однако борьба за безопасность полетов,
как известно в результате приводит к их прекращению. Поэтому,
чтобы не читать многочисленные предупреждения и постоянно
настраивать Java, я предлагаю теперь смотреть стереоснимки с помощью HTML-5.