成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET基于虹軟人臉識別SDK 快速開發身份驗證和自助發卡應用

企業動態
借助人臉識別和身份證讀取,進行人證核驗。身份核驗通過后,發卡機會匹配后端數據,并將取卡人、取卡時間、卡片權限等信息寫入卡片,隨后吐出卡片,用戶取卡可用于后續通行的操作。

   去年下半年開始,本人從B/S轉戰C/S開發,相繼做了大大小小一些項目。最近的一個應用是運輸車輛通行卡自助收發應用,并第一次用到了人臉識別功能。作為該領域的初學者,我摸索著把項目搞定了,也復盤了一些開發經驗,總結出來給其他在項目上初次應用人臉識別的朋友參考。

  簡單來說,這個項目與社保卡自助發卡機、信用卡自助發卡機的原理有些類似,內容就是:

  借助人臉識別和身份證讀取,進行人證核驗。身份核驗通過后,發卡機會匹配后端數據,并將取卡人、取卡時間、卡片權限等信息寫入卡片,隨后吐出卡片,用戶取卡可用于后續通行的操作。

  關于發卡機部分,只需要把一些操作步驟進行封裝,通過串口發送命令就可以實現功能,身份證信息則通過讀卡器進行讀取。在開發的重點上,我把比較多的精力放在了初次嘗試的人臉識別功能上,基本流程如下圖:

  

 

  進一步簡單描述一下項目背景和需求:

  第一,之所以引入人臉識別,主要是為了保證本人取卡,專人??ǎ苊獯『兔坝?,確保信息可準確回溯。

  第2, 這個項目比較小,在人臉識別的功能上并沒有額外預算,所以首選免費的人臉識別算法。

  第3, 項目地點的網絡環境比較差,為避免因為網絡故障導致無法取卡,優先選擇可離線使用的人臉識別算法。

  第四,因為是自助取卡機,周圍沒人看顧,為避免冒領,人臉識別算法需要加入活體檢測功能。

  綜合以上幾點,我甄選之后采用了虹軟視覺開發平臺的ArcFace SDK。這款算法可以同時滿足免費使用、離線可用的需求,又自帶IR/RGB雙目活體檢測,可以高效、高質量的抵御假臉攻擊。另外,虹軟開發平臺最新出的ArcFace SDK 4.0版本,更新了針對佩戴口罩下的活體檢測和人臉識別功能。

  另外,ArcFace SDK的使用也比較簡單。在官網注冊開發者之后,新建應用,就能得到全新的APP_ID和SDK_KEY,之后下載開發包配置到程序中。

  

 

  人臉識別界面如下,左側是拍攝畫面,右邊是身份證照片以及識別反饋。

  

[[392552]]

 

  開發時用到了三個引擎,第一個是圖片模式下的人臉檢測引擎:

  #region圖片引擎pImageEngine初始化//初始化引擎uintdetectMode=DetectionMode.ASF_DETECT_MODE_IMAGE;//檢測臉部的角度優先值intdetectFaceOrientPriority=ASF_OrientPriority.ASF_OP_0_HIGHER_EXT;//人臉在圖片中所占比例,如果需要調整檢測人臉尺寸請修改此值,有效數值為2-32intdetectFaceScaleVal=16;//最大需要檢測的人臉個數intdetectFaceMaxNum=5;//引擎初始化時需要初始化的檢測功能組合intcombinedMask=FaceEngineMask.ASF_FACE_DETECT|FaceEngineMask.ASF_FACERECOGNITION|FaceEngineMask.ASF_AGE|FaceEngineMask.ASF_GENDER|FaceEngineMask.ASF_FACE3DANGLE;//初始化引擎,正常值為0,其他返回值請參考http://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=19&_dsign=dbad527eretCode=ASFFunctions.ASFInitEngine(detectMode,detectFaceOrientPriority,detectFaceScaleVal,detectFaceMaxNum,combinedMask,refpImageEngine);if(retCode==0){lbl_msg.Text=("圖片引擎初始化成功!\n");}else{lbl_msg.Text=(string.Format("圖片引擎初始化失敗!錯誤碼為:{0}\n",retCode));}#endregion

  第二個是視頻模式下的人臉檢測引擎:

  #region 視頻專用FR引擎

  detectFaceMaxNum = 1;

  combinedMask = FaceEngineMask.ASF_FACERECOGNITION | FaceEngineMask.ASF_FACE3DANGLE | FaceEngineMask.ASF_LIVENESS;

  retCode = ASFFunctions.ASFInitEngine(detectMode, detectFaceOrientPriority, detectFaceScaleVal, detectFaceMaxNum, combinedMask, ref pVideoImageEngine);

  Console.WriteLine("InitVideoEngine Result:" + retCode);

  if (retCode == 0)

  {

  lbl_msg.Text = ("視頻專用FR引擎初始化成功!\n");

  }

  else

  {

  lbl_msg.Text = (string.Format("視頻專用FR引擎初始化失敗!錯誤碼為:{0}\n", retCode));

  }

  // 攝像頭初始化

  filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);

  lbl_msg.Text = (string.Format("攝像頭初始化完成...\n"));

  #endregion

  第三個是視頻專用FR引擎,進行活體檢測:

  #region 視頻專用FR引擎

  detectFaceMaxNum = 1;

  combinedMask = FaceEngineMask.ASF_FACERECOGNITION | FaceEngineMask.ASF_FACE3DANGLE | FaceEngineMask.ASF_LIVENESS;

  retCode = ASFFunctions.ASFInitEngine(detectMode, detectFaceOrientPriority, detectFaceScaleVal, detectFaceMaxNum, combinedMask, ref pVideoImageEngine);

  Console.WriteLine("InitVideoEngine Result:" + retCode);

  if (retCode == 0)

  {

  lbl_msg.Text = ("視頻專用FR引擎初始化成功!\n");

  }

  else

  {

  lbl_msg.Text = (string.Format("視頻專用FR引擎初始化失敗!錯誤碼為:{0}\n", retCode));

  }

  // 攝像頭初始化

  filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);

  lbl_msg.Text = (string.Format("攝像頭初始化完成...\n"));

  #endregion

  視頻處理使用的是AForge.Video 視頻處理類庫,然后在電腦上接上USB攝像頭,通過此類庫就可以調用攝像頭的開關了,至于具體的人臉識別要放在視頻流渲染事件上了。

  首先將身份證放在身份證閱讀器上,獲取到身份信息,并把身份信息中的人臉照片拿出來作為人臉注冊照。利用ArcFcae SDK的相關接口,可以從注冊照中提取人臉識別特征值。

  

 

  隨后,我們要從攝像頭的視頻流中獲取一幀圖片,作為識別照也進行人臉識別特征值提取。值得注意的是,ArcFcae本身支持多人臉識別,但由于人證核驗為1:1人臉識別,因此為了排除多余人臉的干擾,我們可以選取檢測到的最大人臉,進行特征值提取。

  在獲得注冊照和識別照的特征值之后,就可以交給算法來做比對,得出一個相似度。注意,人臉識別算法是不會直接告訴你兩張照片是不是同一個人的,只會給出一個可能性。最終輸出的結果需要人為設置一個閾值,譬如相似度超過90%,我們就可以認定是同一個人。當然閾值也不是越高越好,具體設置需要根據項目的實際情況來做權衡。

  到這一步功能就算基本跑通了,但活體檢測功能還沒有加入。缺乏活體檢測的話,使用身份證照片、紙質打印照片甚至手機屏幕上的照片都能通過人臉識別。

  所以說,在自助設備這類無人值守場景下,活體檢測基本上不可或缺。虹軟ArcFace自帶的活體檢測有單目RGB活體檢測和IR雙目紅外活體檢測兩種。我因為只用了普通的RGB攝像頭,所以采用單目RGB活體檢測,這種算法主要分析采集摩爾紋、成像畸形、反射率等人像破綻,從而獲得活體檢測所需要的識別信息,對屏幕成像和紙張照片類攻擊有著良好防御性。

  多說一句,IR雙目紅外活體中會加入了紅外攝像頭,防攻擊效果是更好的,不過這個項目暫時沒有這么高的需求。

  int retCode_Liveness = -1;

  //RGB活體檢測

  ASF_LivenessInfo liveInfo = FaceUtil.LivenessInfo_RGB(pVideoImageEngine, imageInfo, multiFaceInfo, out retCode_Liveness);

  //判斷檢測結果

  if (retCode_Liveness == 0 && liveInfo.num > 0)

  {

  int isLive = MemoryUtil.PtrToStructure(liveInfo.isLive);

  isLiveness = (isLive == 1) ? true : false;

  }

  if (isLiveness)//活體檢測成功

  在加入活體檢測之后,整個人臉識別的流程基本就完整了。我發現在進行完所有流程后,還需要進行引擎的釋放,否則每次初始化一個引擎大概會需要50M左右的內存,多次操作之后就會出現因為內存泄漏而導致閃退的現象。

  

 

  這個做法能達到目的,但是比較僵硬,在咨詢虹軟開放平臺的技術專家后,我發現應該根據實際業務需求,在程序啟動時,有選擇的初始化對應的算法屬性,避免在運行中多次做初始化和反初始化的操作,否則會導致資源波動過大以及產生內存碎片。引擎在程序結束或當前界面關閉時釋放即可。

  總體而言比較順利,雖然是第一次集成人臉識別,這可能和ArcFace容易上手也有關系。希望這篇內容能對大家有幫助。

  GitHub已開源:https://github.com/yumaster/ReceiveCardAIO

責任編輯:張誠 來源: 互聯網
相關推薦

2013-07-21 18:32:13

iOS開發ASIHTTPRequ

2012-10-23 16:12:35

2009-07-29 12:55:44

ASP.NET身份驗證

2011-05-23 10:37:03

2013-12-06 09:18:44

2021-08-27 10:40:49

GitHubGitLinux

2010-09-06 11:24:47

CHAP驗證PPP身份驗證

2021-02-17 08:51:55

cookie身份驗證

2013-12-05 13:46:51

2022-03-14 13:53:01

基于風險的身份驗證RBA身份驗證

2014-06-27 10:31:52

2012-04-10 09:36:58

2011-02-21 10:54:45

2012-06-04 09:36:50

2009-07-29 16:47:40

ASP.NET表單身份

2024-05-06 00:00:00

ASP.NET授權機制

2025-04-25 07:00:00

身份驗證CISO無密碼

2022-03-23 12:02:48

身份驗證RBAMFA

2024-03-05 17:43:19

2010-07-17 00:57:52

Telnet身份驗證
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久新视频 | 毛片久久久 | 超碰免费在线观看 | 欧美成人一区二免费视频软件 | 麻豆视频国产在线观看 | 亚洲欧美成人影院 | 色本道| 91n成人 | 欧美jizzhd精品欧美巨大免费 | 国产精品自拍一区 | 国产一区 | 久久一区二区免费视频 | 国产精品一区二区免费 | 521av网站| 91欧美精品成人综合在线观看 | 色www精品视频在线观看 | 超碰国产在线 | 国产一区二区三区色淫影院 | 精品一区二区三区91 | 一区二区日本 | 精品久久久久一区二区国产 | 国产精品爱久久久久久久 | 性色的免费视频 | 国产激情在线 | 激情福利视频 | 亚洲国产情侣自拍 | 国产日韩一区二区 | 精品福利在线 | 久久aⅴ乱码一区二区三区 91综合网 | 中文字幕一级毛片 | 免费人成在线观看网站 | 久草网址 | 黄色成人在线观看 | 日本久久网站 | 久久免费福利 | 一区二区三区国产精品 | 99精品视频在线观看免费播放 | 成人三级网址 | 国产美女自拍视频 | 天天射中文| 欧美一级在线免费 |