Несколько экземпляров изображений при запуске Pi Camera

#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