文章摘要: [ ${sleepcount} -eq 0 ] && capPic [ ${sleepcount} -eq ${normalinterval} ] && capPic && sleepcount=0 fi sleepcount=$(expr ${sleepcount} + 1) sleep ${sl
心血來潮,想著做一個陽臺花草生長的延時視訊。陽臺上正好有個樹莓派,只需要一個攝像頭即可。說做就做,500萬畫素的樹莓派攝像頭,包郵只需要30元。基本夠夠用了。接好線,固定好攝像頭位置。
效果如下圖:
樹莓派安裝和配置攝CSI介面的攝像頭不復雜,首先安裝一個raspi-config軟體,執行該命令,啟用攝像頭模組,此時就可以使用raspistill抓取照片了。如果需要使用motion等軟體做實時監控,那麼還需要在modules load配置檔案中增加bcm2835-v4l2此配置。一切都很順利,捕捉到第一張照片。
編寫程式碼定時拍攝圖片。因為考慮要捕捉清晨和黃昏時的光線變化,程式碼做了一些特殊的邏輯。在清晨和黃昏捕捉圖片的頻率加高,在凌晨0~5點之間,由於陽臺光線不佳,攝像頭採集到的照片是全黑的,因此不需要拍攝。拍攝完照片每天儲存一次到HOME-NAS上面。最終定時捕捉照片的程式碼如下:
#!/bin/bash
mkdir /root/pics >/dev/null 2>&1
mkdir /var/piccap >/dev/null 2>&1
touch /var/piccap/lastbtime
sleeptime=60
busyinterval=3
normalinterval=30
sleepcount=0
capPic ()
{
timestr=$(date +%Y%m%d%H%M%S)
raspistill -t 5000 -o /root/pics/image_${timestr}.jpg -q 100 -n -rot 180
}
checkAndUpload ()
{
lastbtime=$(cat /var/piccap/lastbtime)
nowtime=$(date +%Y%m%d)
if [ -z “${lastbtime}” -o “${lastbtime}” != “${nowtime}” ]
then
umount /mnt/homenas
mount -t cifs -o username=User,password=Password //22.22.22.3/share /mnt/homenas/
if [ $? -eq 0 ]
then
for i in $(ls /root/pics/image_*.jpg)
do
mv $i /mnt/homenas/piccap
done
umount /mnt/homenas
echo ${nowtime} > /var/piccap/lastbtime
fi
fi
}
while :
do
checkAndUpload
hour=$(date +%H)
min=$(date +%M)
if [ ${hour} -eq 5 -a ${min} -gt 30 ] || [ ${hour} -ge 17 -a ${hour} -le 19 -o ${hour} -ge 6 -a ${hour} -le 8 ]
then
# 上午5點半~9點,晚上5點至8點,每隔3分鐘拍攝一張。
[ ${sleepcount} -eq 0 ] && capPic
[ ${sleepcount} -eq ${busyinterval} ] && capPic && sleepcount=0
elif [ ${hour} -ge 0 -a ${hour} -le 4 ]
then
# 凌晨0點到4點不抓取照片。
sleepcount=0
else
# 其他時間段每隔30分鐘抓取一張。
[ ${sleepcount} -eq 0 ] && capPic
[ ${sleepcount} -eq ${normalinterval} ] && capPic && sleepcount=0
fi
sleepcount=$(expr ${sleepcount} + 1)
sleep ${sleeptime}
done
處理照片並生成視訊的命令列為:
ffmpeg -r 3 -i img_%d.jpg -t 73 -vcodec libx264 D:/test.mp4
其中-r為幀率,-t為視訊總時長,二者之積等於照片張數即可。