訓練好的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
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庫來着.........