摘要:雙目攝像頭檢測(cè)方案雙目攝像頭檢測(cè)流程人臉檢測(cè)結(jié)果信息調(diào)整若攝像頭和攝像頭的成像不一致存在偏移旋轉(zhuǎn)鏡像等問(wèn)題,需要將傳遞給活體檢測(cè)的人臉信息人臉框人臉角度進(jìn)行調(diào)整。否則活體檢測(cè)將無(wú)法解析人臉,報(bào)錯(cuò)誤。
前幾天虹軟推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的變化如下:
? VIDEO模式新增faceId(類似于之前文章中提到的trackId)
? 新增IR活體檢測(cè)功能
? 新增IR、RGB的活體閾值設(shè)置
1. 定義
在連續(xù)的視頻幀中,當(dāng)一個(gè)人臉進(jìn)入視頻畫(huà)面直到離開(kāi),其faceId不變。
2. 應(yīng)用場(chǎng)景舉例
在門禁應(yīng)用場(chǎng)景下,若一個(gè)人長(zhǎng)時(shí)間停留在畫(huà)面中,借助faceId的功能,在此人的人臉特征提取成功后,可不再對(duì)此人的后續(xù)人臉信息進(jìn)行處理。
3. 注意事項(xiàng)
faceId在VIDEO模式下有意義;
faceId在IMAGE模式下無(wú)效。
1. 接口介紹
支持的顏色格式如下:
Windows: GRAY、DEPTH_U16、NV21、NV12、I420
Android: GRAY、DEPTH_U16、NV21
注:若圖像數(shù)據(jù)的顏色格式不在上述列表中,必須對(duì)圖像數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換。
2. IR活體檢測(cè)實(shí)現(xiàn)方案
? 單目攝像頭檢測(cè)方案(IR)
單目攝像頭檢測(cè)流程
注意:在Windows平臺(tái)下,若通過(guò)OpenCV獲取IR攝像頭的圖像數(shù)據(jù),由于其顏色格式為BGR_24,不能用于IR活體檢測(cè),需要轉(zhuǎn)成GRAY(或IR活體檢測(cè)接口支持的其他顏色格式),但BGR_24數(shù)據(jù)可直接用于人臉檢測(cè)。
? 雙目攝像頭檢測(cè)方案(IR + RGB)
雙目攝像頭檢測(cè)流程
人臉檢測(cè)結(jié)果信息調(diào)整 :若RGB攝像頭和IR攝像頭的成像不一致(存在偏移、旋轉(zhuǎn)、鏡像等問(wèn)題),需要將傳遞給IR活體檢測(cè)的人臉信息(人臉框、人臉角度)進(jìn)行調(diào)整。
3. 雙目IR活體檢測(cè)遇到的坑
在雙目的畫(huà)面有明顯的不一致的情況時(shí),若我們直接把RGB攝像頭的人臉檢測(cè)結(jié)果用于IR活體檢測(cè),很有可能會(huì)報(bào)81925(人臉置信度低)錯(cuò)誤。原來(lái),攝像頭回傳的數(shù)據(jù)和我們直接看到的畫(huà)面很可能是不一樣的,我們看到的畫(huà)面可能是經(jīng)過(guò)處理的(縮放、旋轉(zhuǎn)、鏡像等)。
? 檢測(cè)方法
最直觀的檢查方法就是將攝像頭數(shù)據(jù)顯示到屏幕上。只要我們把2個(gè)攝像頭回傳的數(shù)據(jù)顯示到屏幕上,就能了解兩個(gè)攝像頭數(shù)據(jù)的成像關(guān)系。例如Android平臺(tái)可使用以下方式查看NV21數(shù)據(jù):
示例流程
nv21 -> YuvImage -> jpg bytes -> bitmap -> ImageView。
示例代碼
@Override public void onPreview(final byte[] nv21, Camera camera) { ...... //30幀一次,把幀數(shù)據(jù)顯示到界面上(要是每幀都做就太卡了),若還是影響UI請(qǐng)放到子線程處理 if (index++ % 30 == 0) { YuvImage yuvImage = new YuvImage(nv21, ImageFormat.NV21, previewSize.width, previewSize.height, null); ByteArrayOutputStream baos = new ByteArrayOutputStream(); yuvImage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 100, baos); byte[] bytes = baos.toByteArray(); ivFrame.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length)); } ...... }
? 解決方案
1. RGB和IR攝像頭圖像數(shù)據(jù)的其中一個(gè)被左右鏡像
對(duì)于這種情況,我們?cè)趯GB數(shù)據(jù)的人臉檢測(cè)結(jié)果用于IR活體檢測(cè)時(shí),需要將其人臉框(rect)進(jìn)行左右鏡像調(diào)整。(Android demo中已提供左右鏡像的代碼):
/** * 人臉框水平鏡像 * * @param rect 人臉框 * @return 水平鏡像后的人臉框 */ private Rect mirrorRectHorizontal(Rect rect) { Rect newRect = new Rect(rect); newRect.right = previewSize.width - rect.left; newRect.left = previewSize.width - rect.right; return newRect; }
2. RGB和IR攝像頭圖像數(shù)據(jù)均被鏡像或均未被鏡像
對(duì)于這種情況,RGB數(shù)據(jù)的人臉檢測(cè)結(jié)果用于IR活體檢測(cè)時(shí),不需要進(jìn)行鏡像調(diào)整。
3. RGB和IR攝像頭圖像數(shù)據(jù)有旋轉(zhuǎn)關(guān)系
若有旋轉(zhuǎn)關(guān)系,我們不僅要旋轉(zhuǎn)人臉信息(FaceInfo)中的人臉框(rect),還需要修改人臉角度(orient)。否則IR活體檢測(cè)將無(wú)法解析人臉,報(bào)81925錯(cuò)誤。
(Android demo中已提供將orient單次旋轉(zhuǎn)90度的代碼):
/** * 獲取逆時(shí)針旋轉(zhuǎn)90度后的人臉角度 * * @param orient 人臉角度信息,即{@link FaceInfo#orient}屬性,由{@link FaceEngine#detectFaces(byte[], int, int, int, List)}接口獲取 * @return 旋轉(zhuǎn)后的人臉角度 */ private int rotateOrient(int orient) { switch (orient) { case FaceEngine.ASF_OC_0: return FaceEngine.ASF_OC_90; case FaceEngine.ASF_OC_90: return FaceEngine.ASF_OC_180; case FaceEngine.ASF_OC_180: return FaceEngine.ASF_OC_270; case FaceEngine.ASF_OC_270: return FaceEngine.ASF_OC_0; default: throw new IllegalArgumentException("unsupported orient "" + orient + """); } }
以上是個(gè)人使用的一點(diǎn)心得,如果需要下載虹軟sdk可以到官網(wǎng):https://ai.arcsoft.com.cn/pro...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/20072.html
摘要:引言使用了免費(fèi)的人臉識(shí)別算法,感覺(jué)還是很不錯(cuò)的,但是初次接觸的話會(huì)對(duì)一些接口的參數(shù)有些疑問(wèn)的。這里分享一下我對(duì)一些參數(shù)的驗(yàn)證結(jié)果這里以版本為例,基本一樣,希望能更好的幫助各位接入虹軟的人臉識(shí)別算法。 引言 使用了免費(fèi)的人臉識(shí)別算法,感覺(jué)還是很不錯(cuò)的,但是初次接觸的話會(huì)對(duì)一些接口的參數(shù)有些疑問(wèn)的。這里分享一下我對(duì)一些參數(shù)的驗(yàn)證結(jié)果(這里以windows版本為例,linux、android...
閱讀 2160·2021-11-24 09:39
閱讀 1654·2021-10-11 10:59
閱讀 2570·2021-09-24 10:28
閱讀 3456·2021-09-08 09:45
閱讀 1339·2021-09-07 10:06
閱讀 1744·2019-08-30 15:53
閱讀 2140·2019-08-30 15:53
閱讀 1474·2019-08-30 15:53