使用Eric构建Caffe应用程序-Baby年龄识别
训练好的Caffe网络结构,可以固定下来,直接载入程序作为数据库接口使用。本文使用Eric构建运行于Python环境下的图片识别应用程序,因为Eric使用QT作为GUI,且有Python的接口,可直接无缝使用Caffe,并可使用在Linux和Windows环境中。
1.编译好Pycaffe之后,安装Eric4、PyQt4。
软件中心安装 Eric4、PyQt4;
2.配置Eric:
根据程序设置向导配置Eric使用的Python版本、其他设置。
3.建立项目:
点击Eric主界面,Project->new ,设置项目名称、位置;
3.1、界面设计
将左侧的【源代码】选项卡切换至【窗体】选项卡(左数第二个)。
右键空白区域,选择【新建窗体】。
在弹出的对话框中选择【对话框】。
点击Ok之后,填写保存位置,生成一个QtDesigner可以修改的UI文件。
工程左栏右键点击UI文件,点击Open in Qt-Designer弹出设计界面,便可以进行界面设计。
4、设计界面,建立自定义槽
对于Button文件,可以在设计界面添加空槽,再进行代码文件内编辑
也可以不在设计界面添加槽,保存UI文件。
回到工程界面,右键点击编译,生成UI_.....Py文件;
再点击生成对话框代码,生成类代码文件。
因为MCV设计模式使设计和逻辑分离,可以设计好界面后,修改任意类代码不影响界面效果。
默认槽的函数形式为:
若按钮名称为btnParse,则类内槽函数为
@pyqtSignature("")
def on_btnParse_clicked(self):
程序编译运行后,按动按钮btnParse,触发on_btnParse_clicked(self) 设定的行为。
5.设计逻辑
我的程序主要使用了类文件里面的成员函数on_RecogOne_clicked(self);
以下是参考代码:
import ClassifyFace as cf
.......................................@pyqtSignature("")def on_RecogOne_clicked(self):"""Slot documentation goes here."""#self.tvResult.clear()fName = self.lblPath.text()#print ("fName:%s", fName )#u'Please, load a log file'# 获取地址框内的文件名pattern = self.txtReToMatch.displayText();print ("pattern:%s", pattern)#fileName!path = pattern.toAscii();path=path[7:];path=str(path )# 异常必要的强制转化!print path;#载入识别过程pathSrc =pathOut, pathRec=cf.recogImg(path);#识别函数Num=-1;idx =0;if(Out ==-1):print ("Face Detect fail!");return;else:for i in Out:if (i ==1):Num=idx;idx+=1;#画出修改图像pixmapO=QPixmap()pixmapO.load(pathRec);itemO=QGraphicsPixmapItem(pixmapO)self.scene2.addItem(itemO)self.graphicsView_Out.setScene(self.scene2)if(Num==-1):print ("The Face is not a Baby!");else:print ("The serias %d face is a baby face"%Num);#画出脸部图像pathf=path+"face"+str(Num)+".jpg";pixmapf=QPixmap();pixmapf.load(pathf);itemf=QGraphicsPixmapItem(pixmapf)self.scene3.addItem(itemf)self.graphicsView_Face.setScene(self.scene3)OutStr ="The serias"+ str(Num)+ " X face is a baby face"self.label_Outshow.setText(OutStr);#显示原图像pixmap=QPixmap()pixmap.load(pathSrc);item=QGraphicsPixmapItem(pixmap)self.scene.addItem(item)self.graphicsView_Src.setScene(self.scene)
6.Debug调试程序
注意事项:调试时在主程序打开文件窗口按下F2键,否则可能出现异常提示;
依次关闭调试使用shift+F10按键,不要按退出键按钮;
软件效果:
file:///home/wishchin/图片/smplayer_screenshots/屏幕截图 2015-04-09 12:27:33.png
程序运行效果:
总结:
对于简单的图像处理使用CNN问题,比如给出了类似于人脸的结果图片,再进行模式识别。若从0开始,一般可以使用最简单的六层网络,使用Caffe可以仅配置参数就可以构建简单的CNN,一般的六层网络是这样设置的:
InPut——>Conv层——>Pooling层——>Conv层——> Pooling层/ ReLU整流层+pooling层——>全链接层——>softMax层——>输出类别概率。
卷积核实现特征提取的各种不变性,同时可以完成梯度计算、主方向确定等功能。当然一般来说使用越大的卷积核越能学习全局的特征,且若要学到较为全局的特征,需要使用至少两个卷积层。
注意事项:
运行过程中:出现cublas无法构建的事,好像是可以忽视的.............
没有使用cublas成功,貌似使用了哪一个blas库来着.........
使用Eric构建Caffe应用程序-Baby年龄识别相关推荐
- 使用Eric构建使用Caffe应用程序
训练好的Caffe网络结构,可以固定下来,直接载入程序作为数据库接口使用.本文使用Eric构建运行于Python环境下的图片识别应用程序. 1.编译好Pycaffe之后,安装Eric4.PyQt4. ...
- websockets_如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序
websockets by Janitha Tennakoon 通过詹妮莎·特纳库恩 如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序 (How to ...
- Ember——在构建Ember应用程序时,我们会使用到六个主要部件:应用程序(Application)、模型(Model)、视图(View)、模板(Template)、路由(...
在构建Ember应用程序时,我们会使用到六个主要部件: 模板(Template).应用程序(Application).视图(View).路由(Routing).控制器(Controller)和模型(M ...
- 使用组件构建Android应用程序
原文链接:http://android.eoe.cn/topic/android_sdk 应用程序组件 Android's application framework lets you create ...
- 用Xwt构建跨平台应用程序[转载]
Xwt是为Mono和.NET创建的基于.NET框架的跨平台开源UI工具包,它使用通用的API,构建于所支持的每种平台的原生Widget工具包之上.它主要用来创建基于同一个代码库的跨平台桌面应用程序.使 ...
- 使用 Node.js、Express、AngularJS 和 MongoDB 构建一个Web程序
为什么80%的码农都做不了架构师?>>> 使用 Node.js.Express.AngularJS 和 MongoDB 构建一个实时问卷调查应用程序 2014 年 3 月 20 ...
- java yii_构建 Java 应用程序
构建 Java 应用程序 目标 了解对象或对象集合如何变成应用程序 使用 Eclipse 创建驱动程序类 应用程序入口点 所有 Java 应用程序都需要一个入口点,让 Java 运行时知道将从这里开始 ...
- Qt Creator构建Web应用程序
Qt Creator构建Web应用程序 构建Web应用程序 要求 搭建开发环境 为WebAssembly设置Qt 启用WebAssembly插件 指定WebAssembly设置 添加WebAssemb ...
- 《Java和Android开发实战详解》——2.2节构建Java应用程序
本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.2节构建Java应用程序,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号 ...
最新文章
- vb mysql数据导入到mssql,[请教]怎样把*.txt文本的数据导入sql数据库中?
- Linux环境下Android开发环境的搭建
- CodeForces - 1333D Challenges in school №41(构造+模拟)
- Gradle属性(四)
- 用C#访问Dynamic AX的WebService.
- Unique Email Addresses
- mybatis加载属性
- Vim 的几个彩蛋。。
- android-Vibrator的使用
- 二十套Java项目源码
- 三星内存编码_想问一下三星内存条的型号有什么区别
- 【搜索】训练E - Crazy Robot
- AcWing 292 炮兵阵地
- canvas 将两张图片叠加
- 在工作站计算机中创建策略,禁止任何计算机访问本机 8000 端口
- docker 常用命令(二)——容器命令
- OllyDbg 常用快捷键与命令
- SLAM论文粗译:3D Mapping with an RGB-D Camera
- Rocket Pool 、InfStones 、Lido 三种质押服务浅析
- Oracle学习笔记4
热门文章
- App相互唤醒的几种方式
- Vue响应式数据: Observer模块实现
- Mac下配置环境变量(转)
- android 布局滑动中scrollTo 和 scrollBy 方法使用说明
- 栈,堆,值类型,引用类型,装箱,拆箱 .NET中 6个重要的概念
- [ACM] hdu 1232 畅通工程(并查集)
- TortoiseSVN无法查看日志和SVN LOG无法查看日志的解决办法。
- SkMaskFilter (SkBlurMaskFilter的使用)
- Android 取得 ListView中每一个Item项目的值
- LeetCode 239. Sliding Window Maximum