2015-02-01 5 views
1

Я использую и изменяю this Python-скрипт для простого отслеживания движения. К сожалению, я столкнулся с проблемами с функцией, которая захватывает исходное изображение, чтобы начать движение.Отслеживание движения с использованием пикамера и скрипта python

def captureTestImage(): 
count[0] = count[0] + 1 
command = "raspistill -w %s -h %s -e bmp -o %s%s" % (100, 75, filepath, filenamePrefix) 
imageData = StringIO.StringIO() 
imageData.write(subprocess.check_output(command, shell=True)) 
imageData.seek(0) 
im = Image.open(imageData) 
buffer = im.load() 
imageData.close() 
return im, buffer 

Функция выше, становится проблематичным, когда она достигает линии

im = Image.open(imageData) 

Эта линия, в теории, принимает байты, записанные в ImageData и преобразует их обратно в годной к употреблению файл изображения. Однако, когда Image.open вызывается в imageData, я получаю сообщение о том, что массив байтов не может быть принудительно введен в изображение. Я понимаю, что subprocess.check_output возвращает байтовое представление возвращаемого значения (при условии, что оно есть). Это явно не так, но я не могу понять, как преобразовать файл байта (imageData) обратно в фактический файл изображения. До сих пор я использовал io.ByteIO, но это дало мне те же проблемы, что и StringIO.

Я немного изменил эту функцию, поскольку команда (raspistill) выполнялась бесконечно из-за переданного аргумента (-t 0). После удаления скрипта разрешалось продвигаться вперед, вплоть до Image.open.

Любой вход будет оценен. Благодаря!

ответ

0

Вы не пишите в STDOUT с помощью raspistill, поэтому вы не собираетесь получать данные изображения в STDOUT.

попробовать

command = "raspistill -w %s -h %s -e bmp -o -" % (100, 75)