查看: 3816|回复: 4

【UP-Board试用】+利用Upboard实现人脸身份识别

[复制链接]
  • TA的每日心情
    奋斗
    2022-10-13 10:27
  • 签到天数: 216 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2017-2-14 16:20:53 | 显示全部楼层 |阅读模式
    分享到:
       upboard板子性能如此强悍,所以这里实现一个人脸识别的项目,关于人脸检测的程序比较多,不过这里主要来实现检测后的人脸识别,其中主要包括人脸定位人脸采集、人脸保存和人脸识别。
    实验环境:Windows平台 OpenCV2.4.9
    硬件:Upboard板卡 Uvc摄像头

       首先通过摄像头获取当前采集到图像
    1. camera_frame = Camera_Get_A_Frame(capture);
    复制代码
    4.JPG


    然后通过canny算子计进行并进行边缘轮廓提取
    得到人脸轮廓黑白图
    1.         face_outline_canny_img = Face_Get_Face_Canny(face_outline_img);                // 进行canny算子变换
    复制代码
    3.JPG

    接着采集图像
    5.JPG


                         
    1.   if(cmpTimes != 0)
    2.                         {                                                                                

    3.                                                         // 如果采集未完成
    4.                                 goto IDENTIFY_MODE;
    5.                         }
    复制代码
    最后进行人脸匹配
    1. int Face_Start_Recognition(IplImage *sampImg,int cmpTimes){
    2.         int faceLibObjIndex[2];                        // 存取匹配的人脸数据库行下标
    3.         int faceObjArr[FACE_FACE_LIB_MAX_PICTURE] = {0};// 每个人的匹配次数数组
    4.         int faceObjIndex = 0;                        // 匹配的人脸库行下标

    5.         printf("\n===================================\n");
    6.         printf("\n[消息]        识别中,请稍等···\n");        
    7.         /* 开始模板比较 返回人脸数据库的下角标 */
    8.         faceLibObjIndex[0] = Face_TempLate_Campare(sampImg,CV_TM_CCORR);                // 平方差匹配

    9. 法        
    10.         // faceLibObjIndex[0] = Face_TempLate_Campare(blackWhiteImg,CV_TM_SQDIFF);        // 相关匹配法

    11.         if(faceLibObjIndex[0] != -1){                                                                        

    12. // 如果符合临界值
    13.                 faceObjArr[faceLibObjIndex[0]] += 1;                                                // 锁

    14. 定的人次数 +1
    15.         }
    16.         if(cmpTimes == FACE_IDENTIFY_TIMES){                                                               

    17. // 识别规定的次数识别完成

    18.                 faceObjIndex = toolFindMaxIndex(faceObjArr);                        // 寻找锁定的人脸最多

    19. 次数的数组下标
    20.                 if(faceObjArr[faceObjIndex] == 0){                                                // 就

    21. 是说所有的人匹配率都是0
    22.                         printf("[识别结果] ---> 不存在该ID身份\n");                        // 该人不存在
    23.                         Face_Write_Flag_File("2");// 写FLAG文件2
    24.                 }else{                                                                                       

    25.                 // 存在该人
    26.                         char *objNmae = Face_Read_Database_File_inLine(faceObjIndex + 1);        // 读

    27. 取文件中的对应行 就是该人
    28.                         //printf("[识别结果] ---> %s \n",objNmae);                        // 打印显示该


    29.                         printf("[欢迎进入] ---> %s \n",objNmae);               
    30.                         Face_Write_Flag_File("1");// 写FLAG文件1
    31.                 }
    32.                 printf("===================================\n");

    33.                 for(int i=0;i<FACE_FACE_LIB_MAX_PICTURE;i++){
    34.                         // printf("faceObjArr[%d] = %d\n",i,faceObjArr);
    35.                         faceObjArr = 0;                                                               

    36.         // 清空锁定人脸暂时存取的数组
    37.                 }
    38.                 cmpTimes = 0;                                                                                

    39.         // 复位比较次数
    40.         }else{                                                                                                

    41.                 // 还没识别完成
    42.                 cmpTimes++;                                                                                

    43.                 // 比较次数 +1
    44.         }

    45.         return cmpTimes;
    46. }
    复制代码
    具体实现过程如下:
    检测已有身份ID
    7.JPG


    9.JPG


    11.JPG


    可以看到识别出之前录入的身份ID,现在换个没有的ID识别
    13.JPG


    14.JPG

      可以看到无法识别该身份ID

    总结:从效果上来看,基本上完成了人脸识别的要求,再识别过程中图像采集过程相对也比较流畅,这也是与Upboard的性能有关,但识别过程中仍然存在误判情况,受背景干扰以及光线影响较大,大家可以对算法和程序进一步优化,减小误判率!
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-1-30 09:58
  • 签到天数: 1491 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2017-2-14 16:41:11 | 显示全部楼层
    好牛啊         
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-8-27 21:30
  • 签到天数: 219 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2017-2-14 17:12:42 | 显示全部楼层
    这个厉害了,是我后面想做的!感谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-22 23:57
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-2-15 08:43:47 | 显示全部楼层
    这个厉害啦  
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-4-21 09:44
  • 签到天数: 26 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2017-2-15 09:08:49 | 显示全部楼层
    有意思,楼主挺厉害的
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 10:10 , Processed in 0.156317 second(s), 27 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.