openface的githup文檔地址:http://cmusatyalab.github.io/openface/html
openface的安裝:linux
官方推薦用docker來安裝openface,這樣方便快速不用本身去安裝那麼多依賴庫:git
docker pull bamos/openface docker run -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash
也就兩行代碼的事情,若是本身一步步去安裝的話,估計很花時間。github
參考路徑:http://cmusatyalab.github.io/openface/setup/web
Demo簡單分析:docker
openface的網頁提供了四個demo:瀏覽器
第一:實時視頻定位人物安全
具體demo位置在github clone下來的 demos/web 目錄裏,經過啓用:bash
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模型
由於設備關係沒能嘗試,有條件的能夠試試