openFace 人臉識別框架測試


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張以上圖片確實要瘋了;

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

究其原因:openface 用的似乎還有蠻多的,可能是卷積層訓練的數據是基於外國人的臉譜訓練的,如果要可靠一點,應該重新找一些數據從底層開始訓練起來;

如有時間,再做深入分析了。

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM