文地址:https://www.cnblogs.com/view12138/p/13185907.html
NET 人臉識別庫 ViewFaceCore
這是基于 SeetaFace6 人臉識別開發的 .NET 平臺下的人臉識別庫這是一個使用超簡單的人臉識別庫這是一個基于 .NET Standard 2.0 開發的庫這個庫已經發布到 NuGet ,你可以一鍵集成到你的項目此項目可以免費商業使用
開源協議:Apache-2.0GitHub地址: ViewFaceCore十分感謝您的小星星
示例項目地址:WinForm 攝像頭人臉檢測示例項目效果:
一分鐘在你的項目里集成人臉識別
1. 創建你的 .NET 應用
.NET Standard >=2.0.NET Core >=2.0.NET Framework >=4.6.1^2
2. 使用 Nuget 安裝 ViewFaceCore
此 Nuget 包會自動添加依賴的 C++ 庫,以及最精簡的識別模型。如果需要其它場景的識別模型,請下載 SeetaFace6 模型文件。
3. 在項目中編寫你的代碼
簡單的調用示例
ViewFaceCore 使用示例
三、說明
命名空間:ViewFaceCore.Sharp : 人臉識別類所在的命名空間
屬性名稱類型說明默認值ModelPathstring獲取或設置模型路徑 [ 如非必要,請勿修改 ]./model/FaceTypeFaceType獲取或設置人臉類型FaceType.LightMarkTypeMarkType獲取或設置人臉關鍵點類型MarkType.LightDetectorSettingDetectorSetting獲取或設置人臉檢測器設置new DetectorSetting()
1 using System.Drawing;
2 using ViewFaceCore.Sharp;
3 using ViewFaceCore.Sharp.Model;
4
5 // 識別 bitmap 中的人臉,并返回人臉的信息。
6 FaceInfo[] FaceDetector(Bitmap);
7
8 // 識別 bitmap 中指定的人臉信息 info 的關鍵點坐標。
9 FaceMarkPoint[] FaceMark(Bitmap, FaceInfo);
10
11 // 提取人臉特征值。
12 float[] Extract(Bitmap, FaceMarkPoint[]);
13
14 // 計算特征值相似度。
15 float Similarity(float[], float[]);
16
17 // 判斷相似度是否為同一個人。
18 bool IsSelf(float);
四、實現
此項目受到了 SeetaFaceEngine.NET 項目的啟發
這個項目本質上來說還是調用了 SeetaFace 的 C++ 類庫來實現的人臉識別功能。針對本人遇到過的相關的類庫的使用都不太方便,而且使用的 SeetaFace 的版本較老,故萌生了自己重新開發的想法。
本項目在開發完成之后為了方便調用,采用了 Nuget 包的形式,將所有需要的依賴以及最小識別模型一起打包。在使用時非常簡單,只需要 nuget 安裝,編寫代碼,運行即可,不需要多余的操作。
首先查看 SeetaFace ,已經更新到了v3(v6即v3)(上面前輩的項目是基于v1開發的),最新版本暫時沒有開源,但是可以免費商用。然后是根據以前的經驗和 SeetaFace6 文檔的指導,以及前輩的項目,做了以下操作。
1.對SeetaFace6 的接口進行了 C++ 形式的封裝。
目前主要實現了 人臉檢測,關鍵點提取,特征值提取,特征值對比幾個人臉識別中的基礎接口。有了這幾個接口,可以完整的實現一套人臉識別和驗證的流程。
C++ 封裝層
2.采用 C# 對上訴接口進行了導入。
因為C++的項目測CPU架構區分x86和x64,所以C# 層也需要區分架構封裝
C# 導入層
3.采用 C# 的面向對象的封裝
因為C#的項目默認都是 AnyCPU,所以為了簡化調用,在這一層封裝的時候增加了架構判斷,當在你的項目中引用的時候,不用做任何修改。
且因為C++的C#導入方法在和原生的C#寫法略有差異,且數據的轉換和傳遞比較麻煩,所以類庫中對外隱藏了 C# 導入層。并使用大家都更熟悉的C#的面向對象的方式進行進一步的封裝和簡化。
C# 面向對象層
五、也許…
想起 GitHub 密碼,持續更新… 刪除代碼倉庫跑路…
在 GitHub 報告Bug… 向我 發送郵件
源:中國僑網
中國僑網3月25日電 據中國駐斐濟大使館微信公眾號消息,根據統一部署,中國駐斐濟大使館已于2021年8月31日啟用“中國領事”APP受理護照、旅行證業務,相比傳統申請方式更加便捷,受到同胞們歡迎。現結合近期出現的問題,對2021年12月12日布的《駐斐濟使館關于啟用“中國領事”APP護照、旅行證在線辦理功能的通知(更新)》進一步修訂如下:
一、下載注冊
“中國領事”APP可通過蘋果應用商店、騰訊應用寶商店、小米應用商店、華為應用商店或掃描下圖中的二維碼下載。下載完成后打開APP,使用中國國內手機號或個人電子郵箱進行注冊,根據提示完成實名認證后即可登陸使用。
二、業務辦理流程
(一)信息填報:登陸APP后,選擇“護照/旅行證”業務模塊(適用于申請護照或旅行證頒發、換發或補發人員),根據提示要求逐步、完整、準確地填寫個人基本信息,在線簽字確認《國籍狀況聲明書》,按要求格式上傳證件照片、現持護照資料頁等材料。駐斐濟使館僅受理在斐濟、瑙魯、圖瓦盧的中國公民通過“中國領事”APP提交的有關申請,不受理其他跨國申請。注意:申請換發護照人員,一般要求當前所持護照有效期不足1年,如申請提前換發,請將理由一并上傳;申請補發護照人員請按照系統提示上傳情況說明。另外,“國外聯系電話”欄,請務必填寫申請人在中國境外的有效聯系電話。
其中,證件照將直接用于護照制作,請務必上傳本人6個月內近照,拍照時穿戴整齊、頭部及肩頸正直且居中、眼睛自然睜開、不露牙齒、不化濃妝,背景要求為白色或接近白色,無邊框。如選擇使用“中國領事”APP自帶拍照功能,建議請他人協助拍攝,不要露出自拍手臂、不要出現高低肩、低頭、眼睛看向下方、頭部歪斜等情況。請勿翻拍本人紙質照片,此類照片清晰度不夠,無法制證。有關電子護照人像照片規格詳細要求請點擊鏈接:ppt.mfa.gov.cn/appo/page/instruction.html。
此外,如申請人耳朵較小,系統可能提示“證件照檢測不合格”,遇此情況,申請人可繼續申請,后臺審批時將進行人工確認。
(二)身份驗證:為確保相關證件申請人系本人操作,APP將對申請人進行人臉識別。人臉識別失敗不影響申請人提交申請,但請務必由申請人本人完成人臉識別。如后臺審批時,認定人臉識別失敗系非本人出鏡所致,將發起視頻面審,影響辦理進度。
(三)提交訂單:完成上述步驟并成功提交訂單后,相關申請將提交使館審核。申請人可在“我的訂單”或“消息中心”跟蹤辦證進度,使館工作人員將及時反饋審核進展,視情在APP中留言要求補充上傳材料。
所有上傳材料不合格、不完整的申請,都將被退回補充材料,請申請人按退回理由補充或替換有關材料,并再次提交申請。如不按要求進行修改,直接再次提交,申請將被退回,不予通過。
(四)視頻面審:如申請人為16周歲以下未成年人,或人臉識別未通過,或需進一步核實有關信息,使館會要求與申請人通過APP進行視頻面審。請申請人關注訂單狀態,及時選擇預約時間,目前僅開放周二上午、周四上午兩個時間段。請申請人于選定時間段內進入視頻面試大廳,使館工作人員僅能夠對已進入視頻面試大廳的申請者按順序發起視頻邀請。視頻面談過程中,請申請人配合使館工作人員進行截圖操作,并回答相關提問。
16周歲以下未成年人應在一位法定監護人(父親/母親/其他法定監護人)陪同下,與使館工作人員通過APP進行視頻面談。
(五)郵寄材料:
所有申請換發護照/旅行證人員:請在APP訂單狀態顯示“復審中”后,盡快將當前所持證照送遞或郵寄至使館。地址:Chinese Embassy(back gate), 183 Queen Elizabeth Drive, SUVA,Ph: 00679-7137727。來館遞送人員,請提前將證件包好,交給使館后門崗亭。注意:自2022年3月29日起(以訂單顯示“復審中”時間計算)未收到申請人當前所持護照/旅行證前,證照換發程序將暫停。
換發(含頒發、補發)旅行證人員,還需請將申請人紙質證件照片3張(2寸白底、正面免冠、頭部占比勿過大)一并送至使館。
申請補發、頒發護照人員:無需送遞、郵寄任何材料。但證照補發周期長于換發,且流程不同,請勿盲目辦理補發業務。
(六)交費取證
當前,每本護照/旅行證辦理收費均為38斐幣,建議待APP辦證進度顯示為“制證完成,待取證”后再繳費。使館領事證件賬戶設于西太銀行(WESTPAC BANK),帳戶名:Chinese Embassy,賬戶號:9802407073,請通過銀行柜臺存款或網銀轉賬繳費。
如在銀行柜臺辦理,請要求銀行收費員在“Narrative”一欄填寫“中國領事”App中顯示的訂單號最后8位數(App中顯示的訂單號為18位字母加數字組合,例如:FJIAA3VNSE10289589,最后8位為10289589),取證時請務必攜帶銀行收費憑條原件。
如通過網銀轉賬,請自行備注訂單號最后8位數,截圖并打印轉賬憑證,取證時攜帶。
當前受新冠肺炎疫情影響,使館領事接案大廳有限開放。每月最后一周,使館將通過中國駐斐濟大使館官網“重要通知”欄目和“駐斐濟使館”微信公眾號,同時發布下月領事接案大廳開放時間。所有APP辦證進度顯示為“制證完成,待取證”且完成繳費的訂單,均可于接案大廳開放期間取證。取證時請持繳費憑證,使館將現場注銷并退還此前收到的舊證照、同時發放新證照。
三、注意事項
(一)受疫情影響,所有護照、旅行證業務均請通過“中國領事”APP申請辦理,確有特殊困難無法使用APP申請人員,請發送郵件至:bjclfj@gmail.com,使館將酌情遠程指導或協調領事協助志愿者上門指導。
(二)APP實名認證注冊目前僅支持中國普通護照或身份證號碼(后續可能增加其他認證方式)。如無上述證件,可使用他人已實名認證的賬號辦理。
(三)所有“復審中”并已收到舊證照的訂單,一般將于15-25天內收到“制證完成,待取證”信息提示。申請人如對辦理進展有疑問,請發送郵件至bjclfj@gmail.com咨詢。
(四)當前,通過“中國領事”APP申辦的護照不包括申請人指紋信息。無指紋不影響護照正常使用,僅在入境中國時無法自助通關,須走人工通道
(五)當前,“中國領事”APP僅開通普通護照辦理功能。需要辦理公務護照、香港特區護照等其他國際旅行證件人員,請發送郵件至bjclfj@gmail.com咨詢。
(六)使館不會要求申請人到西太銀行(WESTPAC BANK)以外的銀行或網上支付費用,請謹防假借使館名義的各類電信詐騙。
超市、地鐵、車站等很多場景中,人臉識別已經被廣泛應用,但是這個功能究竟是怎么實現的?
在本文中,將以 pico.js 庫為例,分享實現輕量級人臉識別功能的具體開發過程 。
pico.js 是一個只有 200 行純 JavaScript 代碼的人臉檢測庫,具備實時檢測功能(在實際環境中可達到200+ FPS),壓縮后僅 2kB 。
開源代碼地址:https://github.com/tehnokv/picojs;
簡介
本文將介紹pico.js,這一由JavaScript編寫的用于人臉檢測的代碼庫,并展示其工作原理。盡管現已有類似的項目,但我們的目標是提供更小、計算效率更高的替代方案。
在深入考究其細節前,建議各位用計算機的網絡攝像頭體驗一下人臉檢測的實時演示(也適用于移動設備)。注意,所有進程都是在客戶端完成的,即不向服務端發送圖像。因此,各位無需擔心在運行這段代碼時的隱私問題。
在接下來的篇幅里,我將闡述pico.js的理論背景及其工作原理。
Pico對象監測框架
2013年,Markus團隊在一個技術報告中介紹了這一由JavaScript實現的pico.js代碼庫。它是參考C語言實現的,我們可在GitHub上獲取其源碼:https://github.com/nenadmarkus/pico。我們密切關注其實現方法,因為我們不打算復制學習過程,而僅關注它的運行。這背后的原因是,我們最好學習帶有官方代碼的檢測器,將其加載到JavaScript中并執行進程,如此就帶有獨特的優勢(比如跨操作系統與設備的強大的可移植性)。
Pico對象檢測框架是流行的Viola-Jones方法的一個改進。
Viola-Jones方法是基于區域分類的概念。這意味著在圖像的每個合理位置和尺度上都使用分類器。這個區域枚舉過程的可視化如下圖所示:
該分類器試圖判斷當前區域是否存在人臉。最后,獲取到的人臉區域將根據重疊程度進行聚類。鑒于每張圖像都有很多區域,在這實時進程中有兩個小技巧:
分類級聯由一系列分類器組成。這些分類器中的每一個都能正確識別幾乎所有的人臉,并丟棄一小部分非人臉區域。如果一個圖像區域通過了級聯的所有成員,那么它就被認定為人臉。通過(設計)序列中靠前的分類器比靠后的分類器更簡單,這種效果得到了進一步放大。級聯分類算法如下圖所示:
每個階段包括一個分類器Cn,它既可以拒絕圖像區域(R),也可以接受圖像區域(A)。一旦被拒絕,該區域將不會進入下一級聯成員。如果沒有一個分類器拒絕該區域,我們認為它是一張人臉。
在Viola-Jones框架中,每個分類器Cn都基于Haar-like特性。這使得每個區域可通過名為積分圖像的預算結構來進行O(1)計算時間。
然而,積分圖像也有一些缺點。最明顯的缺點是,這種數據結構需要額外的內存來儲存:通常是unit8輸入圖像的4倍。另外一個問題是構建一個完整的圖像所需的時間(也與輸入的像素數有關)。在功能有限的小型硬件上處理大的圖像也可能會有問題。這種方法的一個更微妙的問題是它的優雅性:隨之而來的問題是我們是否能夠創建一個不需要這種結構、并且具有所有重要屬性的框架。
Pico框架對每個分類器Cn用像素對比測試取代了Haar-like特性,形式如下:
其中R是一個圖像區域,(Xi,Yi)表示用于比較像素值的位置。注意,這種測試可以應用于各種尺寸的區域,而不需要任何專門的數據結構,這與Haar-like的特性不同。這是通過將位置(Xi,Yi)存儲在標準化坐標中(例如,(Xi,Yi)在[?1,1]×[?1,1]中),并乘以當前區域的比例。這就是pico實現多尺度檢測功能的思路。
由于此類測試很簡單,又因混疊和噪聲而存在潛在問題,我們有必要將大量測試應用于該區域,以便對其內容進行推理。在pico框架中,這是通過
這可以用數學符號表示,如下:
其中Tt(R)表示決策樹Tt在輸入區域R上生成的標量輸出。由于每個決策樹都由若干個像素比較測試組成,這些測試可以根據需要調整大小,因此運行分類階段Cn的計算復雜度與區域大小無關。
每個Cn決策樹都是AdaBoost的變體。接下來以這種方式將閾值設置為Cn的輸出,以獲取期望的真陽率(例如0.995)。所有得分低于這個閾值的區域都不認為是人臉。添加級聯的新成員,直到達到預期的假陽率。請參閱原出版物學習相關細節內容。
正如簡介中說的那樣,我們不會復制pico的學習過程,而僅關注它的運行。如果您想學習自定義對象/人臉檢測器,請使用官方的實現方法。Pico.js能夠加載二進制級聯文件并有效地處理圖像。接下來的小節將解釋如何使用pico.js來檢測圖像中的人臉。
pico.js的組件
庫的組成部分如下:
通過<script src="pico.js"></script>(或它的壓縮版本) 引入并進行一些預處理后,就可以使用這些工具了。我們將討論對圖像進行人臉檢測的JS代碼(GitHub repo中的代碼)。但愿這能詳盡說明使用該庫的方法。實時演示也有說明。
實例化區域分類器
區域分類器應識別圖像區域是否為人臉。其思路是在整個圖像中運行這個分類器,以獲得其中的所有面孔(稍后詳細介紹)。Pico.js的區域分類過程封裝在一個函數中,其原型如下:
function(r, c, s, pixels, ldim) { /* ... */} /* ... */ }
前三個參數(r、c和s)指定區域的位置(其中心的行和列)及其大小。pixels陣列包含圖像的灰度強度值。參數ldim規定從圖像的一行移動到下一行的方式(在諸如OpenCV的庫中稱為stride)。也就是說,從代碼中可以看出(r,c)位置的像素強度為[r*ldim + c]像素。該函數會返回一個浮點值,表示該區域的得分。如果分數大于或等于0.0,則該區域認定為人臉。如果分數低于0.0,則該區域認定為非人臉,即屬于背景類。
Pico.js中pico.unpack_cascade過程將二進制的級聯作為參數,將其解壓并返回一個帶有分類過程和分類器數據的閉包函數。我們用它初始化區域分類過程,以下是詳細說明。
官方pico的人臉檢測級聯稱為facefinder。它由近450個決策樹組成,每個決策樹的深度為6,它們集成一個25級聯。該級聯將在我們是實驗中用到,它能對正臉圖像以適當的檢測速率進行實時處理,正如實時演示看到的那樣。
facefinder級聯可以直接從官方的github庫上下載,代碼寫為:
var facefinder_classify_region=function(r, c, s, pixels, ldim) {return -1.0;};var cascadeurl='https://raw.githubusercontent.com/nenadmarkus/pico/c2e81f9d23cc11d1a612fd21e4f9de0921a5d0d9/rnt/cascades/facefinder';fetch(cascadeurl).then(function(response) { response.arrayBuffer().then(function(buffer) { var bytes=new Int8Array(buffer); facefinder_classify_region=pico.unpack_cascade(bytes); console.log('* cascade loaded'); })})function(r, c, s, pixels, ldim) {return -1.0;}; var cascadeurl='https://raw.githubusercontent.com/nenadmarkus/pico/c2e81f9d23cc11d1a612fd21e4f9de0921a5d0d9/rnt/cascades/facefinder'; fetch(cascadeurl).then(function(response) { response.arrayBuffer().then(function(buffer) { var bytes=new Int8Array(buffer); facefinder_classify_region=pico.unpack_cascade(bytes); console.log('* cascade loaded'); }) })
首先,將facefinder_classify_region初始化,即任何圖像區域先認定為非人臉(它總是返回-1.0)。接下來,我們使用Fetch API從cascadeurl URL中獲取級聯二進制數據。這是一個異步調用,我們不能即刻獲取到數據。最后,在獲取到響應數據后,將其轉換為int8數組并傳遞給pico.unpack_cascade,然后pico.unpack_cascade生成正確的facefinder_classify_region函數。
將facefinder_classify_region函數應用于圖像中每個區域的合理位置和等級以便檢測到所有的人臉。這個過程將在下一小節中解釋。
在圖像上運行分類器
假定HTML body內有一個canvas元素,一個image標簽和一個帶有onclick回調的button標簽。用戶一旦點擊了人臉檢測按鈕,檢測過程就開始了。
下面的JS代碼用于繪制內容和圖像,并獲取原始像素值(紅、綠、藍+ alpha的格式):
var img=document.getElementById('image');var ctx=document.getElementById('canvas').getContext('2d');ctx.drawImage(img, 0, 0);var rgba=ctx.getImageData(0, 0, 480, 360).data; // the size of the image is 480x360 (width x height)document.getElementById('image'); var ctx=document.getElementById('canvas').getContext('2d'); ctx.drawImage(img, 0, 0); var rgba=ctx.getImageData(0, 0, 480, 360).data; // the size of the image is 480x360 (width x height)
下面,我們編寫一個輔助函數,將輸入的RGBA數組轉換為灰度:
function rgba_to_grayscale(rgba, nrows, ncols) { var gray=new Uint8Array(nrows*ncols); for(var r=0; r<nrows; ++r) for(var c=0; c<ncols; ++c) // gray=0.2*red + 0.7*green + 0.1*blue gray[r*ncols + c]=(2*rgba[r*4*ncols+4*c+0]+7*rgba[r*4*ncols+4*c+1]+1*rgba[r*4*ncols+4*c+2])/10; return gray;} var gray=new Uint8Array(nrows*ncols); for(var r=0; r<nrows; ++r) for(var c=0; c<ncols; ++c) // gray=0.2*red + 0.7*green + 0.1*blue gray[r*ncols + c]=(2*rgba[r*4*ncols+4*c+0]+7*rgba[r*4*ncols+4*c+1]+1*rgba[r*4*ncols+4*c+2])/10; return gray; }
現在我們準備調用這個過程,它將在整個圖像中運行facefinder_classify_region函數:
image={ "pixels": rgba_to_grayscale(rgba, 360, 480), "nrows": 360, "ncols": 480, "ldim": 480}params={ "shiftfactor": 0.1, // move the detection window by 10% of its size "minsize": 20, // minimum size of a face "maxsize": 1000, // maximum size of a face "scalefactor": 1.1 // for multiscale processing: resize the detection window by 10% when moving to the higher scale}// run the cascade over the image// dets is an array that contains (r, c, s, q) quadruplets// (representing row, column, scale and detection score)dets=pico.run_cascade(image, facefinder_classify_region, params);"pixels": rgba_to_grayscale(rgba, 360, 480), "nrows": 360, "ncols": 480, "ldim": 480 } params={ "shiftfactor": 0.1, // move the detection window by 10% of its size "minsize": 20, // minimum size of a face "maxsize": 1000, // maximum size of a face "scalefactor": 1.1 // for multiscale processing: resize the detection window by 10% when moving to the higher scale } // run the cascade over the image // dets is an array that contains (r, c, s, q) quadruplets // (representing row, column, scale and detection score) dets=pico.run_cascade(image, facefinder_classify_region, params);
注意,人臉的最小尺寸默認設置為20。這太小了,對于大部分應用程序來說都是不必要的。但還需要注意的是,運行速度在很大程度上取決于此參數。對于實時應用程序,應該將此值設置為100。但是,設置的最小尺寸需匹配示例圖像。
檢測過程完成后,數組dets包含表單(r,c,s,q),其中r,c,s指定人臉區域的位置(行,列)和大小,q表示檢測分數。該地區得分越高,越有可能是人臉。
我們可以將得到的檢測結果渲染到畫布上:
qthresh=5.0for(i=0; i<dets.length; ++i) // check the detection score // if it's above the threshold, draw it if(dets[i][3]>qthresh) { ctx.beginPath(); ctx.arc(dets[i][1], dets[i][0], dets[i][2]/2, 0, 2*Math.PI, false); ctx.lineWidth=3; ctx.strokeStyle='red'; ctx.stroke(); }<dets.length; ++i) // check the detection score // if it's above the threshold, draw it if(dets[i][3]>qthresh) { ctx.beginPath(); ctx.arc(dets[i][1], dets[i][0], dets[i][2]/2, 0, 2*Math.PI, false); ctx.lineWidth=3; ctx.strokeStyle='red'; ctx.stroke(); }
我們需要根據經驗設置變量qthresh(5.0剛好,適用于facefinder級聯和靜止圖像中的人臉檢測)。典型的檢測結果是這樣的:
我們可以看到每張臉周圍都有多個探測器。這個問題用非極大值抑制來解決,在下一小節中解釋。
原始檢測的非極大值抑制(聚類)
非極大值抑制聚類的目的是將重疊的人臉區域融合在一起。每個集群的代表是其中得分最高的一次檢測(該方法因此而得名)。它的分數更新為集群中所有檢測分數的總和。
pico.js中的實現方式是:
dets=pico.cluster_detections(dets, 0.2); // set IoU threshold to 0.20.2); // set IoU threshold to 0.2
IoU閾值設置為0.2。這意味著兩個重疊大于該值的檢測將合并在一起。
現在的結果是這樣的:
我們已經學習了使用pico.js檢測靜止圖像中人臉的基本知識。值得注意的是,pico方法不如基于深度學習的現代人臉檢測器強大。然而,pico非常快,這使得它成為許多應用程序的首選,比如那些需要實時處理的應用程序。
在視頻中使用pico.js進行實時人臉檢測
由于pico.js產生的檢測噪聲比較大,我們開發了一種時間記憶模塊,在處理實時視頻時可減輕少此問題。該方法用于上述實時演示中,顯著提高了主觀檢測質量。
其思想是將幾個連續幀的檢測結合起來,以準確判斷給定區域是否為人臉。這是通過實例化一個電路緩沖區來實現的,該緩沖區包含從最后一個f幀檢測到的信號:
var update_memory=pico.instantiate_detection_memory(5); // f is set to 5 in this example// f is set to 5 in this example
update_memory閉包封裝了電路緩沖區和刷新數據的代碼。返回的數組包含來自最后f幀的檢測。
現在我們不再從單幀中檢測聚類,而是在聚類之前進行累加:
dets=pico.run_cascade(image, facefinder_classify_region, params);dets=update_memory(dets); // accumulates detections from last f framesdets=pico.cluster_detections(dets, 0.2); // set IoU threshold to 0.2 dets=update_memory(dets); // accumulates detections from last f frames dets=pico.cluster_detections(dets, 0.2); // set IoU threshold to 0.2
最終的分類閾值qthresh會顯著提高,這會減少假陽性的數量,而不會顯著影響到真陽率。
轉載自:https://blog.csdn.net/csdnnews/article/details/92841099
*請認真填寫需求信息,我們會在24小時內與您取得聯系。