1. 程式人生 > >openFace 人臉識別框架測試

openFace 人臉識別框架測試

找不到 設置 min don infer reat 每一個 href dir

openface 人臉識別框架 但個人感覺精度還是很一般

openface的githup文檔地址:http://cmusatyalab.github.io/openface/

openface的安裝:

官方推薦用docker來安裝openface,這樣方便快速不用自己去安裝那麽多依賴庫:

docker pull bamos/openface
docker run -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash

也就兩行代碼的事情,如果自己一步步去安裝的話,估計很花時間。

參考路徑:http://cmusatyalab.github.io/openface/setup/

Demo簡單分析:

openface的網頁提供了四個demo:

技術分享圖片

第一:實時視頻定位人物

技術分享圖片

具體demo位置在github clone下來的 demos/web 目錄裏,通過啟用:

docker run -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash -l -c ‘/root/openface/demos/web/start-servers.sh‘

來啟動這個web服務,但是最新版的無法遠程訪問,原因是加了安全機制了,官方也提供了兩種解決方法:

1)設置google瀏覽器的訪問

用該命令啟動谷歌瀏覽器 --unsafely-treat-insecure-origin-as-secure="example.com" ,

還需要包含--user-data-dir = / test / only / profile / dir來為標誌創建新的測試配置文件。

2)客戶端安裝ncat作為代理

export SERVER_IP=192.168.99.100 ncat --sh-exec "ncat $SERVER_IP 8000" -l 8000 --keep-open 
& ncat --sh-exec "ncat $SERVER_IP 9000" -l 9000 --keep-open &

具體運用查看:http://cmusatyalab.github.io/openface/demo-1-web/ 和ncat的官網

這裏講都是從linux系統來說的,我沒有試驗成功!

=======================================================

第二:人臉比較 Comparing two images

這個需要自己去看py代碼了,不難,只是需要自己根據閾值去判斷是否是同一張圖片:

進入容器:

docker attach 89dfcc6
cd  /root/openface/
./demos/compare.py images/examples/{lennon*,clapton*}

技術分享圖片

閾值是0.99,閾值的確定是一件技術活,當然要自己訓練多,有相應的直覺

技術分享圖片

閾值在0.99以上的可以確定為同一張圖片,否則不是

這裏不多說,多看代碼,多訓練數據,多調參,你會更有直覺去做好一件事。

===========================================================================

第三:訓練分類

這個訓練結果有點讓我失望,一方面可能是訓練圖片太少了,另一方面的就是圖片的預處理上出現比例失調的情況影響了訓練結果

1)快速安裝

因為這裏涉及到docker 數據卷的問題,需要掛載一個目錄到本地,所以重新啟動一個容器:

docker run –v /app/ml_data/:/root/openface/data/mydata/  -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash

/app/ml_data 是本地數據;/root/openface/data/mydata 是容器裏目錄

2)準備數據

技術分享圖片

train_img 是放置訓練的圖片 
others 是放置驗證的圖片
aligned_imgage 是放置經過預處理,剪裁大小的圖片
generated_charaters 是放置訓練後的特征數據
然後我們看看圖片集
train_img 目錄下的兩個目錄huge 和 yangyang 分別放如下圖片

技術分享圖片

yangyang的

技術分享圖片

others圖片

技術分享圖片

3)開始訓練,訓練集先設置huge和yangyang分別10張圖片作為訓練

3.1 預處理圖片和分類

./util/align-dlib.py data/mydata/train_img/ align outerEyesAndNose data/mydata/aligned_images/ --size 64

也可以啟用多線程處理

for N in {1..8}; do ./util/align-dlib.py data/mydata/train_img/ align outerEyesAndNose data/mydata/aligned_images/  -size 96 & done

3.2 提取特征

./batch-represent/main.lua -outDir data/mydata/generated_charaters/ -data data/mydata/aligned_images/

3.3 訓練圖片

./demos/classifier.py train data/mydata/generated_charaters/ 

#將會產生data/mydata/generated_charaters/ classifier.pkl的新文件名。這個文件有你將用來識別新面部的 SVM 模型

4)驗證訓練結果

./demos/classifier.py infer data/mydata/generated_charaters/classifier.pkl /root/openface/data/mydata/others/{hu,other,yang}*

結果如何:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

我們可以看到結果:
楊洋的預測基本比較準,可是other02.jpg 和other03.jpg預測成胡歌的概率在0.89以上,確實有問題。什麽原因這樣呢?
來看一下預處理的圖片也及是aligned_imgage目錄裏的圖片:

技術分享圖片

技術分享圖片

5)第二次,增加測試集到每一個人物的圖片為20張,另外刪除到一兩張預處理變形的圖片,結果如何:

技術分享圖片

我們看到精度是有所提高的,可是遠遠還不足,我們試著加兩張另類的照片:

技術分享圖片


就是other06.jpg和other07.jpg,來看看訓練後的驗證結果如何:

技術分享圖片

很失望的看到 :Predict yangyang with 0.90 confidence

把金三胖預測成楊洋的可靠性為百分之90-------無語了!

當然一張狗的圖片是直接報錯,說明找不到分類

這個要用到生成環境下的話,還得慎重看看源碼,做一個優化;如果做一個門衛的監控識別,每增加一個人,就得提供8張圖片作為訓練尚可,如果提供20張以上圖片確實要瘋了;

如果是識別本人是挺好的,可是無法區分入侵者,這就是個問題了。

希望以後會出現一些更好的人臉識別框架

6) 最後建議你把docker容器提交一下

$ docker commit c3f279d17e0a  minsons/common:ouyangNet

如果有github賬戶,那隨便就提交上去吧

docker login #登陸
docker push minsons/common:ouyangNet

技術分享圖片

========================================================

第四 :空間定位

就是會在一定空間內區分出不同的人,從技術上來,最大的難處不是識別兩個人的不同,而是空間定位。

空間定位是針對陌生人,在庫裏是沒有經過訓練的,可是一個人進入空間後被采集了圖片,

那麽這個人的采集數據跟本人的再次采集的圖片之間的距離肯定更加趨近0,更好的識別出不同其他人,問題是如何實時空間3上上定位。

我們可能會考慮到的場景就是:阿裏巴巴的無人零售店。

對於一個人在店裏的定位和識別就可以根據人在進入零售店掃手機的淘寶賬戶的同時采集這個人的臉部數據,並實現實時的關聯,接著再建立起人與空間的定位,

我個人的思路是:

1,進入關卡,建立淘寶賬戶與人的定位關聯

2,空間定位的關聯

3,實時采集人拿東西視覺識別統計(具體有種實現方式及采集媒介協助)

4,關聯支付

技術分享圖片

不同的顏色來區別空間上的不同人

以下是部分官網的翻譯:

在這個演示中:

我們首先使用OpenCV來獲取,處理和顯示攝像頭的視頻源。
dlib和OpenFace只需幾行代碼即可輕松獲取每個人臉的檢測面和嵌入。
嵌入的顏色是通過將框架中的人臉位置映射為0到1之間的數字然後使用matplotlib顏色映射來創建的。
為了將所有的圖形保存在一個面板上,我們在與視頻相同的OpenCV緩沖區之上繪制球體。 OpenCV只有2D繪圖基元,因此我們將3D球面的點等距投影到2D,所以我們可以使用OpenCV的2D繪圖基元。
由於來自視頻的圖像是嘈雜的,嵌入會跳過很多的球體,如果不沮喪。我們使用dlib的對象跟蹤器對此進行平滑處理,以跟蹤整個視頻幀中的臉部平均(減弱)嵌入。
人臉檢測和識別會導致“低”的幀率。幀速率可以通過僅對每幾幀進行檢測和識別來改善,並且使用中間的面部跟蹤(這是快速的)來更新面部位置。

在自己電腦上執行:

1,啟動項目

2,下載3D模型,點擊這裏

3,執行 demos/sphere.py 用參數 --networkModel 指向3D模型

因為設備關系沒能嘗試,有條件的可以試試

參考:http://cmusatyalab.github.io/openface/

githup地址:https://github.com/cmusatyalab/openface

openFace 人臉識別框架測試