<代码级="庆典">凶星@ lepeshka:〜附64cb5c59恢复和LT设备$ ADB设备清单; /码> PRE>如果你看到最后一行,则一切OK,点击设备上下卷,卷下,电源 - 开关ADB侧向载荷(至少在CWM指令的版本,它是从上面第二行),我们只能键入控制台的Ubuntu:
<代码级="庆典">凶星@ lepeshka:〜$ ADB侧向载荷SuperSU_Bootloader_FIXED.zip发送:“侧向载荷'100%LT; /码> PRE>和根苍蝇在设备上,之后不再记住要关闭手机,取出电池。
<代码级="庆典">凶星@ lepeshka:〜附64cb5c59恢复&LT设备$ ADB设备清单; /码> PRE>坐骑系统:使用Java Web Start和看:
<代码级="庆典">凶星@ lepeshka:〜$亚行的shell安装-o RW -t ext4的/dev/block/platform/msm_sdcc.1/by-name/system /系统< /代码> PRE>添加线/system/build.prop:
<代码级="庆典">凶星@ lepeshka:〜$ ADB壳QUOT;回声\" persist.service.adb.enable = 1 \" &亿吨;> /system/build.prop" &中尉; /码> PRE>重新启动:
<代码级="庆典">凶星@ lepeshka:〜$ ADB重启< /码> PRE>我们正在等待装载,检查终端ADB的状态:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜设备$ ADB设备名单附后64cb5c59设备&lt; /码&GT; PRE>宾果!调试,让我们看看我们有你的手机上延续了该运行<一href="http://androidscreencast.googlecode.com/svn/trunk/AndroidScreencast/dist/androidscreencast.jnlp">AndroidScreenCast
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell输入抽头1150年10月凶星@ lepeshka:〜$亚行的shell输入抽头710 1150凶星@ lepeshka:〜$亚行的shell输入抽头1150年10月凶星@ lepeshka:〜$亚行的shell输入抽头710 1150&LT; /码&GT; PRE>然后按智能手机上的VOL UP键,现在看到:
![]()
把一个复选标记,然后单击OK:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell输入抽头50600凶星@ lepeshka:〜$亚行的shell输入抽头650 600℃/码&GT; PRE>![]()
Svaypaem解锁屏幕:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell输入刷卡100 100 500 100℃/码&GT; PRE>![]()
现在,你需要把一些VNC服务器为Android,例如,的Android VNC服务器。在智能手机上安装它:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$ ADB安装机器人+ VNC +服务器+ v1.1RC0.apk 4055 KB /秒(在0.501s 2084419字节)封装:/ data / local目录/tmp/droid+VNC+server+v1.1RC0.apk成功&LT; /码&GT; PRE>我们清醒的智能手机,因为它容易入睡,直到我们安装VNC服务器和svaypaem,即解锁屏幕:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell输入的keyEvent 26凶星@ lepeshka:〜$亚行的shell输入刷卡100 100 500 100℃/码&GT; PRE>运行VNC -server:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell时开始-a -n android.intent.action.Main org.onaips.vnc / .MainActivity&LT; /码&GT; PRE>![]()
单击OK:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell输入抽头50900&LT; /码&GT; PRE>![]()
单击开始:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell输入抽头350 300℃/码&GT; PRE>![]()
点击授予访问权限:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$亚行的shell输入抽头600 1000 LT; /码&GT; PRE>![]()
好了,现在是通过亚行转发端口:
&LT;代码级=&QUOT;庆典&QUOT;&GT;凶星@ lepeshka:〜$ ADB向前TCP:5801 TCP:5801凶星@ lepeshka:〜$ ADB向前TCP:5901 TCP:5901&LT; /码&GT; 预>并通过在智能手机上,或者你最喜欢的VNC客户端的浏览器。
![]()
进一步工作,作为一个常规的Android手机,只通过一台计算机,它是方便的,以建立WiFi连接,那么我们就可以通过WiFi下去的VNC,但不是所有的时间,以保持与计算机连接的手机(后燃气表不总是位于计算机的附近)。
现在,当与设备的交互完全建立起来,就可以进行在互联网上配置摄影和发布数据。
定期拍摄 H6>安装应用程序塔斯克,以00:00的时间配置文件中创建它至23:59每30分钟执行一个动作 - 做照片。拍摄选项中,选择最合适的位置安装电话和柜台。我有这个宏的强制性闪光灯。
就是这样,实际上,我把我的手机(顶视图):
![]()
纸箱用绳子捆绑到柜台,它是家庭对智能手机,包装鸡蛋没有固定在垂直位置您的智能手机。然后,我更精致的设计,用胶带和纸板的闪光灯不直接打入脸,给人一种严重的眩光,防止认可。在所有封闭的盖子,里面顶部一片漆黑,或在明亮的环境光并不总是正确的自动对焦工作。
在媒体开发智能手机的设置一定要放一个复选标记的智能手机并没有在所连接的充电入睡,然后在某个时刻,他停下来拍照且仅当它继续打扰。
![]()
在网络 H6>蔓延到移动柜台拍摄的图像在互联网上,我用的第一个可用的应用程序 - 的 FolderSync精简版。它能够与智能手机,如谷歌驱动器的文件夹同步的文件夹。
因此,我现在可以在世界上有互联网接入的任何地方,去你的谷歌驱动器,并确认燃气锅炉运行正常。
第2部分:检测标志 H4>因此,发送抄表互联网上之后,我开始关注自动识别证据的可能性。这将允许:
- 来进行用气量
- (通过e-mail或短信报警)自动跟踪天然气短缺 LI> UL>
的统计分析 作为开发语言选择蟒蛇,成像利用图书馆 OpenCV的。
这里是主程序,它是由所述冠一小时一次运行的代码如下:
&LT;代码级=&QUOT;蟒蛇&QUOT;&GT;从车型导入SYS进口OS导入的getImage,来自GDrive的进口getImagesFromGDrive SESS,createImageFromGDriveObject如果__name__ =='__main__':#获得来自谷歌磁盘映像的新照片列表,HTTP = getImagesFromGDrive()#交替处理他们的img_info图像中一个循环:#下载图片的img = createImageFromGDriveObject(img_info,HTTP)FILE_NAME = img_info ['标题']#查找在数据库试项:数据库图像=的getImage(os.path.basename( FILE_NAME))dbimage.img = IMG dbimage.download_url = img_info [&QUOT; downloadUrl&QUOT] dbimage.img_link = img_info ['webContentLink']替换('&安培;出口=下载',''),除了ValueError错误为E:打印E继续#识别标志dbimage.identifyDigits()#保存数据到数据库sess.commit()&LT; /码&GT; PRE>它使用功能代码,我会发布如下:
<密码> getImagesFromGDrive 代码> PRE> - 一个函数,返回的没有从谷歌驱动器 <密码> createImageFromGDriveObject 代码> PRE> - 功能,下载图像本身,并把它转换成一种格式的OpenCV <密码>的getImage 代码> PRE> - 用于在数据库中的图像记录功能的搜索,如果没有,那么创建它 <密码> identifyDigits 代码> PRE> - 方法认识见证这个图片 <代码> HTTP 代码> PRE> - 授权客户端来访问谷歌驱动器,详细了解访问API的磁盘读< A HREF =“https://developers.google.com/drive/web/quickstart/quickstart-python”>这里 <密码> SESS < /代码> PRE> - 使用该库 SQL炼金术 LI> UL>Connection对象到数据库与谷歌驱动器正在工作 H5>我们做的第一件事是与谷歌驱动器映像列表获得:
&LT;代码级=&QUOT;蟒蛇&QUOT;&GT;从日期时间进口tzinfo,timedelta,日期从从型号apiclient.discovery进口构建dateutil.relativedelta进口relativedelta进口OS导入getLastRecognizedImage高清getImagesFromGDrive():#定义的ID文件夹谷歌光盘在图像FOLDER_ID ='0B5mI3ROgk0mJcHJKTm95Ri1mbVU'#创建授权客户端的HTTP = getAuthorizedHttp()#服务对象光盘drive_service =构建(车程','V2',HTTP = HTTP)#,开始从对所有的磁盘映像中删除对象本月,我们不再感兴趣month_ago = date.today()+ relativedelta(月= -1)Q =&QUOT;'%s'的家长和MIMETYPE ='为image / jpeg',并捣毁=虚假和modifiedDate&LT;'%S '&QUOT; %(FOLDER_ID,month_ago.isoformat())文件= drive_service.files()名单(Q = Q,maxResults = 1000).execute()图像的files.get(“项目”):drive_service.files()。垃圾桶(FILEID =图像['身份证'])的execute()#现在做数据库查询,返回最后一个识别图像last_image = getLastRecognizedImage()#得到一个列表,从磁盘映像,修改日期大于记录的最后一个识别图像PAGE_SIZE = 1000的日期结果= [] PT =无#由于驱动器API不允许的时间获得超过1000张,#然后通过页面列表页面下载到1000,并增加了,而真正的单一阵列中:Q =&QUOT;在父母'%s'和丢弃=虚假和MIMETYPE ='为image / jpeg'和modifiedDate&GT;'%s'的&QUOT; %(FOLDER_ID,last_image.check_time.replace(tzinfo TZ =())。Isoformat(“T”))文件= drive_service.files()。表(Q = Q,maxResults = PAGE_SIZE,pageToken = PT).execute() result.extend(files.get(“项目”))PT = files.get('nextPageToken'),如果不点:突破#翻转列表,治疗的时间顺序拍摄result.reverse()返回结果,HTTP&LT; /代码&GT; PRE>授权客户端磁盘创建如下:
&LT;代码级=&QUOT;蟒蛇&QUOT;&GT;进口httplib2的进口ConfigParser从oauth2client.client进口OAuth2WebServerFlow从oauth2client.file进口仓储高清getAuthorizedHttp():#我们得到的记录有CLIENT_ID config.ini文件和CLIENT_SECRET配置= ConfigParser .ConfigParser()config.read([os.path.dirname(__文件__)+'/ config.ini文件'])CLIENT_ID = config.get('GDrive的','CLIENT_ID')CLIENT_SECRET = config.get('GDrive的“, 'CLIENT_SECRET')#OAuth的将被授权的2.0范围内。 #查看https://developers.google.com/drive/scopes所有可用的范围。 OAUTH_SCOPE ='https://www.googleapis.com/auth/drive'#重定向的URI安装的应用程序REDIRECT_URI ='金塔:IETF:WG:OAuth的:2.0:OOB'#client_secrets.json文件将存储在存储令牌=存储(os.path.dirname(__ FILE__)+'/client_secrets.json')证书= storage.get()#如果没有在该文件中,然后运行该程序的授权,如果没有凭据:#执行OAuth2.0授权流程。流量= OAuth2WebServerFlow(CLIENT_ID,CLIENT_SECRET,OAUTH_SCOPE,REDIRECT_URI)authorize_url = flow.step1_get_authorize_url()#输出在控制台链接,有必要去检查打印“转到你的浏览器访问以下链接:”+ authorize_url#征求响应代码=进行raw_input('请输入验证码:').strip()凭证= flow.step2_exchange(代码)#保存令牌storage.put(凭证)#创建HTTP客户端和授权的HTTP =的httplib2.Http()credentials.authorize(HTTP)返回的HTTP&LT; /码&GT; PRE>对于CLIENT_ID和CLIENT_SECRET在谷歌开发者控制台需要创建一个项目,并为此根据项目的原料药和AUTH B> - 证书 B> - 的OAuth B>点击创建新的客户端ID B>,有选择安装应用 B> - 其他 B>:
![]()
当你第一次运行写信给你想要去获得一个令牌,将其插入到你的浏览器URL中的主机的脚本,允许应用程序访问谷歌驱动器,由谷歌验证码从浏览器复制发行并给脚本。然后,该脚本将保留一切您需要的文件中的<代码> client_secrets.json 代码> PRE>和后续运行也不会多问什么。
下载图像的功能是非常简单的:
&LT;代码级=&QUOT;蟒蛇&QUOT;&GT;进口CV2进口numpy的是NP高清downloadImageFromGDrive(downloadUrl,HTTP =无):如果HTTP ==无:HTTP = getAuthorizedHttp()#下载图片RESP,内容= HTTP。请求(downloadUrl)#创建图像对象的OpenCV img_array = np.asarray(字节组(内容),DTYPE = np.uint8)返回cv2.imdecode(img_array,cv2.IMREAD_COLOR)高清createImageFromGDriveObject(img_info,HTTP =无):返回downloadImageFromGDrive( img_info ['downloadUrl'],HTTP)和LT; /码&GT; PRE>
照片中搜索证词 H5>做后,我们拿到了照片的第一件事情,可以发现在它的数字,我们承认。这种方法确实<前级=“prettyprint”> <代码> extractDigitsFromImage 代码> PRE>:
&LT;代码级=&QUOT;蟒蛇&QUOT;&GT;高清extractDigitsFromImage(个体经营):IMG = self.img&LT; /码&GT; PRE>
原来的照片看起来像这样:
![]()
因此,首先我们把它收购所需的方向。
&LT;代码级=&QUOT;蟒蛇&QUOT;&GT; #是90度ħ旋转时,瓦特,K = img.shape M = cv2.getRotationMatrix2D((瓦特/ 2中,h / 2),270,1)的img = cv2.warpAffine(张图片,M(W,H)) &LT; /码&GT; PRE>
![]()
&LT;代码级=&QUOT;蟒蛇&QUOT;&GT; #裁剪黑场旋转的img =张图片后出现[0:小时,(WH)/ 2:小时+(WH)/ 2] h时,瓦特中,k = img.shape&LT; /代码&GT; 预> <登记/ >