Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 www色视频在线观看,www.日本精品,国产逼逼视频

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          C# 人臉識(shí)別庫

          C# 人臉識(shí)別庫

          文地址:https://www.cnblogs.com/view12138/p/13185907.html


          NET 人臉識(shí)別庫 ViewFaceCore

          這是基于 SeetaFace6 人臉識(shí)別開發(fā)的 .NET 平臺(tái)下的人臉識(shí)別庫這是一個(gè)使用超簡單的人臉識(shí)別庫這是一個(gè)基于 .NET Standard 2.0 開發(fā)的庫這個(gè)庫已經(jīng)發(fā)布到 NuGet ,你可以一鍵集成到你的項(xiàng)目此項(xiàng)目可以免費(fèi)商業(yè)使用

          ?、開源

          開源協(xié)議:Apache-2.0GitHub地址: ViewFaceCore十分感謝您的小星星

          一、示例

          示例項(xiàng)目地址:WinForm 攝像頭人臉檢測示例項(xiàng)目效果:

          二、使用

          一分鐘在你的項(xiàng)目里集成人臉識(shí)別

          1. 創(chuàng)建你的 .NET 應(yīng)用

          .NET Standard >=2.0.NET Core >=2.0.NET Framework >=4.6.1^2

          2. 使用 Nuget 安裝 ViewFaceCore

          • Author : View
          • Version >=0.1.1

          此 Nuget 包會(huì)自動(dòng)添加依賴的 C++ 庫,以及最精簡的識(shí)別模型。如果需要其它場景的識(shí)別模型,請下載 SeetaFace6 模型文件。

          3. 在項(xiàng)目中編寫你的代碼

          • 按照 說明 自己編寫
          • 或者參考以下代碼

          簡單的調(diào)用示例

          ViewFaceCore 使用示例

          三、說明

          命名空間:ViewFaceCore.Sharp : 人臉識(shí)別類所在的命名空間

          • 屬性說明:

          屬性名稱類型說明默認(rèn)值ModelPathstring獲取或設(shè)置模型路徑 [ 如非必要,請勿修改 ]./model/FaceTypeFaceType獲取或設(shè)置人臉類型FaceType.LightMarkTypeMarkType獲取或設(shè)置人臉關(guān)鍵點(diǎn)類型MarkType.LightDetectorSettingDetectorSetting獲取或設(shè)置人臉檢測器設(shè)置new DetectorSetting()

          • 方法說明:

           1 using System.Drawing;
           2 using ViewFaceCore.Sharp;
           3 using ViewFaceCore.Sharp.Model;
           4 
           5 // 識(shí)別 bitmap 中的人臉,并返回人臉的信息。
           6 FaceInfo[] FaceDetector(Bitmap);
           7 
           8 // 識(shí)別 bitmap 中指定的人臉信息 info 的關(guān)鍵點(diǎn)坐標(biāo)。
           9 FaceMarkPoint[] FaceMark(Bitmap, FaceInfo);
          10 
          11 // 提取人臉特征值。
          12 float[] Extract(Bitmap, FaceMarkPoint[]);
          13 
          14 // 計(jì)算特征值相似度。
          15 float Similarity(float[], float[]);
          16 
          17 // 判斷相似度是否為同一個(gè)人。
          18 bool IsSelf(float);

          四、實(shí)現(xiàn)

          此項(xiàng)目受到了 SeetaFaceEngine.NET 項(xiàng)目的啟發(fā)

          這個(gè)項(xiàng)目本質(zhì)上來說還是調(diào)用了 SeetaFace 的 C++ 類庫來實(shí)現(xiàn)的人臉識(shí)別功能。針對本人遇到過的相關(guān)的類庫的使用都不太方便,而且使用的 SeetaFace 的版本較老,故萌生了自己重新開發(fā)的想法。

          本項(xiàng)目在開發(fā)完成之后為了方便調(diào)用,采用了 Nuget 包的形式,將所有需要的依賴以及最小識(shí)別模型一起打包。在使用時(shí)非常簡單,只需要 nuget 安裝,編寫代碼,運(yùn)行即可,不需要多余的操作。

          首先查看 SeetaFace ,已經(jīng)更新到了v3(v6即v3)(上面前輩的項(xiàng)目是基于v1開發(fā)的),最新版本暫時(shí)沒有開源,但是可以免費(fèi)商用。然后是根據(jù)以前的經(jīng)驗(yàn)和 SeetaFace6 文檔的指導(dǎo),以及前輩的項(xiàng)目,做了以下操作。

          1.對SeetaFace6 的接口進(jìn)行了 C++ 形式的封裝。

          目前主要實(shí)現(xiàn)了 人臉檢測,關(guān)鍵點(diǎn)提取,特征值提取,特征值對比幾個(gè)人臉識(shí)別中的基礎(chǔ)接口。有了這幾個(gè)接口,可以完整的實(shí)現(xiàn)一套人臉識(shí)別和驗(yàn)證的流程。

          • c++封裝的接口代碼如下:

          C++ 封裝層

          2.采用 C# 對上訴接口進(jìn)行了導(dǎo)入。

          因?yàn)镃++的項(xiàng)目測CPU架構(gòu)區(qū)分x86和x64,所以C# 層也需要區(qū)分架構(gòu)封裝

          C# 導(dǎo)入層

          3.采用 C# 的面向?qū)ο蟮姆庋b

          因?yàn)镃#的項(xiàng)目默認(rèn)都是 AnyCPU,所以為了簡化調(diào)用,在這一層封裝的時(shí)候增加了架構(gòu)判斷,當(dāng)在你的項(xiàng)目中引用的時(shí)候,不用做任何修改。

          且因?yàn)镃++的C#導(dǎo)入方法在和原生的C#寫法略有差異,且數(shù)據(jù)的轉(zhuǎn)換和傳遞比較麻煩,所以類庫中對外隱藏了 C# 導(dǎo)入層。并使用大家都更熟悉的C#的面向?qū)ο蟮姆绞竭M(jìn)行進(jìn)一步的封裝和簡化。

          C# 面向?qū)ο髮?/p>

          五、也許…

          • 此項(xiàng)目還未實(shí)現(xiàn) SeetaFace6 中的許多特性,也許:

              想起 GitHub 密碼,持續(xù)更新…    刪除代碼倉庫跑路…

          • 如果在使用過程中遇到問題,你也許可以:

              在 GitHub 報(bào)告Bug…    向我 發(fā)送郵件

          源:中國僑網(wǎng)

          中國僑網(wǎng)3月25日電 據(jù)中國駐斐濟(jì)大使館微信公眾號(hào)消息,根據(jù)統(tǒng)一部署,中國駐斐濟(jì)大使館已于2021年8月31日啟用“中國領(lǐng)事”APP受理護(hù)照、旅行證業(yè)務(wù),相比傳統(tǒng)申請方式更加便捷,受到同胞們歡迎。現(xiàn)結(jié)合近期出現(xiàn)的問題,對2021年12月12日布的《駐斐濟(jì)使館關(guān)于啟用“中國領(lǐng)事”APP護(hù)照、旅行證在線辦理功能的通知(更新)》進(jìn)一步修訂如下:

          一、下載注冊

          “中國領(lǐng)事”APP可通過蘋果應(yīng)用商店、騰訊應(yīng)用寶商店、小米應(yīng)用商店、華為應(yīng)用商店或掃描下圖中的二維碼下載。下載完成后打開APP,使用中國國內(nèi)手機(jī)號(hào)或個(gè)人電子郵箱進(jìn)行注冊,根據(jù)提示完成實(shí)名認(rèn)證后即可登陸使用。

          二、業(yè)務(wù)辦理流程

          (一)信息填報(bào):登陸APP后,選擇“護(hù)照/旅行證”業(yè)務(wù)模塊(適用于申請護(hù)照或旅行證頒發(fā)、換發(fā)或補(bǔ)發(fā)人員),根據(jù)提示要求逐步、完整、準(zhǔn)確地填寫個(gè)人基本信息,在線簽字確認(rèn)《國籍狀況聲明書》,按要求格式上傳證件照片、現(xiàn)持護(hù)照資料頁等材料。駐斐濟(jì)使館僅受理在斐濟(jì)、瑙魯、圖瓦盧的中國公民通過“中國領(lǐng)事”APP提交的有關(guān)申請,不受理其他跨國申請。注意:申請換發(fā)護(hù)照人員,一般要求當(dāng)前所持護(hù)照有效期不足1年,如申請?zhí)崆皳Q發(fā),請將理由一并上傳;申請補(bǔ)發(fā)護(hù)照人員請按照系統(tǒng)提示上傳情況說明。另外,“國外聯(lián)系電話”欄,請務(wù)必填寫申請人在中國境外的有效聯(lián)系電話。

          其中,證件照將直接用于護(hù)照制作,請務(wù)必上傳本人6個(gè)月內(nèi)近照,拍照時(shí)穿戴整齊、頭部及肩頸正直且居中、眼睛自然睜開、不露牙齒、不化濃妝,背景要求為白色或接近白色,無邊框。如選擇使用“中國領(lǐng)事”APP自帶拍照功能,建議請他人協(xié)助拍攝,不要露出自拍手臂、不要出現(xiàn)高低肩、低頭、眼睛看向下方、頭部歪斜等情況。請勿翻拍本人紙質(zhì)照片,此類照片清晰度不夠,無法制證。有關(guān)電子護(hù)照人像照片規(guī)格詳細(xì)要求請點(diǎn)擊鏈接:ppt.mfa.gov.cn/appo/page/instruction.html。

          此外,如申請人耳朵較小,系統(tǒng)可能提示“證件照檢測不合格”,遇此情況,申請人可繼續(xù)申請,后臺(tái)審批時(shí)將進(jìn)行人工確認(rèn)。

          (二)身份驗(yàn)證:為確保相關(guān)證件申請人系本人操作,APP將對申請人進(jìn)行人臉識(shí)別。人臉識(shí)別失敗不影響申請人提交申請,但請務(wù)必由申請人本人完成人臉識(shí)別。如后臺(tái)審批時(shí),認(rèn)定人臉識(shí)別失敗系非本人出鏡所致,將發(fā)起視頻面審,影響辦理進(jìn)度。

          (三)提交訂單:完成上述步驟并成功提交訂單后,相關(guān)申請將提交使館審核。申請人可在“我的訂單”或“消息中心”跟蹤辦證進(jìn)度,使館工作人員將及時(shí)反饋審核進(jìn)展,視情在APP中留言要求補(bǔ)充上傳材料。

          所有上傳材料不合格、不完整的申請,都將被退回補(bǔ)充材料,請申請人按退回理由補(bǔ)充或替換有關(guān)材料,并再次提交申請。如不按要求進(jìn)行修改,直接再次提交,申請將被退回,不予通過。

          (四)視頻面審:如申請人為16周歲以下未成年人,或人臉識(shí)別未通過,或需進(jìn)一步核實(shí)有關(guān)信息,使館會(huì)要求與申請人通過APP進(jìn)行視頻面審。請申請人關(guān)注訂單狀態(tài),及時(shí)選擇預(yù)約時(shí)間,目前僅開放周二上午、周四上午兩個(gè)時(shí)間段。請申請人于選定時(shí)間段內(nèi)進(jìn)入視頻面試大廳,使館工作人員僅能夠?qū)σ堰M(jìn)入視頻面試大廳的申請者按順序發(fā)起視頻邀請。視頻面談過程中,請申請人配合使館工作人員進(jìn)行截圖操作,并回答相關(guān)提問。

          16周歲以下未成年人應(yīng)在一位法定監(jiān)護(hù)人(父親/母親/其他法定監(jiān)護(hù)人)陪同下,與使館工作人員通過APP進(jìn)行視頻面談。

          (五)郵寄材料:

          所有申請換發(fā)護(hù)照/旅行證人員:請?jiān)贏PP訂單狀態(tài)顯示“復(fù)審中”后,盡快將當(dāng)前所持證照送遞或郵寄至使館。地址:Chinese Embassy(back gate), 183 Queen Elizabeth Drive, SUVA,Ph: 00679-7137727。來館遞送人員,請?zhí)崆皩⒆C件包好,交給使館后門崗?fù)ぁW⒁猓鹤?022年3月29日起(以訂單顯示“復(fù)審中”時(shí)間計(jì)算)未收到申請人當(dāng)前所持護(hù)照/旅行證前,證照換發(fā)程序?qū)和!?/p>

          換發(fā)(含頒發(fā)、補(bǔ)發(fā))旅行證人員,還需請將申請人紙質(zhì)證件照片3張(2寸白底、正面免冠、頭部占比勿過大)一并送至使館。

          申請補(bǔ)發(fā)、頒發(fā)護(hù)照人員:無需送遞、郵寄任何材料。但證照補(bǔ)發(fā)周期長于換發(fā),且流程不同,請勿盲目辦理補(bǔ)發(fā)業(yè)務(wù)。

          (六)交費(fèi)取證

          當(dāng)前,每本護(hù)照/旅行證辦理收費(fèi)均為38斐幣,建議待APP辦證進(jìn)度顯示為“制證完成,待取證”后再繳費(fèi)。使館領(lǐng)事證件賬戶設(shè)于西太銀行(WESTPAC BANK),帳戶名:Chinese Embassy,賬戶號(hào):9802407073,請通過銀行柜臺(tái)存款或網(wǎng)銀轉(zhuǎn)賬繳費(fèi)。

          如在銀行柜臺(tái)辦理,請要求銀行收費(fèi)員在“Narrative”一欄填寫“中國領(lǐng)事”App中顯示的訂單號(hào)最后8位數(shù)(App中顯示的訂單號(hào)為18位字母加數(shù)字組合,例如:FJIAA3VNSE10289589,最后8位為10289589),取證時(shí)請務(wù)必?cái)y帶銀行收費(fèi)憑條原件。

          如通過網(wǎng)銀轉(zhuǎn)賬,請自行備注訂單號(hào)最后8位數(shù),截圖并打印轉(zhuǎn)賬憑證,取證時(shí)攜帶。

          當(dāng)前受新冠肺炎疫情影響,使館領(lǐng)事接案大廳有限開放。每月最后一周,使館將通過中國駐斐濟(jì)大使館官網(wǎng)“重要通知”欄目和“駐斐濟(jì)使館”微信公眾號(hào),同時(shí)發(fā)布下月領(lǐng)事接案大廳開放時(shí)間。所有APP辦證進(jìn)度顯示為“制證完成,待取證”且完成繳費(fèi)的訂單,均可于接案大廳開放期間取證。取證時(shí)請持繳費(fèi)憑證,使館將現(xiàn)場注銷并退還此前收到的舊證照、同時(shí)發(fā)放新證照。

          三、注意事項(xiàng)

          (一)受疫情影響,所有護(hù)照、旅行證業(yè)務(wù)均請通過“中國領(lǐng)事”APP申請辦理,確有特殊困難無法使用APP申請人員,請發(fā)送郵件至:bjclfj@gmail.com,使館將酌情遠(yuǎn)程指導(dǎo)或協(xié)調(diào)領(lǐng)事協(xié)助志愿者上門指導(dǎo)。

          (二)APP實(shí)名認(rèn)證注冊目前僅支持中國普通護(hù)照或身份證號(hào)碼(后續(xù)可能增加其他認(rèn)證方式)。如無上述證件,可使用他人已實(shí)名認(rèn)證的賬號(hào)辦理。

          (三)所有“復(fù)審中”并已收到舊證照的訂單,一般將于15-25天內(nèi)收到“制證完成,待取證”信息提示。申請人如對辦理進(jìn)展有疑問,請發(fā)送郵件至bjclfj@gmail.com咨詢。

          (四)當(dāng)前,通過“中國領(lǐng)事”APP申辦的護(hù)照不包括申請人指紋信息。無指紋不影響護(hù)照正常使用,僅在入境中國時(shí)無法自助通關(guān),須走人工通道

          (五)當(dāng)前,“中國領(lǐng)事”APP僅開通普通護(hù)照辦理功能。需要辦理公務(wù)護(hù)照、香港特區(qū)護(hù)照等其他國際旅行證件人員,請發(fā)送郵件至bjclfj@gmail.com咨詢。

          (六)使館不會(huì)要求申請人到西太銀行(WESTPAC BANK)以外的銀行或網(wǎng)上支付費(fèi)用,請謹(jǐn)防假借使館名義的各類電信詐騙。

          超市、地鐵、車站等很多場景中,人臉識(shí)別已經(jīng)被廣泛應(yīng)用,但是這個(gè)功能究竟是怎么實(shí)現(xiàn)的?

          在本文中,將以 pico.js 庫為例,分享實(shí)現(xiàn)輕量級人臉識(shí)別功能的具體開發(fā)過程 。

          pico.js 是一個(gè)只有 200 行純 JavaScript 代碼的人臉檢測庫,具備實(shí)時(shí)檢測功能(在實(shí)際環(huán)境中可達(dá)到200+ FPS),壓縮后僅 2kB 。

          開源代碼地址:https://github.com/tehnokv/picojs;

          簡介

          本文將介紹pico.js,這一由JavaScript編寫的用于人臉檢測的代碼庫,并展示其工作原理。盡管現(xiàn)已有類似的項(xiàng)目,但我們的目標(biāo)是提供更小、計(jì)算效率更高的替代方案。

          在深入考究其細(xì)節(jié)前,建議各位用計(jì)算機(jī)的網(wǎng)絡(luò)攝像頭體驗(yàn)一下人臉檢測的實(shí)時(shí)演示(也適用于移動(dòng)設(shè)備)。注意,所有進(jìn)程都是在客戶端完成的,即不向服務(wù)端發(fā)送圖像。因此,各位無需擔(dān)心在運(yùn)行這段代碼時(shí)的隱私問題。

          在接下來的篇幅里,我將闡述pico.js的理論背景及其工作原理。

          Pico對象監(jiān)測框架

          2013年,Markus團(tuán)隊(duì)在一個(gè)技術(shù)報(bào)告中介紹了這一由JavaScript實(shí)現(xiàn)的pico.js代碼庫。它是參考C語言實(shí)現(xiàn)的,我們可在GitHub上獲取其源碼:https://github.com/nenadmarkus/pico。我們密切關(guān)注其實(shí)現(xiàn)方法,因?yàn)槲覀儾淮蛩銖?fù)制學(xué)習(xí)過程,而僅關(guān)注它的運(yùn)行。這背后的原因是,我們最好學(xué)習(xí)帶有官方代碼的檢測器,將其加載到JavaScript中并執(zhí)行進(jìn)程,如此就帶有獨(dú)特的優(yōu)勢(比如跨操作系統(tǒng)與設(shè)備的強(qiáng)大的可移植性)。

          Pico對象檢測框架是流行的Viola-Jones方法的一個(gè)改進(jìn)。

          Viola-Jones方法是基于區(qū)域分類的概念。這意味著在圖像的每個(gè)合理位置和尺度上都使用分類器。這個(gè)區(qū)域枚舉過程的可視化如下圖所示:

          該分類器試圖判斷當(dāng)前區(qū)域是否存在人臉。最后,獲取到的人臉區(qū)域?qū)⒏鶕?jù)重疊程度進(jìn)行聚類。鑒于每張圖像都有很多區(qū)域,在這實(shí)時(shí)進(jìn)程中有兩個(gè)小技巧:

          1. 將分類器歸類為級聯(lián)分類器;
          2. 級聯(lián)的每個(gè)成員都可以在0(1)時(shí)間內(nèi)根據(jù)區(qū)域的大小進(jìn)行計(jì)算。

          分類級聯(lián)由一系列分類器組成。這些分類器中的每一個(gè)都能正確識(shí)別幾乎所有的人臉,并丟棄一小部分非人臉區(qū)域。如果一個(gè)圖像區(qū)域通過了級聯(lián)的所有成員,那么它就被認(rèn)定為人臉。通過(設(shè)計(jì))序列中靠前的分類器比靠后的分類器更簡單,這種效果得到了進(jìn)一步放大。級聯(lián)分類算法如下圖所示:

          每個(gè)階段包括一個(gè)分類器Cn,它既可以拒絕圖像區(qū)域(R),也可以接受圖像區(qū)域(A)。一旦被拒絕,該區(qū)域?qū)⒉粫?huì)進(jìn)入下一級聯(lián)成員。如果沒有一個(gè)分類器拒絕該區(qū)域,我們認(rèn)為它是一張人臉。

          在Viola-Jones框架中,每個(gè)分類器Cn都基于Haar-like特性。這使得每個(gè)區(qū)域可通過名為積分圖像的預(yù)算結(jié)構(gòu)來進(jìn)行O(1)計(jì)算時(shí)間。

          然而,積分圖像也有一些缺點(diǎn)。最明顯的缺點(diǎn)是,這種數(shù)據(jù)結(jié)構(gòu)需要額外的內(nèi)存來儲(chǔ)存:通常是unit8輸入圖像的4倍。另外一個(gè)問題是構(gòu)建一個(gè)完整的圖像所需的時(shí)間(也與輸入的像素?cái)?shù)有關(guān))。在功能有限的小型硬件上處理大的圖像也可能會(huì)有問題。這種方法的一個(gè)更微妙的問題是它的優(yōu)雅性:隨之而來的問題是我們是否能夠創(chuàng)建一個(gè)不需要這種結(jié)構(gòu)、并且具有所有重要屬性的框架。

          Pico框架對每個(gè)分類器Cn用像素對比測試取代了Haar-like特性,形式如下:

          其中R是一個(gè)圖像區(qū)域,(Xi,Yi)表示用于比較像素值的位置。注意,這種測試可以應(yīng)用于各種尺寸的區(qū)域,而不需要任何專門的數(shù)據(jù)結(jié)構(gòu),這與Haar-like的特性不同。這是通過將位置(Xi,Yi)存儲(chǔ)在標(biāo)準(zhǔn)化坐標(biāo)中(例如,(Xi,Yi)在[?1,1]×[?1,1]中),并乘以當(dāng)前區(qū)域的比例。這就是pico實(shí)現(xiàn)多尺度檢測功能的思路。

          由于此類測試很簡單,又因混疊和噪聲而存在潛在問題,我們有必要將大量測試應(yīng)用于該區(qū)域,以便對其內(nèi)容進(jìn)行推理。在pico框架中,這是通過

          1. 將測試組合考慮到?jīng)Q策樹中;
          2. 有多個(gè)這樣的決策樹,通過對它們的輸出求和,形成級聯(lián)成員Cn。

          這可以用數(shù)學(xué)符號(hào)表示,如下:

          其中Tt(R)表示決策樹Tt在輸入?yún)^(qū)域R上生成的標(biāo)量輸出。由于每個(gè)決策樹都由若干個(gè)像素比較測試組成,這些測試可以根據(jù)需要調(diào)整大小,因此運(yùn)行分類階段Cn的計(jì)算復(fù)雜度與區(qū)域大小無關(guān)。

          每個(gè)Cn決策樹都是AdaBoost的變體。接下來以這種方式將閾值設(shè)置為Cn的輸出,以獲取期望的真陽率(例如0.995)。所有得分低于這個(gè)閾值的區(qū)域都不認(rèn)為是人臉。添加級聯(lián)的新成員,直到達(dá)到預(yù)期的假陽率。請參閱原出版物學(xué)習(xí)相關(guān)細(xì)節(jié)內(nèi)容。

          正如簡介中說的那樣,我們不會(huì)復(fù)制pico的學(xué)習(xí)過程,而僅關(guān)注它的運(yùn)行。如果您想學(xué)習(xí)自定義對象/人臉檢測器,請使用官方的實(shí)現(xiàn)方法。Pico.js能夠加載二進(jìn)制級聯(lián)文件并有效地處理圖像。接下來的小節(jié)將解釋如何使用pico.js來檢測圖像中的人臉。

          pico.js的組件

          庫的組成部分如下:

          • 從級聯(lián)數(shù)據(jù)實(shí)例化區(qū)域分類功能的過程;
          • 在圖像上運(yùn)行此分類器以檢測面部的過程;
          • 對獲得的檢測結(jié)果進(jìn)行聚類的過程;
          • 時(shí)序記憶模塊。

          通過<script src="pico.js"></script>(或它的壓縮版本) 引入并進(jìn)行一些預(yù)處理后,就可以使用這些工具了。我們將討論對圖像進(jìn)行人臉檢測的JS代碼(GitHub repo中的代碼)。但愿這能詳盡說明使用該庫的方法。實(shí)時(shí)演示也有說明。

          實(shí)例化區(qū)域分類器

          區(qū)域分類器應(yīng)識(shí)別圖像區(qū)域是否為人臉。其思路是在整個(gè)圖像中運(yùn)行這個(gè)分類器,以獲得其中的所有面孔(稍后詳細(xì)介紹)。Pico.js的區(qū)域分類過程封裝在一個(gè)函數(shù)中,其原型如下:

           
          function(r, c, s, pixels, ldim) { /* ... */}
           /*
           ...
           */
          }
          

          前三個(gè)參數(shù)(r、c和s)指定區(qū)域的位置(其中心的行和列)及其大小。pixels陣列包含圖像的灰度強(qiáng)度值。參數(shù)ldim規(guī)定從圖像的一行移動(dòng)到下一行的方式(在諸如OpenCV的庫中稱為stride)。也就是說,從代碼中可以看出(r,c)位置的像素強(qiáng)度為[r*ldim + c]像素。該函數(shù)會(huì)返回一個(gè)浮點(diǎn)值,表示該區(qū)域的得分。如果分?jǐn)?shù)大于或等于0.0,則該區(qū)域認(rèn)定為人臉。如果分?jǐn)?shù)低于0.0,則該區(qū)域認(rèn)定為非人臉,即屬于背景類。

          Pico.js中pico.unpack_cascade過程將二進(jìn)制的級聯(lián)作為參數(shù),將其解壓并返回一個(gè)帶有分類過程和分類器數(shù)據(jù)的閉包函數(shù)。我們用它初始化區(qū)域分類過程,以下是詳細(xì)說明。

          官方pico的人臉檢測級聯(lián)稱為facefinder。它由近450個(gè)決策樹組成,每個(gè)決策樹的深度為6,它們集成一個(gè)25級聯(lián)。該級聯(lián)將在我們是實(shí)驗(yàn)中用到,它能對正臉圖像以適當(dāng)?shù)臋z測速率進(jìn)行實(shí)時(shí)處理,正如實(shí)時(shí)演示看到的那樣。

          facefinder級聯(lián)可以直接從官方的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初始化,即任何圖像區(qū)域先認(rèn)定為非人臉(它總是返回-1.0)。接下來,我們使用Fetch API從cascadeurl URL中獲取級聯(lián)二進(jìn)制數(shù)據(jù)。這是一個(gè)異步調(diào)用,我們不能即刻獲取到數(shù)據(jù)。最后,在獲取到響應(yīng)數(shù)據(jù)后,將其轉(zhuǎn)換為int8數(shù)組并傳遞給pico.unpack_cascade,然后pico.unpack_cascade生成正確的facefinder_classify_region函數(shù)。

          將facefinder_classify_region函數(shù)應(yīng)用于圖像中每個(gè)區(qū)域的合理位置和等級以便檢測到所有的人臉。這個(gè)過程將在下一小節(jié)中解釋。

          在圖像上運(yùn)行分類器

          假定HTML body內(nèi)有一個(gè)canvas元素,一個(gè)image標(biāo)簽和一個(gè)帶有onclick回調(diào)的button標(biāo)簽。用戶一旦點(diǎn)擊了人臉檢測按鈕,檢測過程就開始了。

          下面的JS代碼用于繪制內(nèi)容和圖像,并獲取原始像素值(紅、綠、藍(lán)+ 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)
          

          下面,我們編寫一個(gè)輔助函數(shù),將輸入的RGBA數(shù)組轉(zhuǎn)換為灰度:

           
          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;
          }
          

          現(xiàn)在我們準(zhǔn)備調(diào)用這個(gè)過程,它將在整個(gè)圖像中運(yùn)行facefinder_classify_region函數(shù):

           
          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);
          

          注意,人臉的最小尺寸默認(rèn)設(shè)置為20。這太小了,對于大部分應(yīng)用程序來說都是不必要的。但還需要注意的是,運(yùn)行速度在很大程度上取決于此參數(shù)。對于實(shí)時(shí)應(yīng)用程序,應(yīng)該將此值設(shè)置為100。但是,設(shè)置的最小尺寸需匹配示例圖像。

          檢測過程完成后,數(shù)組dets包含表單(r,c,s,q),其中r,c,s指定人臉區(qū)域的位置(行,列)和大小,q表示檢測分?jǐn)?shù)。該地區(qū)得分越高,越有可能是人臉。

          我們可以將得到的檢測結(jié)果渲染到畫布上:

           
          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();
           }
          

          我們需要根據(jù)經(jīng)驗(yàn)設(shè)置變量qthresh(5.0剛好,適用于facefinder級聯(lián)和靜止圖像中的人臉檢測)。典型的檢測結(jié)果是這樣的:

          我們可以看到每張臉周圍都有多個(gè)探測器。這個(gè)問題用非極大值抑制來解決,在下一小節(jié)中解釋。

          原始檢測的非極大值抑制(聚類)

          非極大值抑制聚類的目的是將重疊的人臉區(qū)域融合在一起。每個(gè)集群的代表是其中得分最高的一次檢測(該方法因此而得名)。它的分?jǐn)?shù)更新為集群中所有檢測分?jǐn)?shù)的總和。

          pico.js中的實(shí)現(xiàn)方式是:

           
          dets=pico.cluster_detections(dets, 0.2); // set IoU threshold to 0.20.2); // set IoU threshold to 0.2
          

          IoU閾值設(shè)置為0.2。這意味著兩個(gè)重疊大于該值的檢測將合并在一起。

          現(xiàn)在的結(jié)果是這樣的:

          我們已經(jīng)學(xué)習(xí)了使用pico.js檢測靜止圖像中人臉的基本知識(shí)。值得注意的是,pico方法不如基于深度學(xué)習(xí)的現(xiàn)代人臉檢測器強(qiáng)大。然而,pico非常快,這使得它成為許多應(yīng)用程序的首選,比如那些需要實(shí)時(shí)處理的應(yīng)用程序。

          在視頻中使用pico.js進(jìn)行實(shí)時(shí)人臉檢測

          由于pico.js產(chǎn)生的檢測噪聲比較大,我們開發(fā)了一種時(shí)間記憶模塊,在處理實(shí)時(shí)視頻時(shí)可減輕少此問題。該方法用于上述實(shí)時(shí)演示中,顯著提高了主觀檢測質(zhì)量。

          其思想是將幾個(gè)連續(xù)幀的檢測結(jié)合起來,以準(zhǔn)確判斷給定區(qū)域是否為人臉。這是通過實(shí)例化一個(gè)電路緩沖區(qū)來實(shí)現(xiàn)的,該緩沖區(qū)包含從最后一個(gè)f幀檢測到的信號(hào):

           
          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閉包封裝了電路緩沖區(qū)和刷新數(shù)據(jù)的代碼。返回的數(shù)組包含來自最后f幀的檢測。

          現(xiàn)在我們不再從單幀中檢測聚類,而是在聚類之前進(jìn)行累加:

           
          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會(huì)顯著提高,這會(huì)減少假陽性的數(shù)量,而不會(huì)顯著影響到真陽率。

          轉(zhuǎn)載自:https://blog.csdn.net/csdnnews/article/details/92841099


          主站蜘蛛池模板: 狠狠爱无码一区二区三区| 国产免费私拍一区二区三区| 极品少妇一区二区三区四区| 亚洲乱码一区二区三区在线观看| 国产精品一区二区在线观看| 精品国产一区二区三区无码| 午夜福利一区二区三区高清视频| 亚洲AⅤ视频一区二区三区| 国产怡春院无码一区二区 | 国产中的精品一区的| 国产日韩一区二区三区| 亚洲AV无码一区二区乱孑伦AS| 一区二区三区午夜| 亚洲av成人一区二区三区在线观看 | 日韩一区二区三区不卡视频| 国产福利91精品一区二区三区| 无码精品人妻一区二区三区中 | 波多野结衣精品一区二区三区| 日本国产一区二区三区在线观看| 国产经典一区二区三区蜜芽| 亚洲一区二区观看播放| 亚洲一区二区三区播放在线| 91精品一区二区综合在线| 精品国产aⅴ无码一区二区| 国产短视频精品一区二区三区| 久久久无码一区二区三区| 韩国福利一区二区美女视频| 亚洲综合av一区二区三区不卡| 成人免费一区二区三区在线观看| 精品少妇人妻AV一区二区| 成人区人妻精品一区二区不卡| 国产在线一区观看| 国产精品毛片a∨一区二区三区 | 国产伦精品一区二区三区不卡| 亚洲日韩AV无码一区二区三区人 | 一区二区三区免费电影| 中文字幕在线观看一区二区 | 久久无码精品一区二区三区| 一区二区三区人妻无码| 无码少妇一区二区| 欧美激情一区二区三区成人|