Использование движения для публикации изображений, снятых в API - rpi4 - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь создать программу, которая будет автоматически публиковать фотографии, сделанные движением с моей веб-камеры usb, в API отдыха, и столкнулась с некоторыми проблемами. Мой прямой эфир работает правильно, и он делает фотографии в нужное время. У меня есть сценарий для размещения фотографии здесь:

on_picture_save home/pi/Documents/on_picture_save.py 

(да точка с запятой удалена)

Как я могу заставить сценарий использовать только что сохраненный файл или сделать это? сделать это автоматически, чтобы мне просто нужно было сделать что-то вроде этого?:

import requests

url = "https://api.emotuit.com/upload"

r = requests.post(url)

print(r.text)

Целевой каталог, в котором сохраняются все движения, это home / pi / Monitor, а фотографии сохраняются в своем собственном каталоге на основе время события вроде этого:

picture_filename %v_%Y-%m-%d-%H:%M/%q

Любые идеи будут оценены, спасибо!

Обновление: я обнаружил, как работает код в командной строке, и изменил его на тот, чтобы упростим задачу:

on_picture_save curl -X POST api.link.com/here -F 'files=@/path/to/file/here.jpg;type=image.jpg'

У меня все еще будут проблемы с печатью результата, поэтому, если есть какие-либо предложения о том, как я смогу это сделать, добавив дополнительный файл .py, это было бы здорово.

1 Ответ

0 голосов
/ 11 февраля 2020

На основе on_picture_save документации вы можете использовать %f в команде

on_picture_save home/pi/Documents/on_picture_save.py %f

, и она должна отправить имя файла с полным путем в качестве аргумента, который вы можете получить как sys.argv[1]

import sys

print(sys.argv[1])

Вы также можете использовать другие Спецификаторы преобразования для отправки другой информации.


Кстати: в документации для snapshot_filename вы также можете видеть

символьная c ссылка с именем lastsnap.jpg создается в target_dir и всегда будет указывать на последний снимок , если имя снимка_файла точно не равно 'lastsnap'

, поэтому вы можете получить последнее изображение как lastsnap.jpg


EDIT: Кажется, у вас есть команда curl

curl -X POST api.link.com/here -F 'files=@/path/to/file/here.jpg;type=image.jpg'

, которая может быть преобразована в Python запросы на http://curl.trillworks.com

и с sys.argv[1] это может быть

import sys
import requests

files = {'files': (sys.argv[1], open(sys.argv[1], 'rb'))}

response = requests.post('http://api.link.com/here', files=files)
data = response.json() 

print(data)
#print(data["???"])

Но у него не будет доступа к вашему экрану, и вы его не увидите. Вы можете только сохранить его в файл и создать другую программу (которую вы запускаете на рабочем столе вручную), чтобы прочитать и отобразить ее.

Я использовал очередь MQTT вместо файла.

on_picture_save отправлял данные в очередь, а другие локальные компьютеры дома выполняли сценарий на рабочем столе, который периодически получал данные из очереди и отображал на рабочем столе.

mosquitto в качестве сервера / брокера и клиента командной строки для тестов (или для использования со скриптами bash)
и Paho MQTT в качестве модуля Python для работы с MQTT.

import sys
import requests
import paho.mqtt.client as mqtt

files = {'files': (sys.argv[1], open(sys.argv[1], 'rb'))}

response = requests.post('http://api.link.com/here', files=files)
data = response.json() 

client = mqtt.Client()
client.connect('localhost') # or IP of other computer with MQTT server/broker
client.publish('last', sys.argv[1], retain=True)
#client.publish('data', str(data["???"]), retain=True)
...