训练好的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 =path
Out, 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年龄识别的更多相关文章

  1. 使用 SailingEase WinForm 框架构建复合式应用程序(插件式应用程序)

    对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序.但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长. Sa ...

  2. 使用 Eclipse PhoneGap 构建 Android 应用程序入门

    Eclipse 是一种支持多种技术的开源集成开发环境 (IDE),但本文重点介绍 Java 支持,这也是 Android 应用程序的“母语”.Android 是 Google 发布的开源移动操作系统. ...

  3. Node.js高级编程读书笔记 - 4 构建Web应用程序

    Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...

  4. 使用ASP.NET 构建 Web 应用程序快速入门-8小时的免费培训视频

    - Scott Hanselman的中文博客[转载] [原文发表地址] Building Web Apps with ASP.NET Jump Start - 8 Hours of FREE Trai ...

  5. 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序

    http://blog.csdn.net/wingfourever/article/details/7726724 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX ...

  6. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  7. NativeScript官方书籍:NativeScript-用你现有技术构建移动应用程序

    大家好,我用nativescript做企业级移动应用开发一年多了.从最初只能看nativescript英文文档,到现在看到官方发布正式的书籍,感觉nativescript变得越来越好. 当然,在这个过 ...

  8. Jenkins之使用Pyinstaller构建Python应用程序

    目录 1. 极简概述 2. Jenkins配置 2.1 安装JDK 2.2 安装Jenkins 3. 安装Docker 4. 使用PyInstaller构建Python应用程序 4.1 Fork 一个 ...

  9. 使用Beetle简单构建聊天室程序

    之前已经讲解了Beetle简单地构建网络通讯程序,那程序紧紧是讲述了如何发送和接收数据:这一章将更深入的使用Beetle的功能,主要包括消息制定,协议分析包括消息接管处理等常用的功能.为了更好的描述所 ...

随机推荐

  1. ADB 常用命令学习

    参考文档:https://www.cnblogs.com/bravesnail/articles/5850335.html非常感谢作者的分享,以下是我学习的记录.Android 常用adb 命令汇总- ...

  2. UOJ #310 黎明前的巧克力 (FWT)

    题目传送门 题目大意:给你一个序列,定义一个子序列的权值表示子序列中元素的异或和,现在让你选出两个互不相交的子序列,求选出的这两个子序列权值相等的方案数,$n,a_{i}\leq 10^{6}$ 这是 ...

  3. 45.mapping建立、修改

    主要知识点 1.如何建立索引 2.修改mapping 3.测试mapping         一.如何建立索引 语法 PUT /website { "mappings": { &q ...

  4. windows环境下用pip安装pyautogui遇到的几个问题

    1.不能直接使用win+r运行cmd并使用pip,必须点击开始->windows系统->命令提示符,右键->以管理员身份运行 2.运行pip install pyautogui后提示 ...

  5. Python中对两种utf-8格式的理解

    1.python文件开头utf-8格式的理解 2.程序中读取文件时utf-8格式的理解 aa.py文件代码示例: #!/usr/bin/python # -*- coding:utf-8 -*- fr ...

  6. Navicat Premium 下载地址

    Navicat Premium(32 bit)简体中文版:http://xiazai.formysql.com/trial/navicat_premium_trial.exe Navicat Prem ...

  7. daemon not running; starting now at tcp:5037 adb: CreateFileW 'nul' failed: 系统找不到指定的文件

    1. INFO - roid.tools.idea.adb.AdbService - Initializing adb using: C:\Users\Administrator\AppData\Lo ...

  8. 只读事务(@Transactional(readOnly = true))的一些概念

    念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必要 ...

  9. 用JAVA的抽象类实现编码组合进度的灵活性

    都是实际开发逼出来的吧. 人类真灵活~~~~:) 就是将整个功能的实现在编程时,打散到一个一个文件中,提前写好核心算法, 在TEAM的实现方案确定下来之后,再进行组装. GuessGame.java ...

  10. x86、Linux、GNU、GNOME是什么

    一.指令集架构: 指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集 ...