Python 使用运动将捕获的图片发布到API-rpi4

Python 使用运动将捕获的图片发布到API-rpi4,python,api,post,raspberry-pi,motion-detection,Python,Api,Post,Raspberry Pi,Motion Detection,我正试图建立一个程序,将自动从我的usb摄像头的运动拍摄的照片发布到rest API,并遇到了一些问题。我的livestream工作正常,它在所需的时间拍照。 我有我的脚本在这里发布照片: on_picture_save home/pi/Documents/on_picture_save.py (是,分号已删除) 如何使脚本使用刚刚保存的文件,或自动执行,以便我只需执行以下操作: import requests url = "https://api.emotuit.com/upload"

我正试图建立一个程序,将自动从我的usb摄像头的运动拍摄的照片发布到rest API,并遇到了一些问题。我的livestream工作正常,它在所需的时间拍照。 我有我的脚本在这里发布照片:

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文件来实现这一点,那就太好了。

基于文档,您可以在命令中使用
%f

on_picture_save home/pi/Documents/on_picture_save.py %f
它应该发送带有完整路径的文件名作为参数,您可以通过
sys.argv[1]

import sys

print(sys.argv[1])
您还可以使用“其他”发送其他信息


顺便说一句:在的文档中,您还可以看到

目标目录中创建名为lastsnap.jpg的符号链接 将始终指向最新的快照,除非快照文件名为 完全是“最后的快照”

因此,您可以将最后一张图片作为lastsnap.jpg


编辑:您似乎有curl命令

curl -X POST api.link.com/here -F 'files=@/path/to/file/here.jpg;type=image.jpg'
可以在上转换为Python的请求

使用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
正在向队列发送数据,家中的其他本地计算机正在桌面上运行脚本,该脚本定期从队列中获取数据并显示在桌面上

作为测试的服务器/代理和命令行客户端(或与
bash
脚本一起使用)
并作为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)

也许它可以运行在\u picture\u save.py filename上的参数
,然后ypu可以在\code中将它作为
sys.argv[1]
运行,我不确定,但是
motion
可以选择为上次创建的图片创建别名
latest.jpg
,然后您不必知道它的名称。最终,您可以获取所有文件名
os.listdir()
sort()
它们,然后列表上的最后一个文件应该是最新的文件。:“在目标目录中创建一个名为lastsnap.jpg的符号链接,它将始终指向最新的快照”:使用%f传递文件名(具有完整路径)我已经让它在命令行中使用:-X POST-F'files=@/path/to/file/here.jpg;type=image.jpg'所以我刚刚将其添加到要测试的on_picture_保存行中。然而,我仍然需要打印我的结果,所以我不确定这将如何工作。谢谢你的意见!谢谢你的输入,基于我之前评论中的信息和你的回答,我仍然需要打印我的结果。我不确定这将如何工作,因为它以json格式返回,所以我不知道它将打印到哪里。感谢againI添加了关于
MQTT
队列的信息,我使用该队列将信息从RPi发送到其他几台计算机。其他计算机将不得不运行脚本,定期检查队列,并在桌面上以弹出窗口的形式显示新信息。明白了,我会研究一下。非常感谢。