您的位置:首页 > 运维架构 > Linux

树莓派定时采集图像上传到服务器

2017-12-10 00:02 567 查看

树莓派采集图片定时上传至服务器

准备图片存储服务器

在做这个系统之前,得先选择一个可以上传图片的服务器,当然,可以自己做一个小服务器,但是我选择了七牛网,因为它是一个免费的云图库,而且我平时写MarkDown也可以用这个

先要注册登录,之后,如图操作

创建一个存储空间picture



然后再进入这个页面记住AK(access_key )和SK(secret_key )。



首先查询七牛的Python调用API可知:

# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config

#获取图片
os.system('raspistill -o current_photo.jpg')
#需要填写你的 Access Key 和 Secret Key
access_key = 'Access_Key'
secret_key = 'Secret_Key'

#构建鉴权对象
q = Auth(access_key, secret_key)

#要上传的空间
bucket_name = 'Bucket_Name'

#上传到七牛后保存的文件名
key = 'my-python-logo.png';

#生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)

#要上传文件的本地路径
localfile = './sync/bbb.jpg'
ret, info = put_file(token, key, localfile)
print(info)

assert ret['key'] == key
assert ret['hash'] == etag(localfile)


安装七牛云的python SDK

直接安装:

pip install qiniu



easy_install qiniu

源码安装

#从Python SDK 下载地址下载源码

tar xvzf python-sdk-VERSION.tar.gzcdpython−sdk−VERSION.tar.gzcdpython−sdk−VERSION

python setup.py install

在嵌入式系统中(树莓派)

sudo pip install qiniu

代码

首先建一个get_photo.sh脚本文件

python get_picture.py


然后在/home/camera中建立一个文件get_picture.py

# -*- coding: utf-8 -*-

import time
from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config
import os
#需要填写你的 Access Key 和 Secret Key
access_key = '' #这里的密钥填上刚才我让你记住的密钥对
secret_key = '' #这里的密钥填上刚才我让你记住的密钥对

#构建鉴权对象
q = Auth(access_key, secret_key)

#要上传的空间
bucket_name = 'picture'

#上传到七牛后保存的文件名
key = '%s_%s_%s_%s_%s_%s.jpg'%(time.localtime()[0],time.localtime()[1],time.localtime()[2],time.localtime()[3],time.localtime()[4],time.localtime()[5])

#生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)

#要上传文件的本地路径
localfile = 'current_photo.jpg'

ret, info = put_file(token, key, localfile)

filename = 'current_photo.jpg'
if os.path.exists(filename):
os.remove(filename)


每次执行一次该程序就会自动上传一张图片,现在就差定时部分。

树莓派/Linux定时执行python脚本

开启crontab日志。

crontab默认不开启日志,所以先开启定时任务的日志来查看

修改rsyslog服务,将 /etc/rsyslog.d/50-default.conf 文件中的 #cron.* 前的 # 删掉;用service rsyslog restart重启rsyslog服务:

写定时任务

crontab -e

开启本用户的定时任务,即创建以本用户名为文件名的定时任务文件,位置在/var/spool/cron/crontabs/。

定时任务语句格式为:执行周期+命令,周期有5个域,分别是

分钟,小时,日(day of month),月(month of year),周几(day of week).

每个域不加限制任意的话用,整体格式为: * * * * command

比如我的脚本是 /home/camera/get_photo.sh

执行环境为 /usr/bin/python2.7

每5分钟执行一次

则语句为

/5 * * * /usr/bin/python2.7 /home/camera/get_photo.sh

写完后重启cron 服务

service cron restart

顺便附上常用的周期格式

每五分钟执行 /5 * * *

每小时执行 0 * * * *

每天执行 0 0 * * *

每周执行 0 0 * * 0

每月执行 0 0 1 * *

每年执行 0 0 1 1 *

简单总结一下定时脚本:

crontab -e
选择vim进入,到末尾输入 o
然后在末尾加入
*/5 * * * * /home/camera/get_photo.sh
然后按Esc->:wq->换行退出
最后重启cron
sudo service cron restart


实物图



最终在七牛云上看到的效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐