Я использую и изменяю 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.
Любой вход будет оценен. Благодаря!