Labview2019+python3.6實現人臉識別(一)

開發環境win10(64位)

開發語言Labview2019(64位)+python3.6(64位)

數據庫是ACCESS2010,另外在64位系統上想要訪問ACCESS需要下載安裝64位數據庫引擎:https://www.microsoft.com/zh-CN/download/details.aspx?id=13255

Labview需要單獨安裝的模塊是VAS:視覺採集軟件,可以在NI官網下載離線包。

python用到的模塊有opencv-python,numpy,pypyodbc,dlib(dlib在windows系統下的安裝方式,請自行百度,建議採用離線安裝)。

設計思路:Labview搭建可視化界面,主要實現採集圖像,保存圖像,保存圖像對應的姓名、工號等信息到數據庫;

                  python主要實現圖像中人臉特徵向量的提取、以及特徵向量的保存和特徵向量的歐式距離的計算(也就是識別新圖像中的人臉是誰)

注意:本項目爲個人項目,目前只在win10(64位)系統上驗證,其他環境可否尚待感興趣的小夥伴們驗證(但我覺得win7(64位)應該沒問題);另外,Labview2019支持python2.7和3.6版本的調用,其他版本會出現不可知的錯誤,同時要注意Labview64位必須和python64位使用,不能調用python32位。同時,我在電腦上安裝labview2019的32位版本也不能調用32位版本的python3.6(一臉懵逼)。

今天先說一下Labview部分,明天再說python部分,python部分沒啥說的,網上現成的資源有的是,主要在於Labview調用。

主界面展示一下:(請忽略本人)

兩個線程,四個事件。

線程一:攝像頭採集圖像——這個線程一直循環工作(沒有考慮過合不合理,那不是我的水平能達到的)

線程二:四個事件——拍照、保存圖像、訓練人臉特徵向量、人臉識別

線程一:

需要VAS模塊,借用的是自帶例程。

循環採集圖像也沒啥可說的。

首先,開啓攝像頭(所有語言都是這個樣子),因爲我調用的是USB攝像頭(或者電腦自帶攝像頭),所以使用IMAXdx Open Camera.vi,然後創建一個IMAXdx類的屬性節點,然後爲這個屬性節點設定一些參數,圖中沒有註釋的兩個參數是相關的,就是爲了設置相機留出多少緩存爲之後的數據提供空間。HardwareRequeueBufferListThreshold就是一個默認的關鍵詞,它告訴相機我要設定一個閾值,你按照我設定的閾值給我留出空間來,然後設定了一個50,就是讓相機給留出50%的緩存。

然後,Configure Grab.vi設置一下緩存區的大小,能夠改變採集速率;同時創建IMAQ,相當於cv2.namedWindow()。

接着,開啓一個while循環,在循環內部不斷獲取圖像,同時判斷圖像是否更新,如果更新就將新圖像替換原有圖像;

最後,退出循環後要將IMAQdx關閉,清除設置,釋放攝像頭,關閉所有窗口(這不就是release()和destroyAllWindows()麼)

線程二:

事件“拍照”:

imgage_data控件和“看看”控件屬性是不一樣的(請注意)

事件“保存”

首先調用了一個子vi,用來登記拍照者的一些信息,並將其保存到數據庫中;然後,當接收到以上信息登記完成後,將圖片保存到指定文件夾中,這裏可以不開啓對話框,直接保存。

(“信息.vi”中就是和access數據庫通訊的東西,人員信息你們就自己想吧,我設置的是名字,部門和工號,將工號作爲唯一標識識別人臉,同時支持同一人多次存入人臉,可以提高識別的準確性;人臉圖片也和自動追加編號,比如你的工號爲110,第一次存入人臉,先讀數據庫有沒有你的工號,沒有就將你的圖片命名爲110_0.png;如果有你的信息,就去讀取你有多少條記錄,假如你以保存了5次,那就將再次保存的圖像命名爲110_5)

事件“特徵訓練”

調用了Feature.py腳本。三個輸入參數,都是字符串類型,一個輸出變量——bool類型

事件“人臉識別”:

這裏要用到IMAQdx Get Image Data.vi,它可以將圖像直接轉換爲一維數組;然後我先調用了一個”人臉識別.vi“的子vi,如下

在這個子vi中,我再次調用了一個Face_recognition.py的腳本,輸入參數是圖像的一維數組(uint8),和人臉特徵向量文件路徑(字符串);輸出就是工號(字符串)。

以上就是labview部分,明天有時間再寫python部分的。晚安

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章