TA的每日心情 | 奋斗 2022-10-13 10:27 |
---|
签到天数: 216 天 连续签到: 1 天 [LV.7]常住居民III
|
upboard板子性能如此强悍,所以这里实现一个人脸识别的项目,关于人脸检测的程序比较多,不过这里主要来实现检测后的人脸识别,其中主要包括人脸定位人脸采集、人脸保存和人脸识别。
实验环境:Windows平台 OpenCV2.4.9
硬件:Upboard板卡 Uvc摄像头
首先通过摄像头获取当前采集到图像
- camera_frame = Camera_Get_A_Frame(capture);
复制代码
然后通过canny算子计进行并进行边缘轮廓提取得到人脸轮廓黑白图
- face_outline_canny_img = Face_Get_Face_Canny(face_outline_img); // 进行canny算子变换
复制代码
接着采集图像
- if(cmpTimes != 0)
- {
- // 如果采集未完成
- goto IDENTIFY_MODE;
- }
复制代码 最后进行人脸匹配
- int Face_Start_Recognition(IplImage *sampImg,int cmpTimes){
- int faceLibObjIndex[2]; // 存取匹配的人脸数据库行下标
- int faceObjArr[FACE_FACE_LIB_MAX_PICTURE] = {0};// 每个人的匹配次数数组
- int faceObjIndex = 0; // 匹配的人脸库行下标
- printf("\n===================================\n");
- printf("\n[消息] 识别中,请稍等···\n");
- /* 开始模板比较 返回人脸数据库的下角标 */
- faceLibObjIndex[0] = Face_TempLate_Campare(sampImg,CV_TM_CCORR); // 平方差匹配
- 法
- // faceLibObjIndex[0] = Face_TempLate_Campare(blackWhiteImg,CV_TM_SQDIFF); // 相关匹配法
- if(faceLibObjIndex[0] != -1){
- // 如果符合临界值
- faceObjArr[faceLibObjIndex[0]] += 1; // 锁
- 定的人次数 +1
- }
- if(cmpTimes == FACE_IDENTIFY_TIMES){
- // 识别规定的次数识别完成
- faceObjIndex = toolFindMaxIndex(faceObjArr); // 寻找锁定的人脸最多
- 次数的数组下标
- if(faceObjArr[faceObjIndex] == 0){ // 就
- 是说所有的人匹配率都是0
- printf("[识别结果] ---> 不存在该ID身份\n"); // 该人不存在
- Face_Write_Flag_File("2");// 写FLAG文件2
- }else{
- // 存在该人
- char *objNmae = Face_Read_Database_File_inLine(faceObjIndex + 1); // 读
- 取文件中的对应行 就是该人
- //printf("[识别结果] ---> %s \n",objNmae); // 打印显示该
- 人
- printf("[欢迎进入] ---> %s \n",objNmae);
- Face_Write_Flag_File("1");// 写FLAG文件1
- }
- printf("===================================\n");
- for(int i=0;i<FACE_FACE_LIB_MAX_PICTURE;i++){
- // printf("faceObjArr[%d] = %d\n",i,faceObjArr);
- faceObjArr = 0;
- // 清空锁定人脸暂时存取的数组
- }
- cmpTimes = 0;
- // 复位比较次数
- }else{
- // 还没识别完成
- cmpTimes++;
- // 比较次数 +1
- }
- return cmpTimes;
- }
复制代码 具体实现过程如下:
检测已有身份ID
可以看到识别出之前录入的身份ID,现在换个没有的ID识别
可以看到无法识别该身份ID
总结:从效果上来看,基本上完成了人脸识别的要求,再识别过程中图像采集过程相对也比较流畅,这也是与Upboard的性能有关,但识别过程中仍然存在误判情况,受背景干扰以及光线影响较大,大家可以对算法和程序进一步优化,减小误判率! |
|