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



我正在尝试构建一个程序,该程序会自动将运动拍摄的照片从我的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文件做到这一点的建议,那就太好了。

基于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文档中,您还可以看到

target_dir中创建一个名为lastsnap.jpg的符号链接和 将始终指向最新的快照,除非snapshot_filename 正是"最后的快照">

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


编辑:似乎你有curl命令

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

可以在 http://curl.trillworks.com 上转换为 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将数据发送到队列,而家里的其他本地计算机在桌面上运行脚本,该脚本定期从队列中获取数据并显示在桌面上。

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)

相关内容

  • 没有找到相关文章

最新更新