人臉識別SDK算法開發(fā)文檔
SDK算法功能信息
包大?。?00M
最小人臉檢測大小:50px * 50px
可識別人臉角度:yaw ≤ ±30°, pitch ≤ ±30°
檢測速度:100ms 720p*
追蹤速度:30ms 720p*
人臉檢測耗時:< 100ms
RGB 圖片特征抽取耗時:< 300ms
RGB 活體檢測耗時:< 200ms
近紅外活體檢測耗時:< 50ms
1 萬本地人臉庫檢索速度:< 400ms
備注:以上指標(biāo),由版 SDK 運行在真實設(shè)備上,采用真實數(shù)據(jù)集所得,但算法性能受實際運行設(shè)備、實際數(shù)據(jù)集等情況影響,以上數(shù)字僅供參考。
SDK 采用動態(tài)庫 dll 方式提供提供一個鑒權(quán)激活工具:LicenseTool.exe
兼容性
x86、x64 兩個版本,支持 Win7、Win10
推薦基于 vs2015 進(jìn)行開發(fā)
方式
按設(shè)備
離線識別 SDK 方式為以設(shè)備維度為主,每臺硬件設(shè)備需要一個獨立的,此的校驗是基于設(shè)備的硬件指紋(指紋的獲取 SDK 初始化時會自動讀取并展示),被的設(shè)備,將在有效期內(nèi)可以運行 SDK。重新拉取的情況:設(shè)備不變,僅需要重新激活而已。
刪除 SDK 或基于 SDK 開發(fā)的應(yīng)用
重新安裝 Windows 系統(tǒng)
失效的情況:需要重新購買序列號,之前的序列號失效。
激活一臺設(shè)備后,此設(shè)備硬件變更
硬件損壞
序列號
序列號為管理的依據(jù)。每臺被的設(shè)備,都將對應(yīng)一個序列號,用于標(biāo)識對應(yīng)的設(shè)備信息及記錄。序列號的形式為 16 位隨機(jī)英文數(shù)字組合,如:3G59-M5JK-889A-7LQA。
激活
已購買的序列號,是用于激活的憑證,激活流程主要是將序列號與具體的硬件進(jìn)行綁定(硬件指紋),從而生成對應(yīng)硬件設(shè)備的文(License),SDK 運行前,將會校驗文件是否和實際硬件信息相匹配。
注意:激活時,設(shè)備系統(tǒng)時間需要和當(dāng)前時間一致,如果差距太大(例如偏差 5min以上),激活則無法完成。
離線激活
此種激活方式,適用于設(shè)備*不可聯(lián)網(wǎng)的情況,優(yōu)勢在于可避免聯(lián)網(wǎng)激活,滿足業(yè)務(wù)對網(wǎng)絡(luò)的嚴(yán)格要求,以及設(shè)備批量注冊需求。您需要在后臺配置好硬件指紋并完成和序列號的綁定,然后將文件放到 SDK 的位置。
獲取序列號:購買獲取序列號。
采集硬件指紋:將 SDK 置于設(shè)備上,運行激活程序,獲取硬件指紋。
配置:在后臺將硬件指紋綁定到具體序列號上。
獲取文件:獲取文件。
設(shè)備激活:將文件放到 SDK 中,并初始化 SDK 完成。
正式購買的序列號,試用期限為永*有效。此「永*」是指綁定到具體設(shè)備維度,但如已綁定的硬件設(shè)備變更后,則可能會失效。
功能介紹
人臉檢測與追蹤
可在設(shè)備端,離線實時檢測視頻流中的人臉。同時支持處理靜態(tài)圖片或者視頻流,并對當(dāng)前檢測到的人臉持續(xù)跟蹤,動態(tài)定位人臉輪廓,穩(wěn)定貼合人臉。
質(zhì)量控制
在人臉檢測及追蹤過程中,實時校驗人臉的姿態(tài)角度、遮擋、清晰度、光照條件,符合質(zhì)量條件的人臉圖片才會被采集。
人臉采集
針對視頻流實時完成人臉圖片采集,并輸出滿足質(zhì)量過濾條件的人臉圖片,可自定義采集人臉大小,采集頻率,采集質(zhì)量等設(shè)置。
離線 RGB 可見光活體檢測
針對視頻流/圖片,通過采集人像的破綻(摩爾紋、成像畸形等)來判斷目標(biāo)對象是否為活體,可有效防止屏幕二次翻拍等攻擊,可使用單張或多張判斷邏輯。
離線 NIR 近紅外活體檢測
針對視頻流/圖片,利用近紅外成像原理,實現(xiàn)夜間或無自然光條件下的活體判斷。其成像特點(如屏幕無法成像,不同材質(zhì)反射率不同等)可以實現(xiàn)高魯棒性的活體判斷。
離線 Depth 深度圖像活體檢測(3D 結(jié)構(gòu)光)
通過 3D 建模判斷目標(biāo)對象是否為活體,基于 3D 結(jié)構(gòu)光成像原理,可強效防御圖片、視頻、屏幕、模具等攻擊。
離線 1:1 對比
提供本地化的 1:1 人臉對比功能,高魯棒性算法,可對應(yīng)各種姿態(tài)、膚色、光照等場景,可有效應(yīng)用于人證比對、身份核驗等場景。
示例工程中包含:
圖片與圖片的比對:兩張人臉圖片的 1:1 對比,并返回相似度分值。
圖片與視頻流比對:一張預(yù)設(shè)的人臉圖片,和攝像頭實時采集的符合條件的人臉圖片進(jìn)行對比。
離線 1:N 搜索
本地數(shù)據(jù)庫中保留所有人臉特征值(如需要保留原圖,可根據(jù)業(yè)務(wù)需要自行修改工程)。
視頻流采集的人臉在人臉庫中搜索:視頻流中實時采集人臉,并與人臉庫中預(yù)設(shè)的人臉庫進(jìn)行一一對比,返回相似度的 user 及對應(yīng)分值。
離線人臉庫管理
人臉數(shù)量不做上限,可根據(jù)業(yè)務(wù)需要適當(dāng)調(diào)整,支持人臉庫、人臉組、用戶、Face幾個維度的增刪改查設(shè)置。
Demo 示例工程
demo 示例工程 TestFaceApi 展示了如何集成人臉識別離線sdk。 即導(dǎo)入FaceApi.dll,FaceApi.lib 及頭文件 FaceApi.h。另外為了示例視頻人臉跟蹤等,用到了一些 opencv 的庫文件以及一些實現(xiàn)demo的支持文件,如 image_base64 等。
(這些支持文件均為代碼開源或是開源庫)
在 TestFaceApi 中的 test_face.cpp 的 main()方法中,有使用 sdk 的各個接口方法示例。
接入 sdk 及其簡單,分 3 步 3 行代碼。如下:
如上,即為調(diào)用 sdk 功能的 3 步 3 行代碼,當(dāng)然調(diào)用 SDK 后,在程序退出后,需要釋放 sdk 防止內(nèi)存泄漏,需要刪除 sdk 實例化的指針delete api;
示例工程中:分別有以下幾個示例 cpp 文件對應(yīng)幾個常用 sdk 的調(diào)用 demo。
文件名 功能
setting.cpp 人臉檢測、識別等參數(shù)設(shè)置
compare.cpp 人臉 1:1 比對、1:N 搜索,人臉特征值提取,特征值對比等
liveness.cpp USB 攝像頭視頻信息人臉實時檢測,可見光 RGB、紅外 NIR 活體檢測、RGB/NIR 雙目攝像頭活體檢測等
manager.cpp 人臉庫管理類,包括人臉注冊、刪除,更新、組管理,人臉信息查詢等
cv_help.cpp 繪制人臉跟蹤框、人臉關(guān)鍵點位等的工具類
特征抽取模型選擇
模型介紹
v1.1 版本起,SDK 提供生活照和證件照兩種特征抽取模型,主要適用場景如下:
生活照模型:如手機(jī)拍攝的圖片、較為清晰的證件照片、USB 鏡頭實時采集的圖片、網(wǎng)絡(luò)攝像頭實時采集的圖片等。
證件照模型:如芯片照、各類證件照(工卡、學(xué)生卡、會員卡照片等)、人臉的像素普遍小于 80px 的圖片等。
使用方法
在 SDK 初始化方法中控制:sdk_init(true); //傳入 true 為使用證件照模型,傳入 fasle 為普通生活照模型
注意事項
溫馨提示:一經(jīng)選擇一個模型,則所有業(yè)務(wù)流程的特征抽取處理,都會使用此模型,兩個模型不可同時作用。如業(yè)務(wù)中設(shè)計證件照的特征抽取,請務(wù)必選擇使用證件照模型。
錯誤碼及錯誤信息
錯誤碼 | 錯誤內(nèi)容 | 錯誤描述 |
0 | SUCCESS | 成功 |
1 | SYSTEM ERROR | 系統(tǒng)錯誤 |
2 | UNKNOWN ERROR | 未知錯誤 |
1001 | NOT_AUTH | 校驗失敗 |
1002 | REQUEST PARAMS ERROR | 請求參數(shù)錯誤 |
1003 | DB_OP_FAILED | 數(shù)據(jù)庫操作失敗 |
1004 | NO_DATA | 沒有數(shù)據(jù) |
1005 | RECORD_UNEXIST | 記錄不存在 |
1006 | RECORD_ALREADY_EXIST | 記錄已經(jīng)存在 |
1007 | FILE_NOT_EXIST | 文件不存在 |
1008 | GET_FEATURE_FAIL | 提取特征值失敗 |
1009 | FILE_TOO_BIG | 文件太大 |
1010 | FACE_RESOURCE_NOT_EXIST | 人臉資源文件不存在 |
1011 | FEATURE_LEN_ERROR | 特征值長度錯誤 |
1012 | DETECT_NO_FACE | 未檢測到人臉 |
常見問題
Q:為什么會報 db_operation_error 錯誤?
A:請檢查 sdk 路徑是否帶中文,這會導(dǎo)致數(shù)據(jù)庫創(chuàng)建失敗然后提示 db_operation_error
Q:編譯 demo 工程時候出現(xiàn)如 opencv-win/include/opencv2/flann/logger.h(66): error C4996: 'fopen': This function or variable may beunsafe 的錯誤提示
A:這種錯誤一般是因為 vs 強制要求安全等級提高所致,可以通過右鍵工程-屬性-C/C++ --預(yù)處理器—預(yù)處理器定義中加入: _CRT_SECURE_NO_WARNINGS 后重新編譯即可解決問題。
Q:工程運行過程中,提示 face-resource 不存在。
A:人臉 sdk,需要一些模型文件,在 demo 工程的 face-resource 文件夾中,該文件夾需要放置在 exe 所在路徑的上級目錄下。若放置不正確,可能出現(xiàn)找不到模型文件,沒法進(jìn)行人臉識別。
Q:激活后是否可以把激活文件 license.ini 和 license.key 拷貝到其他設(shè)備運行?
A:不能,離線 sdk 和設(shè)備綁定,每個設(shè)備對應(yīng)一個 key 和一個 license 文件,換設(shè)備無法運行。但對同一臺設(shè)備,可把 win32 下的 license.ini 和 license.key 拷貝到 x64下,則 x64 環(huán)境,該設(shè)備也等同于激活,可以使用。
Q:exe 不能運行或崩潰
A:編譯的工程 exe,需要和 dll 等在一個文件夾里面,如示例工程 win32 和 x64 就有不少動態(tài)庫 dll 文件,這是 exe 運行所需的庫文件,不放在一起的話,可能 exe 不能運行或者崩潰。
Q:vs2010 或 vs2017 打開工程編譯提示錯誤不能通過編譯?
A:開發(fā)文檔使用 vs2015 comunity 版本,因 vs2010 不支持 c++11,但 sdk 使用了c++11 的新功能,vs2017 若編譯提示 json 庫錯誤,如 json::reader 的錯誤,建議更新為 v1.1 版本的 SDK 即可解決。
Q:SDK 是否支持多線程?
A:v1.1 版本已經(jīng)支持多線程,請在后臺下載版的 SDK。 Q:Windows 離線 SDK 是否支持 C#,Java 語言?
A:Windows SDK 采用 C++語言編寫,支持用 vs2015 版本開發(fā),推薦用 vs2015 Comunity版本。SDK 提供動態(tài)庫 dll,可用于實現(xiàn) Java 調(diào)用和 C#調(diào)用。 Q:Windows 離線 sdk 在 debug 版本報錯?
A:目前僅提供 x86 和 x64 的 release 版本的庫,不支持 debug 版本,需要調(diào)試可在 release版本下通過添加日志調(diào)試。
Q:SDK 中的激活工具 licenseTool.exe 和 sdk 的 demo TestFaceApi.exe 都不能運行,崩潰或提示缺少 dll? A:此 SDK 基于 C++編寫,需要安裝對應(yīng)運行環(huán)境(推薦使用 vs2015),崩潰或提示缺少dll 是因為缺少運行環(huán)境。
Q:證件照等圖片檢測不到人臉,但實際是有人臉的?
A:默認(rèn)可檢測最小人臉大小是 100,若檢測不到,可通過設(shè)置最小人臉大小調(diào)整,例如調(diào)整最小檢測人臉為 30px,可使用 api->set_min_face _size(30) ,達(dá)到調(diào)整最小人臉檢測大小的目的,然后再調(diào)用檢測,這樣能檢測到比較小得圖片如證件照等。v1.1 版本中已經(jīng)集成了證件照模型,推薦您升級 SDK 版本解決此問題。