首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用动画将捕获的图片发布到API - rpi4

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

Stack Overflow用户
提问于 2020-02-12 02:17:00
回答 1查看 126关注 0票数 0

我正在尝试建立一个程序,可以自动将运动拍摄的照片从我的usb网络摄像头发布到rest API,但遇到了一些问题。我的直播流工作正常,它可以在所需的时间拍照。我在这里有我的脚本来发布照片:

代码语言:javascript
复制
on_picture_save home/pi/Documents/on_picture_save.py 

(是,删除分号)

我如何让脚本使用刚刚保存的文件,或者自动执行它,这样我就只能这样做了?:

代码语言:javascript
复制
import requests

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

r = requests.post(url)

print(r.text)

保存所有动作的目标目录是home/pi/Monitor,根据事件发生的时间将照片保存在自己的目录中,如下所示:

代码语言:javascript
复制
picture_filename %v_%Y-%m-%d-%H:%M/%q

任何想法都将不胜感激,谢谢!

更新:我已经找到了代码在命令行中的工作方式,并将其更改为更简单的方式:

代码语言:javascript
复制
on_picture_save curl -X POST api.link.com/here -F 'files=@/path/to/file/here.jpg;type=image.jpg'

我仍然会遇到打印结果的问题,所以如果有任何关于我如何能够做到这一点的建议,尽管一个额外的.py文件将是很好的。

EN

回答 1

Stack Overflow用户

发布于 2020-02-12 03:00:06

根据on_picture_save文档,您可以在命令中使用%f

代码语言:javascript
复制
on_picture_save home/pi/Documents/on_picture_save.py %f

它应该发送带有完整路径的文件名作为参数,您可以将其作为sys.argv[1]获取

代码语言:javascript
复制
import sys

print(sys.argv[1])

您还可以使用其他Conversion Specifiers发送其他信息。

BTW:snapshot_filename的文档中,您还可以看到

名为lastsnap.jpg的符号链接是在target_dir中创建的,并且将始终指向最新的快照,除非snapshot_filename恰好是'lastsnap‘

这样你就可以得到最后一张照片作为lastsnap.jpg

编辑:看起来你有curl命令

代码语言:javascript
复制
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],这可能是

代码语言:javascript
复制
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。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60175123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档