開源項目 OpenHarmony是每個人的 OpenHarmony
鐘祿平
OpenHarmony知識體系工作組
以下內容來自嘉賓分享,不代表開放原子開源基金會觀點簡介
隨著時代的進步,全民刷臉已經成為一種新型的生活方式,這也是全球科技進步的又一階梯,人臉識別技術已經成為一種大趨勢,無論在智慧出行、智能家居、智慧辦公等場景均有較廣泛的應用場景,本文介紹了基于SeetaFace2人臉識別引擎在OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)上實現人臉識別的AI能力。什么是SeetaFace2
SeetaFace2是由中科視拓(北京)科技有限公司開發并使用BSD開源協議開源出來的一款人臉識別引擎庫,其搭建了一套全自動人臉識別系統所需的三個核心模塊,即:人臉檢測模塊FaceDetector、面部關鍵點定位模塊 FaceLandmarker 以及人臉特征提取與比對模塊FaceRecognizer。除了三個核心模塊外,它還提供了兩個輔助模塊FaceTracker和QualityAssessor用于人臉跟蹤和質量評估。下圖是SeetaFace2人臉識別算法組件: ?SeetaFace2能做什么
SeetaFace2采用標準C++開發,全部模塊均不依賴任何第三方庫,支持x86架構(Windows、Linux)和ARM架構,可以輕松地移植到OpenHarmony上。SeetaFace2支持的上層應用包括但不限于人臉門禁、無感考勤、人臉比對等。如下圖展示了SeetaFace2支持的應用矩陣: ?SeetaFace2人臉識別原理
SeetaFace2人臉識別引擎搭建了一套全自動人臉識別系統所需的三個核心模塊:1.人臉檢測(FaceDetector) 在圖像中首先定位出人臉的位置,然后裁剪(crop)出包含人臉位置的矩形框,一般還會進行填充、縮放到指定尺寸,還可能會對人臉圖像進行標準化normalize;2.面部關鍵點定位(FaceLandmarker) 提取人臉關鍵點坐標,然后使用放射變化或相似變換等進行人臉對齊變換。面部關鍵點定位的目標就是把所有的人臉圖片統一到一個固定的正臉姿態大小,從而提高模型對人臉姿態變化的魯棒性。3.人臉特征提取與比對模塊(FaceRecognizer) 主要使用深度學習等方法提取人臉的特征,然后通過特征對比,計算人臉的相似度。 SeetaFace2人臉識別的具體過程如下圖所示: ?兩步帶你實現人臉識別
關于SeetaFace2的如何移植到OpenHarmony移植請參照文檔:SeetaFace2移植開發文檔(請參考文章末尾相關文檔鏈接),這里我們主要分析通過SeetaFace2如何實現人臉識別。 從上面人臉識別的流程圖可以知道人臉識別主要包含2個大塊:人臉注冊和人臉識別。1. 人臉注冊 人臉注冊首先需要對傳入的圖片進行人臉檢測,當檢測到人臉后會提取對應的人臉信息,并將信息保存用于對比。 人臉信息檢測實現:
std::vector DetectFace(const SeetaImageData &image)
{
auto faces = FD.detect(image);
return std::vector(faces.data, faces.data + faces.size);
}
其中FD是三大模塊中的人臉檢測模塊(FaceDetector),其加載了人臉檢測模型:
seeta::ModeSttingFD_model("fd_2_00.dat",seeta::ModeStting::CPU,0);
而返回SeetaFaceInfo數據則是檢測到的人臉信息,其中包含了人臉個數,人臉區域坐標以及人臉置信度得分數據。然后通過人臉信息檢測返回的數據進行面部關鍵點定位。
面部關鍵點定位實現:
std::vector DetectPoints(const SeetaImageData &image, const SeetaRect &face)
{
std::vector points(PD.number());
PD.mark(image, face, points.data());
return std::move(points);
}
其中的PD是三大模塊中的關鍵點定位模塊(FaceLandmarker),關鍵點定位需要根據面部特征模型進行對比分析的,SeetaFace2提供2種面部特征模型。分別是通過5點定位和通過81點定位,此實例中我們使用的是81點定位模型:
seeta::ModeSttingPD_model("pd_2_00_pts81.dat",seeta::ModeStting::CPU,0);
獲取完面部特征數據后,SeetaFace2提供了一個人臉數據庫進行保存對應的人臉信息數據,以此來完成人臉信息的注冊:
int64_t Register(const SeetaImageData &image)
{
auto faces = DetectFace(image);
auto points = DetectPoints(image, faces.pos);
return FDB.Register(image, points.data());
}
其中FDB是SeetaFace2實現的FaceDatabase數據庫管理。該數據庫也為人臉識別提供面部特征數據的對比結果,面部特征對比也需要一個人臉數據模型:
seeta::ModeSttingFDB_model("fr_2_00.dat",seeta::ModeStting::CPU,0);
通過以上步驟,我們就已經完成了人臉的注冊。
2. 人臉識別
人臉識別和人臉注冊步驟類似,都需要先檢測人臉信息及提取面部特征數據。唯一的區別在于提取面部特征時需要進行人臉質量評估,最后根據質量評估結果進行識別,具體實現如下:
int64_t RecogizePoint(const SeetaImageData &image)
{
int64_t result = 0;
seeta::ModeStting FD_model("fd_2_00.dat", seeta::CPU, 0); // 此3步創建3個模型
seeta::ModeStting PD_model("pd_2_00_pts81.dat", seeta::CPU, 0);
seeta::ModeStting FDB_model("fr_2_00.dat", seeta::CPU, 0);
seeta::FaceDetector FD(FD_model); // 創建人臉檢測模塊
seeta::FaceLandmarker PD(PD_model); // 創建面部關鍵點定位模塊
seeta::FaceDatabase FDB(FDB_model); // 創建人臉特征信息數據庫模塊
auto faces = FD.detect(image); // 獲取人臉特征信息
for (SeetaFaceInfo &face : faces) { // 對比每個人臉信息
int64_t index = -1;
float similarity = 0;
std::vector points(PD.number());
PD.mark(image, face, points.data()); // 獲取人臉框信息
auto score = QA.evaluate(image, face.pos, points.data()); // 獲取人臉質量評分
if (score == 0) {
HILOGI("no ignored
");
} else {
auto queried = FDB.QueryTop(image, points.data(), 1, &index, &similarity); // 從注冊的人臉數據庫中對比相似度
if (queried < 1) {
continue;
}
if (similarity > threshold) {
HILOGI("get recognized face!!
");
result++;
}
}
}
return result;
}
參考鏈接
OpenHarmony知識體系工作組https://gitee.com/openharmony-sig/knowledge
SeetaFace2移植開發文檔https://gitee.com/openharmony-sig/knowledge_demo_smart_home/blob/master/docs/SeetaFace2/%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%BA%93%E7%9A%84%E7%A7%BB%E6%A4%8D.md
SeetaFace2 GitHub源碼地址https://github.com/seetafaceengine/SeetaFace2
SeetaFace2 Demo樣例地址https://gitee.com/openharmony-sig/knowledge_demo_travel/tree/master/docs/FaceRecognition_CXX/README.md
本文為技術分析文章,僅供大家學習、研討及交流使用。如在實際應用場景中收集人臉圖像,應遵守《個人信息保護法》《最高人民法院關于審理使用人臉識別技術處理個人信息相關民事案件適用法律若干問題的規定》等關于處理和保護敏感個人信息、面部生物識別信息的規定。
原文標題:帶你玩轉OpenHarmony AI:基于Seetaface2的人臉識別
文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
-
鴻蒙
+關注
關注
57文章
2392瀏覽量
42980 -
OpenHarmony
+關注
關注
25文章
3744瀏覽量
16492
原文標題:帶你玩轉OpenHarmony AI:基于Seetaface2的人臉識別
文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論