准备工作:
1、刷潘多拉系统;
2、安装python、python-requests;
3、插入USB摄像头并安装摄像头驱动和motion;
4、下载bypy,并把bypy.py放到/usr/bin/中。
先看效果,可以保存相片和视频,一秒钟大概保存2到3张照片,相片有地理位置信息。
编写on_picture_save.sh
#!/bin/bash
SHELL=/bin/bash
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_GB.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env
OLDPWD=/tmp/motion
python /root/exif.py $1 >> /tmp/motion/picture.log 2>&1
bypy.py -v upload $1 /picture/`date +%Y`/`date +%Y%m`/`date +%Y%m%d`/ >> /tmp/motion/picture.log 2>&1
rm -rf $1
exit 0
编写on_moive_end.sh
#!/bin/bash
SHELL=/bin/bash
USER=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_GB.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env
OLDPWD=/tmp/motion
bypy.py -v upload $1 /movie/`date +%Y`/`date +%Y%m`/`date +%Y%m%d`/ >> /tmp/motion/movie.log 2>&1
rm -rf $1
exit 0
修改motion.conf
在on_picture_save和on_movie_end那些指向上述脚本
output_all on
max_mpeg_time 600 #十分钟上传一次,可以改
启动motion -c motion.conf就可以了。
本来上面那样就可以了,但是上传的图都没有exif,在百度云中显示为神秘时间,看着不爽,继续折腾。
编写location.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Created on Wed May 06 15:26:19 2015
@author: HP
"""
import json, urllib2
import re
import pickle
import string
import fractions
class Getmyip:
def getip(self):
try:
myip = self.visit("http://www.123cha.com/")
except:
try:
myip = self.visit("http://www.bliao.com/ip.phtml")
except:
try:
myip = self.visit("http://www.whereismyip.com/")
except:
myip = "So sorry!!!"
return myip
def visit(self,url):
opener = urllib2.urlopen(url)
if url == opener.geturl():
str = opener.read()
return re.search('\d+\.\d+\.\d+\.\d+',str).group(0)
getmyip = Getmyip()
localip = getmyip.getip()
print localip
class location_baidu():
'''
build the mapping of the ip address and its location.
the geo info is from <freegeoip.net>
'''
def __init__(self, ip):
'''
Constructor of location_freegeoip class
'''
self.ip = ip
self.ak = 'KMdRKwHjWHCtMLe72bnTWEpq'
self.api_url = 'http://api.map.baidu.com/location/ip?ak=%s&ip=%s&coor=bd09ll' % (self.ak, self.ip)
urlobj = urllib2.urlopen(self.api_url)
data = urlobj.read()
self.datadict = json.loads(data, encoding='utf-8')
# print datadict
def get_address(self):
key = 'address'
return self.datadict[key]
# def get_region(self):
# key = 'region_name'
# return self.datadict[key]
#
# def get_city(self):
# key = 'city'
# return self.datadict[key]
def get_latitude(self):
lati = string.atof(self.datadict['content']['point']['y'])
a = fractions.Fraction(int(lati), 1)
b = fractions.Fraction(int((lati - int(lati)) * 60), 1)
c = fractions.Fraction(int(((lati - int(lati)) * 60 - b) * 60), 1)
return [a, b, c]
def get_longitude(self):
lati = string.atof(self.datadict['content']['point']['x'])
a = fractions.Fraction(int(lati), 1)
b = fractions.Fraction(int((lati - int(lati)) * 60), 1)
c = fractions.Fraction(int(((lati - int(lati)) * 60 - b) * 60), 1)
return [a, b, c]
if __name__ == '__main__':
iploc = location_baidu(localip)
print iploc.get_latitude()
print iploc.get_longitude()
f = file('gea.pickle', 'w')
pickle.dump([iploc.get_latitude(), iploc.get_longitude()], f) # dump the object to a file
f.close()
上面脚本每次网络连接的时候运行就可以了,可以在if-up.d设一个脚本启动它。
接下来就是写exif的exif.py
#!/usr/bin/env python
import datetime
from fractions import Fraction
import sys
import pyexiv2
import pickle
f=file('/root/gea.pickle')
gea=pickle.load(f)
f.close()
metadata = pyexiv2.ImageMetadata(sys.argv[1])
metadata.read()
nowtime = datetime.datetime.now()
metadata['Exif.Image.DateTime'] = pyexiv2.ExifTag('Exif.Image.DateTime', nowtime)
metadata['Exif.Photo.DateTimeDigitized'] = pyexiv2.ExifTag('Exif.Photo.DateTimeDigitized', nowtime)
metadata['Exif.Photo.DateTimeOriginal'] = pyexiv2.ExifTag('Exif.Photo.DateTimeOriginal', nowtime)
metadata['Exif.Image.Make'] = pyexiv2.ExifTag('Exif.Image.Make', 'Youku')
metadata['Exif.Image.Model'] = pyexiv2.ExifTag('Exif.Image.Model', 'Router Bitch')
#metadata['Exif.Image.GPSTag'] = pyexiv2.ExifTag('Exif.Image.GPSTag', '1598L')
metadata['Exif.GPSInfo.GPSLatitudeRef'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSLatitudeRef', 'N')
metadata['Exif.GPSInfo.GPSLatitude'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSLatitude', gea[0])
metadata['Exif.GPSInfo.GPSLongitudeRef'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSLongitudeRef', 'E')
metadata['Exif.GPSInfo.GPSLongitude'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSLongitude', gea[1])
metadata['Exif.GPSInfo.GPSAltitudeRef'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSAltitudeRef', '0')
metadata['Exif.GPSInfo.GPSAltitude'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSAltitude', Fraction(19179, 866))
metadata['Exif.GPSInfo.GPSTimeStamp'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSTimeStamp', [Fraction(1, 1), Fraction(20, 1), Fraction(104, 25)])
metadata['Exif.GPSInfo.GPSSpeedRef'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSSpeedRef', 'K')
metadata['Exif.GPSInfo.GPSSpeed'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSSpeed', Fraction(0, 1))
metadata['Exif.GPSInfo.GPSDateStamp'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSDateStamp', datetime.date.today())
metadata.write()
到此,照片里面根据IP地址加入了GPS位置,还有时间什么的了。