#python #linux #raspberry-pi
#python #linux #raspberry-pi
Вопрос:
У меня есть некоторый код, согласно которому при срабатывании датчика PIR камера делает одно единственное изображение и загружает его в хранилище больших двоичных объектов Azure, одной единственной фотографии недостаточно, но я не могу заставить программу делать несколько изображений при срабатывании камеры.
from gpiozero import MotionSensor
from picamera import PiCamera
from datetime import datetime
from azure.storage.blob import BlockBlobService
from azure.storage.blob import ContentSettings
camera = PiCamera()
pir = MotionSensor()
block_blob_service = BlockBlobService(account_name='YOURACCOUNT', account_key='YOURKEY')
while True:
pir.wait_for_motion()
filename = "pircam-" datetime.now().strftime("%Y-%m-%d_%H.%M.%S.jpg")
camera.capture(filename)
pir.wait_for_no_motion()
block_blob_service.create_blob_from_path(
'YOURCONTAINER',
filename,
filename,
content_settings=ContentSettings(content_type='image/jpeg'))
Ожидаемыми результатами должны быть камеры, делающие несколько неподвижных изображений вместо одного неподвижного изображения.
Комментарии:
1. между
wait_for_motion
иwait_for_no_motion
вы создаете только одно изображение, поэтому вы не можете получить больше изображений. Вам пришлось бы создать другой цикл — возможно, безwait_for_no_motion
, который останавливает ваш текущий цикл.
Ответ №1:
Изображения сохраняются в файлах с именами с отметкой времени с точностью до секунды. Если изображения сделаны в одну и ту же секунду, имена файлов будут одинаковыми, и будет только один файл результата. Вам нужно изменить имена файлов — например, использовать ближайшую миллисекунду.
Комментарии:
1. Это не решит проблему, при каждой активации он по-прежнему делает только одно неподвижное изображение, я хочу, чтобы при каждой активации он делал несколько изображений.
Ответ №2:
Я не могу это протестировать, но pir.wait_for_no_motion()
останавливает ваш цикл после первого изображения, поэтому вы не можете получить больше изображений. Вам пришлось бы использовать pir.motion_detected
для проверки, нужно ли делать снимок
while True:
if pir.motion_detected:
filename = "pircam-" datetime.now().strftime("%Y-%m-%d_%H.%M.%S.%s.jpg")
camera.capture(filename)
block_blob_service.create_blob_from_path(...)
Я написал это на основе GPIO_Zero_Cheatsheet.pdf