在路由宝实现实时监控并上传百度云

准备工作:
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位置,还有时间什么的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值