个人毕业设计基于python开发的图像
装
河北大学工商学院
本科生毕业论文(设计)
题目:基于python开发的图像 采集器之Airppt
学 部 学科门类 专 业
基于python开发的图像采集器之Airppt
摘 要
本文设计了一个基于python开发的图像采集器,该设计通过普通的USB数字摄像头来捕捉和获取实时图像,利用linux系统下的python脚本中的Opencv图像处理模块和Huigui摄像头识别模块实现了采集图像信息并对图像信息进行分析的功能,该设计具有可靠性高、灵活稳定、低成本的特点,基于python开发的图像采集器将采集到的数据输入到python脚本进行分析处理,并从外部引入C编程,根据不同的处理结果,系统将会调
装
用不同的C程序,从而实现对ppt的翻页。本文系统介绍了用python开发的图像采集器基本满足设计要求。
关键词:图像采集器;Python语言;Python C扩展;混合语言编程
目 录
1 前言 ................................. 错误!未定义书签。
2 Python语言介绍 ........................................ 3
2.1 Python语言简介 ........................................ 3 2.2 Python语言特性 ....................................... 4
3 设计思路和编程 ......................................... 5
3.1 设计思路 ............................................. 5 3.2 设计流程图 ........................................... 5 3.3 编程 ................................................. 6 3.3.1 Opencv模块引用 ..................................... 6 3.3.2 Highgui模块引用 .................................... 6 3.3.3 Image模块引用 ...................................... 6 3.3.4 Os模块引用 ......................................... 6 3.4 python与C混合编程接口问题 ........................... 6
4 功能和可行性分析 ....................................... 9 5 结论 .................................................. 11
参考文献 ................................................. 12 致谢 .................................................... 13 附录 ...................................................... 14
1 引 言
信息和网络技术的飞速发展, 使得图像信息量激增,人们对检索图像信息的需求也日益增加。作为一种纯面向对象的动态脚本语言, python 已经在网络应用软件、系统配置软件及科学研究领域获得了广泛的使用,因此本文介绍了一种基于Python的利用Linux平台下Python与C++/C++语言的两种Os.systeam接口, 实现了python与VC的混合语言编程,并将这种软件结构应用于一套图像采集器系统。实际应用表明, 这种结构可以充分发挥Python编程的灵活简单和VC执行效率高的优点, 克服Python执行效率低和VC开发效率低的缺点,实现了软件开发效率和执行效率的双赢。
当今社会,科技发达成长了人们的懒惰性,利用各种机器设备做家务,利用远程监控来遥控远在千里之外的东西,总之一切事务趋于自动化。图像采集器(Image acquisition),是指通过摄像头采集图像信息,批量获取图像信息,能够根据图像信息获取到物体运动的位移和执行的动作,这样采集到的图像信息分析更加的准确,可靠性更强。本文设计了一种不用点击鼠标,不用按下键盘,只需要轻轻的挥挥手就可以操纵PPT的翻页的软件--Airppt, 解决了以往操作PPT的繁琐性,满足了人们对方便快捷生活的向往,并且提升了宣讲效率。有了airppt,老师上课讲课就不用总在电脑旁用鼠标控制ppt,这样就加大了老师与学生的互动性。
Airppt利用的原理就是图像采集器,它在国内外应用广泛,并且发展迅速,在国外它应用于军事,医疗,监控等领域。在国内还没有太多的应用,据目前了解到的在国内一般应用于监控的比较多,还有运用于娱乐的,通过采集器将用户的身形采集到屏幕中并且可以采集到你的动作与里面的事物发生互动。
本文通过对模块应用环境及功能的认证,确定了应用opencv模块处理图像,huigui模块来识别并调用摄像头采集信息,image模块处理采集到的图像大小等,os模块引入外部C扩展,在利用python代码将这些功能连接起来,最终实现了airppt的相关协议所设定的功能。
本文主要研究内容如下:
(一)opencv模块的安装调用及作用; (二)Image模块的用法安装; (三)Huigui模块的用法及调用; (四)Python外部C扩展的引入;
本设计采用python程序编写,硬件只需一个外置摄像头作为采集信息的工具。
0
2 Python语言介绍
2.1 Python语言简介 Python是一种解释型、交互式、纯面向对象的脚本程序设计语言,它结合了多种不同语言最经典的设计原则和思想。自1990年Guido van Rossum 发明Python以来,它的简单、清晰和优雅吸引了广泛的关注,Python 社区以每两年翻番的速度迅速扩张。例如:Python自google创建之初就是其主要网络应用开发工具;美国国家航空航天局使用Python开发CAD/CAE/PDM资源库, 在此基础上建设新一代协作式工程环境NGCEE(Next Generation Collaborative Engineering Environment);美国国家研究推进机构CNRI(Corporation for National Research Initiatives )1999年启动的Computer Programming for Everybody(C4PE)计划将Python作为未来程序设计语言向教育机构推广; Microsoft于2005年推出Iron Python 的开源项目, 在Visual Studio 2005 中接纳Python语言作为唯一动态脚本语言开发.net应用程序[16]。 2.2 Python语言特性
相比其他任何程序设计语言, Python允许软件设计者更关注于问题本身而不是实现细节, 其主要特性有:
(l) 面向对象 Python 是一种纯面向对象语言, 支持面向对象的所有机制, 这使它可以应用于大型软件项目开发。
(2) 虚拟机机制 Python代码编译为字节码在虚拟机上执行,这种类似Java的机制使Python具有平台无关性, 并获得比其他脚本语言更快的执行效率。
(3) 内置高级数据类型 Python中的元组、列表、数组、字典等高级数据类型具有极强的表达能力, 几乎任意复杂的对象在Python中均可以以最简单的方式进行描述。 (4) 交互式开发方式和单元测试 类似Foxpro 和 Matlab ,Python 提供了内置交互式窗口, 可以允许开发者边尝试边书写代码, 极大地提高了软件开发效率。另外单元测试机制在每个类代码完成后均可以单独执行、测试。这两种开发方式使得”搭积木” 式的软件开发过程成为现实。
(5) 动态执行特性 类似早期Dbase系统的宏代替、Python允许动态构造程序代码并执行, 使得软件中的重复代码得到简化。
(6) 高度可扩展性Python 语言本身只实现了一个小内核,其强大功能体现在大量的扩展模块。计算机科学领域几乎所有的已知算法均可找到Python语言扩展。不仅c / c + + 编写的程序可以方便地改写成Python扩展模块,而且Python自身也可以被嵌人到口C/C++项目中。
(7) 平台无关性Python字节码可以不经修改跨平台运行在所有主流操作系统上, 甚至包括Pocket PC 、Palm等嵌入式系统[1]。
1
3 设计思路和编程
3.1 设计思路
本文的设计思路是:
(1).编辑器的选择:python固定的编辑器是vim编辑器,这个编辑器很容易实
现脚本的创建保存和运行,能大大提高程序员的编程速度,它还有一个非常强大的功能,在电脑发生意外突然关机的情况下,这个编辑器就会自动保存你之前你没有保存的程序。这样就不会丢失有用的信息
(2).图像坐标的产生:设计中采用的是判断红点的个数,红点指定义的一个红色RGB色调,当我们动作时就会采集到红点动作的个数,通过判断红点的个数,来判断鼠标是否要动作,通过动作的位移来判断鼠标动作的方向。
(3).图像的处理:图像的处理是用Image模块处理的,可改变图像的大小,像素等,这样就可以把采集到的图像信息处理成所需要的。
(4).摄像头接口的处理:这里用的是Opencv模块来实现图像的坐标的采集,opencv的设计意图是为用户提供简单易用的图形用户接口。
(5).动作的反馈:当你用手在摄像头前挥动时,该动作就会被程序所识别,然后发出相应的相应。
(6).功能的设定:这些功能是由C语言写的,然后引入os模块,通过os模块将写好的C功能引入到脚本语言中去。然后再用判断语句,当程序符合哪种条件是就会执行哪些C功能。
2软件编程思想
本文的软件编程思想是:摄像头要采集手指运动的图像,来判断执行什么样的动作,那么摄像头怎么样才能识别你的手指呢?本文在这里是用颜色(R,G,B)来解决的,本设计把手指用(R,G,B)定义成红点,现在红点就代表手指,应用指令控制摄像头来采集红点。这是本设计的第一步打算。
第二步,需要采集的目标已经确定,接下来就是判断红点的运动方向和位移,我这里是通过判断红点运动的方向来确定对airppt执行什么样的动作;通过红点的位移和个数来确定airppt是否要执行该动作,本设计在这里定义的是位移大于70mm,红点个数大于20个时airppt才会执行相应的动作。因为动画都是由一张张图片组成的,假如不判断位移,当你不动作时它也会自动采集红点,进而发生动作反应,这样就出错了。这里的中心思想就是if判断语句,事件处理系统和for循环语句。
3.2 设计流程图
本文定义的参照物是一个用代码编写的RGB红点。并且分析每张图片的红点数,当红点数达到70个时将该图片列为有效图片,否则无效。
2
开通过摄像 遍历该图片判断图像N 红点数目是 无效图 Y 有效 图 3-1 设计全局架构结构图
图3-1是本设计的全局架构结构图,是本设计得以实现的最重要部分,对获取到的图片分析是否有效,接下来则是细节部分,分析两张最近的有效图片中心点位置来判断左翻页还是右翻页还是不翻页。 找到有效图片中所有 对比两张最近的 得到两次对比位移大小是Y 有效动 位移正 右翻N 无效动作,负 左3
图3-2 有效图片筛选架构
图
图3-2实现的是对有效图片进行分析,通过判断最近两张有效图片的中心位置点的位置关系来决定ppt是否执行动作,执行动作时是左翻页还是右翻页等一系列功能。完成这一步所需的程序如下:
if len(list2)>20: #如果列表中坐标个数大于20个 if len(list2) > 20:
tn3=list2[-1][0]-list2[0][0] #将横坐标的长度赋值给tn3 tn4=list2[-1][1]-list2[0][1] #将纵坐标的长度赋值给tn4 while len(list2)>3: #
list2.pop(0)
#print '..........................',tn3 #print tn4
if tn4>50 and tn3>-50 and tn3<50:
os.system('./a.x 71') os.system('./a.x 9') os.system('./a.x 114') #print '[right]' #time.sleep(0.8) os.system('./a.x 113') #print '[left]' #time.sleep(0.8)
if tn4<-50 and tn3>-50 and tn3<50: if tn3<-100:
if tn3>100:
每次判断完一张图片后,就把列表中的红点数目与坐标等都删除。这样就不会对下一张图片造成影响。
3.3 编程
在开始编程之前要先确定编程工具,本设计用的是vim编辑器。这个编辑器的最大优势就是,在意外情况下可以自动保存代码。当代码错误时,会提示错误信息,能够及时进行修改。以下是本设计的部分代码: #!/usr/bin/python
4
这是解释python语言在电脑中的位置 #-*- coding: UTF-8 -*- 这是python脚本中的中文解释器
3.3.1 opencv模块
import opencv
从外部引入opencv模块
本设计用到的opencv代码如下:
cam=highgui.cvCreateCameraCapture(0) #定义摄像头端口位置 tn1=opencv.adaptors.Ipl2PIL(im) #采集到的图像定义为tn1
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发对实时的图像处理、计算机视觉以及模式识别程序。OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE的接口。这些语言的API接口函数可以通过在线文档获得。现在也提供对于C#,Ch,Ruby的支持。 安装Opencv所需的依赖工具: cmake, gtk+*, ffmpeg*, gstreamer* 编译安装: $ cd $DIR $ mkdir release
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON .. $ make -j $ make install
3.3.2 highgui模块
from opencv import highgui
从opencv图形处理模块中引入highgui模块。HighHGUI只是用来建立快速软件原形或是试验用的。它的设计意图是为用户提供简单易用的图形用户接口。 本设计用到的highgui模块如下:
im=highgui.cvQueryFrame(cam);这里highgui用来采集图像
5
OpenCV为了用于生产级别的应用而设计的。HighHGUI只是用来建立快速软件原形或是试验用的。它的设计意图是为用户提供简单易用的图形用户接口。通常,你需要读入源图像到你的程序或者输出结果图像到磁盘。此外,需要用简单的方法显示图像到监视器并且向用户提供输入.如果你试图创建最终用户的应用,请不要使用HighGUI 。 相对来说,应当为你的目标系统参考特定的函数库。比如:HighGUI中的摄像头输入方法(cvCreateCameraCapture)是为了易用而设计的。然而,并不意味着它能够对热插拔作出反应等等[2]。
3.3.3 image模块
import Image
引入图像模块,对采集到的图像进行处理 本设计用到的image模块代码:
tn1=tn1.resize((160,160)) #重新设置采集到的图像的大小
size1=tn1.size #将重新设置的图像的大小值定义位size1 pbb=tn1.load() #载入图像
PythonWare公司提供了免费的图像处理工具包PIL(Python Image Library),该软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等 等。虽然在这个软件包上要实现类似MATLAB中的复杂的图像处理算法并不太适合,但是Python的快速开发能力以及面向对象等等诸多特点使得它非常适 合用来进行原型开发。在PIL中,任何一副图像都是用一个Image对象表示,而这个类由和它同名的模块导出,因此,要加载一副图像,最简单的形式是这样的:import Image img = Image.open(“dip.jpg”)
注意:第一行的Image是模块名;第二行的img是一个Image对象; Image类是在Image模块中定义的。关于Image模块和Image类,切记不要混淆了。现在,我们就可以对img进行各种操作了,所有对img的 操作最终都会反映到到dip.img图像上。这个模块提供了一个常用的图像增强工具箱。可以用来进行色彩增强、图像叠加、改变图像大小、亮度增强、对比度增强、图像尖锐化等等增强操作。所有操作都有相同形式的接口——通过相 应类的enhance方法实现:色彩增强通过Color类的enhance方法实现;亮度增强通过Brightness类的enhance方法实现;对比度增强通过Contrast类的enhance方法实现;尖锐化通过Sharpness类的enhance方法实现。所有的操作都需要向类的构造函数传递 一个Image对象作为参数,这个参数定义了增强作用的对象。同时所有的操作都返回一个新的Image对象。如果传给enhance方法的参数是1.0, 则不对原图像做任何改变,直接返回原图像的一个拷贝。
6
3.34 os模块
import os
引入os模块,os模块提供了一个统一的操作系统接口函数 本设计引用os模块所实现的代码如下:
os.system('./fake-mouse-move.x 0 ' + str(m) + ' ' + str(n))#引入用C语言编写的程序 Python C 扩展
一个C 源程序中的算法开发测试完毕后,可以改写为python C 扩展暴露给Python程序使用。例如将C源程序中的foo函数转换为python语言的扩展, 需要以下步骤:
(l) 包含python.h 的头文件, 连接pythonXX.lib(XX 是python版本号),其中Python.h 定义了所有Python的内部数据结构和C的API函数原型。 (2) 定义一个此扩展模块的异常对象。
(3) 实现一个客户端函数, 这个函数负责将传入的python对象参数转换为C对象并用这些参数调用foo函数, 最后将结果转换为python对象返回,如果出现错误,则设置异常对象并返回Null。这个客户端函数充当python和C程序之间的参数调度者。
(4 ) 填写一个扩展模块定义的所有函数名与客户端函数对应关系表, 实现python程序和C 程序的映射。
(5) 完成扩展模块的初始化函数[11]。
3.4 C语言与Python语言混合编程的接口问题
整个软件编程主要是用Python语言, C 语言只占了一小部分,因此设计中,将用C语言编的求解器做成一个扩展模块,嵌入到Python语言中。下面给出了在本软件中的接口设计方法。
第一步,将用C语言编写的代码在C 编译器中编译调试成功;
第二步, 在C代码中加入# include “Python. c”这条语句, 告诉C编译器将要调用Python 库函数。
第三步, 在C代码中的主函数加上\"PyObject * Module_func( )\"Python打包器,此打包器的作用是把接受到的Python类型的值转换成C语言数据类型的值,并用这些值做为实参,放到相关的函数中去计算, 计算完成后, 如果要将结果输出到Python编写处理器中, 必须由打包器接受计算结果并把它们转换成Python语言数据。
经过以上步骤即可完成C语言和python语言的混合编程。Python中将这些步骤封装成了一个方法,即Os.system(),但是python中识别C代码需要这样的格式:os.system(‘./...’)[8]。
7
4 功能分析及预期效果
一、 功能分析
利用手指控制ppt实现的功能有:左翻页,右翻页,开启全屏,退出全屏
系统主要由Python开发,由于它自带的模块较多,所以要根据需求来调用其中对我们开发airppt有用的模块,需要熟悉python中各个模块的作用和用法。airppt的原理是根据坐标和像素来采集图像信息,然后返回到程序中,通过图像处理工具对采集到的图像进行处理,最后形成动作,来实现airppt的功能。
本设计首先要用到图像处理工具是Opencv, 从opencv图形处理模块中引入highgui模块。HighHGUI只是用来建立快速软件原形或是试验用的。它的设计意图是为用户提供简单易用的图形用户接口;引入图像模块Image对采集到的图像进行处理,引入os模块提供一个统一的操作系统接口函数;引入时间模块来获取本地时间。
其次要熟悉python的编程方法和获取坐标的原理,以及解决接口问题,这样就需要多看python方面的资料,并且要选择编辑器来进行代码编写。代码编写要求:掌握python的基本概念和基本的理论知识;熟练编程工具的使用方法;对程序进行初步的编写和调试。 现在我只是初步实现了airppt的部分功能,接下来还要对它进行调试、整合,扩充它的功能,直至其能实现手动控制ppt。 二、 预期效果
通过测试,摄像头可以获取到手指的信息,光标并且会跟随手指的运动而动作,目前还没有实现虚拟点击的效果,而且这个版本的光标动作不太稳定,会在光标附近晃动,所以本设计开发了第二个版本,第二个版本不能显示光标动作的痕迹,但是能控制ppt动作,识别效果不太明显,经分析这与摄像头像素有关。不过还好,本设计的预期功能基本都实现了。以后还会增加在新功能,优化已有的功能。下面是程序运行截图,图4-1是执行代码后的截图,图4-2是操作ppt翻页的程序运行截图。
8
图4-1 程序运行截图
图 4-2 程序执行操作截图
9
5 结论
在此次毕设中,我学到了很多东西,并且让我疯狂的喜欢上了编程,这段时间感觉的过的特别充实,这几个月比大学四年学的东西都多,当然也有一些值得改进以借鉴的地方,现总结如下:
1、需求设计:在前期查阅了相关的资料,对python的原理有一定的了解之后,就开始着手对设计进行需求分析。并且试着画需求的流程图,可是经几番修改再修改,还是没能如愿,这说明自己在这方面还有很多需要提高的地方。于是就画出了双面板,但是我没有充分的考虑到这些功能的实际情况,使得做出的需求很不好实现,但是最后还是做出了切合实际的需求分析流程,在老师的教导下学会了制作需求分析流程的方法。
2、环境配置:在做出了需求分析后,将相应的软件下载之后,有的软件却怎么也装不上,也不能引入到程序中。用print来分行检查代码,我发现有的安装包需要依赖关系,或者是有的需要源码安装,非常费事,最后还是有一两个包装不上,终于在老师的帮助下所有包都装上了,原来需要外源才可以安装。我想到了可能是这个原因,但是不知道怎么去配置外源,这也让我认识到要运用合理有效的方法去迎难而上,而不是想当然,问题很有可能就是出在这上面。
3、代码编写:查阅了大量的资料,有了这方面的思路后就开始编写代码了,获取摄像头设置,接收采集信息的设置,但是意外的情况的判断都让我觉得有些难以实现,特别是判断参照物是否动作了,是向那个方向动作的等,获取与处理的联调实现起来确实不难么容易,还需要对编程思路进一步的认识。
1 0
参考文献
[1] (丘恩Chun)(W.J.). Python核心编程(第2版)[M]. 人民邮电出版社 .2008.
[2] Doug Hellmann . Python标准库[M]. 机械工业出版社. 2012.
[3] Paul Gries . Python编程实践[M]. 机械工业出版社. 2011.
[4] Mark Lutz . Programming Python[M] 出版社. 2011.
[5] 赫特兰 著 .Python基础教程(第2版)[M]. 人民邮电出版社. 2010.
[6] 鲁特兹 . Python学习手册(第3版)[M]. 机械工业出版社. 2011.
[9] 李艳红,李海华.传感器原理及其应用[M].北京:北京理工大学出版社,2010.
[10] 谭浩强.C程序设计北京[M].北京:清华大学出版社,1999.
[11] 霍顿C语言入门经典(第4版)[M].北京:清华大学出版社,2008.
[12] 张若愚Python科学计算[M]:清华大学出版社,2012.
1 1
[13] James PaynePython编程入门经典 [M]:清华大学出版社,2011.
[14] 巴里深入浅出Python[M].北京:东南大学出版社,2011.
[15] Y.Daniel LiangPython语言程序设计[M]:机械工业出版社,2013.
[16] Guido van Rossum Python Tutorial[J]:Python Software Foundation,2006.
1 2
致 谢
这次在实验室的经历是我在大学最后一次了,想想从大一开始,有过多少次的实验课上看着同学都快走完了,自己还没什么头绪的焦头烂额,现在想起来竟是那么的可笑,却又带着几分回忆和伤感。
我很珍惜这次做毕设的机会,不仅仅是我要交出大学阶段的学习成果,更是对自己能力与知识的检测。在此,衷心地感谢我的指导教师。在我做毕业设计阶段,他自始至终给予了我精心的指导和严格的要求,为本论文的顺利完成倾注了大量的心血。老师为人谦逊,热心帮助学生,在我们做毕设遇到问题的时候总能够不厌其烦的耐心予以指导,在此我要衷心的对老师说声谢谢。在她的热心指导下,我学到的不仅仅是知识,还有做人上的严谨、独立,用科学的头脑武装自己。
回首大学四年的时光,我要感谢那些帮助过我的人,也要感谢那些伤害过我的人,是他们让我对自我有了更为清醒的认识,不再沉醉于自我满足之中,这又何尝不是这一种收获呢。其实,最应该感谢的还是自己,因为路是自己走出来的,有美景,也有荆棘,但重要的是,我会以更加稳健的步伐,朝着未来勇敢的走下去。
反思这一阶段,体会最深的一点就是,编程就是要有清晰的思路,这样编起来才有目的性,思维的不灵活导致有很多本该轻松理解的东西走了弯路,这并不是我理想中的状态。硬件也好,软件也罢,都需要系统的理论知识的支撑。徒有皮毛而不深入是不行的,只有有科学理性的方法去对待,遇到问题能镇定的去沿着正确的轨道去思考进而解决问题是在今后的学习和工作中要时常提醒自己的,这也是毕设给我带来的最大收获。感谢我敬爱的老师给我这次机会。
1 3
附 录
从毕设中得到了一些课外新知识,虚拟机不能用真机自带的摄像头。这也是我毕设中遇到的最棘手的问题,我最后的解决方法是给虚拟机安装USB然后外置一个摄像头,这样才把问题解决了。我认为这是一个很有价值的知识点,所有我把它记录在这里。
以下是本设计的完整代码: import time
list2=[] #定义一个空列表
cam=highgui.cvCreateCameraCapture(2) #定义摄像头端口位置 while True: 序
1 4
im=highgui.cvQueryFrame(cam)
tn1=opencv.adaptors.Ipl2PIL(im) #采集到的图像定义位tn1 tn1=tn1.resize((160,160)) #重新设置采集到的图像的大小
size1=tn1.size #将重新设置的图像的大小值定义位size1 pbb=tn1.load() #加载重新设置大小后的图像tn1 c=0
d=0 #定义位置初值c:横坐标,d:纵坐标 e=0 ; #定义红点的初始值为0 for i in range(size1[0]):
for j in range(size1[1]): #遍历图像中的每个像素点
if pbb[i,j][0]>100 and pbb[i,j][0]>2*pbb[i,j][1] and pbb[i,j][0]>2*pbb[i,j][2]:
c+=i
d+=j #如果该像素点符合我们所定义的红点的e+=1 #同时像素点数加1(可求出我们采集到的
#定义动作的参照物,这里我将它定义为'红点'
特征,则将此位置加到横纵坐标上? 这张图片中所有的红点数)
#print '-----------------------------------------',e#如果红点数大于70个 if e>70: #如果红点数大于70个
list2.append((c/e,d/e)) #将横纵坐标的平均值加入先前定义的空列表m=(160-list2[-1][0])*1280/140-100 #鼠标移动 n=list2[-1][1]*1024/140-100 # # print m,n
os.system('./fake-mouse-move.x 0 ' + str(m) + ' ' + str(n))#引入用C语言编写的程
中?
# if len(list2)>20: #如果列表中坐标个数大于20个 if len(list2) > 20:
tn3=list2[-1][0]-list2[0][0] #将横坐标的长度赋值给tn3 tn4=list2[-1][1]-list2[0][1] #将纵坐标的长度赋值给tn4 while len(list2)>3: #
list2.pop(0)
#print '..........................',tn3 #print tn4
if tn4>50 and tn3>-50 and tn3<50: os.system('./a.x 71') if tn4<-50 and tn3>-50 and tn3<50: os.system('./a.x 9') if tn3<-100:
os.system('./a.x 114') #print '[right]' #time.sleep(0.8) if tn3>100:
os.system('./a.x 113') #print '[left]'
#time.sleep(0.8)
elif len(list2)>1:
tn3=list2[-1][0]-list2[0][0] tn4=list2[-1][1]-list2[0][1] list2=[]
#print '...........................',tn3 #print tn4
if tn4>50 and tn3<50 and tn3>-50: os.system('./a.x 71') if tn4<-50 and tn3<50 and tn3>-50: os.system('./a.x 9') if tn3<-100:
os.system('./a.x 114') #print '[right]'
#time.sleep(0.8)
if tn3>100:
1 5
os.system('./a.x 113') #print '[left]'
#time.sleep(0.8)
del tn1 del pbb del im del c del e del d
1 6
因篇幅问题不能全部显示,请点此查看更多更全内容