樹莓派定時採集影象上傳到伺服器
樹莓派採集圖片定時上傳至伺服器
準備圖片儲存伺服器
在做這個系統之前,得先選擇一個可以上傳圖片的伺服器,當然,可以自己做一個小伺服器,但是我選擇了七牛網,因為它是一個免費的雲圖庫,而且我平時寫MarkDown也可以用這個
先要註冊登入,之後,如圖操作
建立一個儲存空間picture
然後再進入這個頁面記住AK(access_key )和SK(secret_key )。
# -*- 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
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