文档库 最新最全的文档下载
当前位置:文档库 › 基于python开发的图像采集器之Airp_pt_本科毕业设计

基于python开发的图像采集器之Airp_pt_本科毕业设计

基于python开发的图像采集器之Airp_pt_本科毕业设计
基于python开发的图像采集器之Airp_pt_本科毕业设计

河北大学工商学院

本科生毕业论文(设计)

题目:基于python开发的图像

采集器之Airppt

线

基于python开发的图像采集器之Airppt

摘要

本文设计了一个基于python开发的图像采集器,该设计通过普通的USB数字摄像头来捕捉和获取实时图像,利用linux系统下的python脚本中的Opencv图像处理模块和

Huigui摄像头识别模块实现了采集图像信息并对图像信息进行分析的功能,该设计具有可

靠性高、灵活稳定、低成本的特点,基于python开发的图像采集器将采集到的数据输入到

python脚本进行分析处理,并从外部引入C编程,根据不同的处理结果,系统将会调用不

同的C程序,从而实现对ppt的翻页。本文系统介绍了用python开发的图像采集器基本满

足设计要求。

关键词:图像采集器;Python语言;Python C扩展;混合语言编程

线

Development the image acquisition based on python

ABSTRACT

Design one based on python development of image capture device, the design by ordinary USB digital camera head to capture and access to real-time image using python script in linux system Opencv image processing module and Huigui camera head identification module to achieve the capture image informationand image information analysis function, the design has high reliability, flexible and stable, low-cost, will be collected based on the the python development of image acquisition data input to a python script analysis and processing, from the outside to the introduction of the C programming, depending on the processing results, the system will call the C program, in order to achieve the next page of ppt. We introduce the basic meet the design requirements with the the python development of image acquisition.

Key words:Image acquisition;Python;Python C extension;Mixed-language programming

目录

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程序编写,硬件只需一个外置摄像头作为采集信息的工具。

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]。

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个时将该图片列为有效图片,否则无效。

图3-1 设计全局架构结构图

图3-1是本设计的全局架构结构图,是本设计得以实现的最重要部分,对获取到的图片分析是否有效,接下来则是细节部分,分析两张最近的有效图片中心点位置来判断左翻页还是右翻页还是不翻页。

图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')

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)

每次判断完一张图片后,就把列表中的红点数目与坐标等都删除。这样就不会对下一张图片造成影响。

3.3 编程

在开始编程之前要先确定编程工具,本设计用的是vim编辑器。这个编辑器的最大优势就是,在意外情况下可以自动保存代码。当代码错误时,会提示错误信息,能够及时进行修改。以下是本设计的部分代码:

#!/usr/bin/python

这是解释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用来采集图像

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,则不对原图像做任何改变,直接返回原图像的一个拷贝。

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.4C语言与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]。

4 功能分析及预期效果

一、功能分析

利用手指控制ppt实现的功能有:左翻页,右翻页,开启全屏,退出全屏系统主要由Python开发,由于它自带的模块较多,所以要根据需求来调用其中对我们开发airppt有用的模块,需要熟悉python中各个模块的作用和用法。airppt的原理是根据坐标和像素来采集图像信息,然后返回到程序中,通过图像处理工具对采集到的图像进行处理,最后形成动作,来实现airppt的功能。

本设计首先要用到图像处理工具是Opencv,从opencv图形处理模块中引入highgui模块。HighHGUI只是用来建立快速软件原形或是试验用的。它的设计意图是为用户提供简单易用的图形用户接口;引入图像模块Image对采集到的图像进行处理,引入os模块提供一个统一的操作系统接口函数;引入时间模块来获取本地时间。

其次要熟悉python的编程方法和获取坐标的原理,以及解决接口问题,这样就需要多看python方面的资料,并且要选择编辑器来进行代码编写。代码编写要求:掌握python的基本概念和基本的理论知识;熟练编程工具的使用方法;对程序进行初步的编写和调试。

现在我只是初步实现了airppt的部分功能,接下来还要对它进行调试、整合,扩充它的功能,直至其能实现手动控制ppt。

二、预期效果

通过测试,摄像头可以获取到手指的信息,光标并且会跟随手指的运动而动作,目前还没有实现虚拟点击的效果,而且这个版本的光标动作不太稳定,会在光标附近晃动,所以本设计开发了第二个版本,第二个版本不能显示光标动作的痕迹,但是能控制ppt动作,识别效果不太明显,经分析这与摄像头像素有关。不过还好,本设计的预期功能基本都实现了。以后还会增加在新功能,优化已有的功能。下面是程序运行截图,图4-1是执行代码后的截图,图4-2是操作ppt 翻页的程序运行截图。

图4-1 程序运行截图

图 4-2 程序执行操作截图

5 结论

在此次毕设中,我学到了很多东西,并且让我疯狂的喜欢上了编程,这段时间感觉的过的特别充实,这几个月比大学四年学的东西都多,当然也有一些值得改进以借鉴的地方,现总结如下:

1、需求设计:在前期查阅了相关的资料,对python的原理有一定的了解之后,就开始着手对设计进行需求分析。并且试着画需求的流程图,可是经几番修改再修改,还是没能如愿,这说明自己在这方面还有很多需要提高的地方。于是就画出了双面板,但是我没有充分的考虑到这些功能的实际情况,使得做出的需求很不好实现,但是最后还是做出了切合实际的需求分析流程,在老师的教导下学会了制作需求分析流程的方法。

2、环境配置:在做出了需求分析后,将相应的软件下载之后,有的软件却怎么也装不上,也不能引入到程序中。用print来分行检查代码,我发现有的安装包需要依赖关系,或者是有的需要源码安装,非常费事,最后还是有一两个包装不上,终于在老师的帮助下所有包都装上了,原来需要外源才可以安装。我想到了可能是这个原因,但是不知道怎么去配置外源,这也让我认识到要运用合理有效的方法去迎难而上,而不是想当然,问题很有可能就是出在这上面。

3、代码编写:查阅了大量的资料,有了这方面的思路后就开始编写代码了,获取摄像头设置,接收采集信息的设置,但是意外的情况的判断都让我觉得有些难以实现,特别是判断参照物是否动作了,是向那个方向动作的等,获取与处理的联调实现起来确实不难么容易,还需要对编程思路进一步的认识。

参考文献

[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.

[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.

致谢

这次在实验室的经历是我在大学最后一次了,想想从大一开始,有过多少次的实验课上看着同学都快走完了,自己还没什么头绪的焦头烂额,现在想起来竟是那么的可笑,却又带着几分回忆和伤感。

我很珍惜这次做毕设的机会,不仅仅是我要交出大学阶段的学习成果,更是对自己能力与知识的检测。在此,衷心地感谢我的指导教师。在我做毕业设计阶段,他自始至终给予了我精心的指导和严格的要求,为本论文的顺利完成倾注了大量的心血。老师为人谦逊,热心帮助学生,在我们做毕设遇到问题的时候总能够不厌其烦的耐心予以指导,在此我要衷心的对老师说声谢谢。在她的热心指导下,我学到的不仅仅是知识,还有做人上的严谨、独立,用科学的头脑武装自己。

回首大学四年的时光,我要感谢那些帮助过我的人,也要感谢那些伤害过我的人,是他们让我对自我有了更为清醒的认识,不再沉醉于自我满足之中,这又何尝不是这一种收获呢。其实,最应该感谢的还是自己,因为路是自己走出来的,

有美景,也有荆棘,但重要的是,我会以更加稳健的步伐,朝着未来勇敢的走下去。

反思这一阶段,体会最深的一点就是,编程就是要有清晰的思路,这样编起来才有目的性,思维的不灵活导致有很多本该轻松理解的东西走了弯路,这并不是我理想中的状态。硬件也好,软件也罢,都需要系统的理论知识的支撑。徒有皮毛而不深入是不行的,只有有科学理性的方法去对待,遇到问题能镇定的去沿着正确的轨道去思考进而解决问题是在今后的学习和工作中要时常提醒自己的,这也是毕设给我带来的最大收获。感谢我敬爱的老师给我这次机会。

附录

从毕设中得到了一些课外新知识,虚拟机不能用真机自带的摄像头。这也是我毕设中遇到的最棘手的问题,我最后的解决方法是给虚拟机安装USB然后外置一个摄像头,这样才把问题解决了。我认为这是一个很有价值的知识点,所有我把它记录在这里。

以下是本设计的完整代码:

import time

list2=[] #定义一个空列表

cam=highgui.cvCreateCameraCapture(2) #定义摄像头端口位置

while True:

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:

os.system('./a.x 113')

#print '[left]'

#time.sleep(0.8)

del tn1

del pbb

del im

del c

python数据分析过程示例

python数据分析过程示例

引言 几年后发生了。在使用SAS工作超过5年后,我决定走出自己的舒适区。作为一个数据科学家,我寻找其他有用的工具的旅程开始了!幸运的是,没过多久我就决定,Python作为我的开胃菜。 我总是有一个编写代码的倾向。这次我做的是我真正喜欢的。代码。原来,写代码是如此容易! 我一周内学会了Python基础。并且,从那时起,我不仅深度探索了这门语言,而且也帮助了许多人学习这门语言。Python是一种通用语言。但是,多年来,具有强大的社区支持,这一语言已经有了专门的数据分析和预测模型库。 由于Python缺乏数据科学的资源,我决定写这篇教程来帮助别人更快地学习Python。在本教程中,我们将讲授一点关于如何使用Python 进行数据分析的信息,咀嚼它,直到我们觉得舒适并可以自己去实践。

目录 1. 数据分析的Python基础 o为什么学Python用来数据分析o Python 2.7 v/s 3.4 o怎样安装Python o在Python上运行一些简单程序2. Python的库和数据结构 o Python的数据结构 o Python的迭代和条件结构

o Python库 3. 在Python中使用Pandas进行探索性分析 o序列和数据框的简介 o分析Vidhya数据集——贷款的预测问题 4. 在Python中使用Pandas进行数据再加工 5. 使用Python中建立预测模型 o逻辑回归 o决策树 o随机森林 让我们开始吧 1.数据分析的Python基础 为什么学Python用来数据分析 很多人都有兴趣选择Python作为数据分析语言。这一段时间以来,我有比较过SAS和R。这里有一些原因来支持学习Python:

python语言经典基础级案例(含源代码)

python语言经典案例(基础级) 案例1: 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 程序分析:利用while 或for 语句,条件为输入的字符不为'\n'。 实例- 使用while 循环 #!/usr/bin/python # -*- coding: UTF-8 -*- import string s = raw_input('请输入一个字符串:\n') letters = 0 space = 0 digit = 0 others = 0 i=0 while i < len(s): c = s[i] i += 1 if c.isalpha(): letters += 1 elif c.isspace(): space += 1 elif c.isdigit(): digit += 1 else: others += 1 print'char = %d,space = %d,digit = %d,others = %d' % (letters, space,digit,others) 实例- 使用for 循环 #!/usr/bin/python

# -*- coding: UTF-8 -*- import string s = raw_input('请输入一个字符串:\n') letters = 0 space = 0 digit = 0 others = 0 for c in s: if c.isalpha(): letters += 1 elif c.isspace(): space += 1 elif c.isdigit(): digit += 1 else: others += 1 print'char = %d,space = %d,digit = %d,others = %d' % (letters, space,digit,others) 以上实例输出结果为: 案例2: 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 程序分析:无 程序源代码:

基于Python的Abaqus二次开发实例讲解

基于Python的Abaqus二次开发实例讲解 (asian58 2013.6.26) 基于Python的Abaqus的二次开发便捷之处在于: 1、所有的代码均可以先在Abaqus\CAE中操作一遍后再通过rp文件读取,然后再在此基础上进行相应的修改; 2、Python是一种解释性语言,读起来非常清晰,因此在修改程序的过程中,不存在程序难以理解的问题; 3、Python是一种通用性的、功能非常强大的面向对象编程语言,有许多成熟的类似于Matlab函数的程序在网络上流传,为后期进一步的数据处理提供了方便。 为了更加方便地完成Abaqus的二次开发,需进行一些相关约定: 1、所有参数化直接通过点的坐标值进行,直接对几何尺寸的参数化反而更加繁琐; 2、程序参数化已不允许在模型中添加太多的Tie,因此不同零部件的绑定直接通过共节点来进行,这就要求建模方法与常规的建模方法有所区别。思路如下: 将一个整机拆成几个大的Part来建立,一个Part中包含许多零件,这样在划分网格式时就可以自动实现共节点的绑定。不同的零件可通过建立不同的Set来进行区分,不同Part 的绑定可以通过Tie来实现。将一个复杂的结构拆成几个恰当的Part来建立,一方面可以将复杂的模型简单化,使建立复杂模型成为可能;另一方面,不同的Part可单独调用,从而又可实现程序的模块化,增加程序的适应范围,延长程序的使用寿命,也方便后期程序的维护和修改。 3、通过py文件建立起的模型要进行参数优化,已不适合采用Isight中Abaqus模块,需要用到Isight的Simcode模块。 下面详细解释一个臂架的py文件。 #此程序用来绘制臂架前段 #导入相关模块 # -*- coding: mbcs -*- from abaqus import * from abaqusConstants import * #定义整个臂架的长、宽、高 L0=14300 W0=1650 H0=800

(完整版)Python100个小例子.docx

一、 Python 练习实例 1 题目:有四个数字: 1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位、十位、个位的数字都是 1、 2、 3、4。组成所有的排列后再去掉不满足条件的排列。 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if (i != k) and (i != j) and (j != k): print(i, j, k) 二、 Python 练习实例 2 题目:企业发放的奖金根据利润提成。利润(I) 低于或等于10 万元时,奖金可提10%;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10 万元的部分,可提成 7.5%;20 万到 40 万之间时,高于 20 万元的部分,可提 成5%;40 万到 60 万之间时高于 40 万元的部分,可提成 3%;60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5%,高于 100 万元时,超过 100 万元的部分按 1%提成,从键盘输入当月利润 I ,求应发放奖金总数? 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- i = int(input('净利润:')) arr = [1000000, 600000, 400000, 200000, 100000, 0] rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1] r = 0 for idx in range(0, 6): if i > arr[idx]: r += (i - arr[idx]) * rat[idx] print((i - arr[idx]) * rat[idx]) i = arr[idx] print(r) 三、 Python 练习实例 3 题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平 方数,请问该数是多少? 程序分析: 假设该数为 x 。 1、则: x + 100 = n2, x + 100 + 168 = m2 2、计算等式: m2 - n2 = (m + n)(m - n) = 168

Python100个小例子

一、Python 练习实例1 题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if (i != k) and (i != j) and (j != k): print(i, j, k) 二、Python 练习实例2 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- i = int(input('净利润:')) arr = [1000000, 600000, 400000, 200000, 100000, 0] rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1] r = 0 for idx in range(0, 6): if i > arr[idx]: r += (i - arr[idx]) * rat[idx] print((i - arr[idx]) * rat[idx]) i = arr[idx] print(r) 三、Python 练习实例3 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析: 假设该数为 x。 1、则:x + 100 = n2, x + 100 + 168 = m2 2、计算等式:m2 - n2 = (m + n)(m - n) = 168

python建模实例详解

###################################### ##Fundamentschwingungsstudie## ##nur geeignet fuer ABAQUS 6.4-1## ##erstellt von D.Chen in 2009## ###################################### #开头的为注释行. 第一步, 建立建模环境, 这一步中py将从abaqus中导入建模所需的所有程序模块. from part import * 接下来定义草图环境 mdb.models['Model-1'].Sketch(name='__profile__', sheetSize=200.0) mdb.models['Model-1'].sketches['__profile__'].sketchOptions.setValues(construct ionGeometry=ON, decimalPlaces=2, dimensionTextHeight=5.0, grid=ON, gridFrequency=2, gridSpacing=5.0, sheetSize=200.0, viewStyle=AXISYM) 上面的设定为大小200*200, 格栅间距为5, 文字标注高度为5. mdb.models['Model-1'].sketches['__profile__'].ObliqueConstructionLine(point1=(0 .0, -100.0), point2=(0.0, 100.0)) 本句语句设定轴对称模型的对称轴线位置 mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(0.0, 0.0),point2=(40.0, -40.0)) 该语句绘制矩形, 从点0,0 至点40,-40 mdb.models['Model-1'].Part(dimensionality=AXISYMMETRIC, name='Boden', type=DEFORMABLE_BODY) 定义模型为轴对称, 名字为boden,为可变形体 mdb.models['Model-1'].parts['Boden'].BaseShell(sketch=mdb.models['Model-1'].ske tches['__profile__']) del mdb.models['Model-1'].sketches['__profile__'] 绘图完成不要忘记收回建模环境所占的内存 第二节, 材料定义 from material import * from section import * 从ABAQUS提供的接口中导入材料库和组件库 mdb.models['Model-1'].Material(name='Boden') 定义材料名

相关文档
相关文档 最新文档