使用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庫來着.........

相關文章
相關標籤/搜索