使用Eric构建Caffe应用程序-Baby年龄识别

        训练好的Caffe网络结构,能够固定下来,直接载入程序做为数据库接口使用。本文使用Eric构建运行于Python环境下的图片识别应用程序,由于Eric使用QT做为GUI,且有Python的接口,可直接无缝使用Caffe,并可以使用在Linux和Windows环境中。python

1.编译好Pycaffe以后,安装Eric四、PyQt4。数据库

       软件中心安装 Eric四、PyQt4;设计模式

2.配置Eric:网络

      根据程序设置向导配置Eric使用的Python版本、其余设置。函数

3.创建项目:学习

       点击Eric主界面,Project->new ,设置项目名称、位置;spa

eric新建项目  

 

3.一、界面设计设计

将左侧的【源代码】选项卡切换至【窗体】选项卡(左数第二个)。3d

选择窗体

右键空白区域,选择【新建窗体】。调试

新建窗体

在弹出的对话框中选择【对话框】。

新建对话框


点击Ok以后,填写保存位置,生成一个QtDesigner能够修改的UI文件。

工程左栏右键点击UI文件,点击Open in Qt-Designer弹出设计界面,即可以进行界面设计。


四、设计界面,创建自定义槽

对于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库来着.........

相关文章
相关标签/搜索