AI人工智能分析-人脸识别和分析(人脸检测跟踪、获取特征长度、提取用于人脸特征、比较相似度)

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。
人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。
人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。

可以模拟分析大部分物体,识别率在97%左右,下面简单粘贴下头文件和使用方式,如果感兴趣的朋友可以联系我拿库和demo使用。提供的接口包含了:人脸检测跟踪接口、获取特征长度、提取用于人脸特征、比较相似度

头文件:

#ifndef ADFACESDK_H
#define ADFACESDK_H#ifdef __cplusplus
extern "C" {
#endif#define AD_FACE_API __attribute__((visibility("default")))// 通用错误码
typedef enum ad_errcode
{AD_OK = 0,                            // 成功 or 合法AD_EMPTY_FRAME_ERR = 20000,         // 空图像AD_UNSUPPORT_FORMAT_ERR,          // 图像格式不支持AD_ROI_ERR,                           // ROI设置失败AD_MINMAX_ERR,                        // 最小最大人脸设置失败AD_OUTOF_RANGE_ERR,                 // 数据范围错误AD_UNAUTHORIZED_ERR,              // 未授权AD_UNINITIALIZED_ERR,             // 尚未初始化AD_BUILDIN_MODEL_ABSENCE,           // 没有内置模型AD_PARAM_INVALID,                   // 参数无效AD_DETECT_MODEL_ERR,                // 加载检测模型失败AD_KEYPT_MODEL_ERR,                  // 加载关键点模型失败AD_QUALITY_MODEL_ERR,               // 加载质量评估模型失败AD_EXCEEDMAXHANDLE_ERR,                // 超过授权最大句柄数AD_DET_ERR,                         // 检测失败AD_TRACK_ERR,                        // 跟踪失败AD_KEYPT_ERR,                        // 提取关键点失败AD_ALIGN_ERR,                     // 对齐人脸失败AD_QUALITY_ERR,                        // 质量评估失败AD_RECOG_FEATURE_MODEL_ERR,            // 加载特征识别模型失败AD_RECOG_ALIGNEDFACE_ERR,          // 对齐图片数据错误AD_RECOG_MALLOCMEMORY_ERR,          // 预分配特征空间不足AD_RECOG_FILEDDATA_ERR,              // 用于注册的特征数据错误AD_RECOG_PROBEDATA_ERR,               // 用于检索的特征数据错误AD_RECOG_EXCEEDMAXFEASPEED,           // 超过授权最大提特征速度AD_RECOG_EXCEEDMAXCOMSPEED,           // 超过授权最大比对速度AD_ATTRI_AGEGENDER_MODEL_ERR,       // 加载年龄性别模型失败AD_ATTRI_EVAL_AGEGENDER_ERR,        // 年龄性别识别失败AD_ATTRI_NATIONALITY_MODEL_ERR,     // 加载国籍年龄段模型失败AD_ATTRI_EVAL_NATIONALITY_ERR,      // 国籍年龄段识别失败
} ad_errcode_t;// 图像
typedef struct
{char* data;                                // 图像数据int   width;                         // 宽, JPG等二进制图可不设int   height;                          // 高, JPG等二进制图可不设
} ad_img_t;// 人脸框
typedef struct
{int    x;int    y;int    width;int    height;
} ad_facepos_rect_t;// 对齐人脸
#define AD_ALIGNED_SIZE 128
typedef struct
{char   data[AD_ALIGNED_SIZE * AD_ALIGNED_SIZE];             // 图像数据int    width;                                            // 宽int    height;                                          // 高int    nChannels;                                       // 图像通道
} ad_aligned_face_t;// 关键点
#define AD_MAX_KEYPT_NUM 5
typedef struct
{float x;float y;
} ad_point_t;typedef struct
{ad_point_t     points[AD_MAX_KEYPT_NUM];                           // 关键点int               nkeypt;                                         // 关键点个数
} ad_keypt_t;// 人脸综合结构
typedef struct AD_face_res
{int                     trackId;           // 人脸ID(ID<0表示没有进入跟踪)ad_facepos_rect_t  faceRect;          // 人脸框ad_keypt_t             keypt;             // 关键点ad_aligned_face_t  faceAligned;       // 对齐人脸float                score;
} ad_face_res_t;// 接口参数
typedef struct
{int roiX;                              // roi, 默认整帧图像0, 0, 0, 0int roiY;int roiWidth;int roiHeight;int maxFaceNumPerImg;                   // 每帧最大人脸数,默认20int minSize;                          // 人脸尺寸范围, pc端默认(30 ~ 1000);移动端默认(100 ~ 400)int maxSize;int nMinNeighbors;                        // 一般1-10,越大检出率越低,但误检越小,默认3int globleDetFreq;                      // 全局检测频率, 默认10int b_track;                          // 是否开启单目标跟踪, 默认开启. 0关闭,非0开启int det_frame_for_new;                    // 预跟踪帧数,默认3int max_frame_since_lost;                // 跟丢到退出跟踪的帧数,默认150
}ad_det_param_t;/*** 功能:从模型文件创建检测器* 输入:*      pFaceModelFile      - 人脸检测模型文件*      pLicence            - 授权码* 输出:*      errCode             - 成功返回AD_OK,失败返回其他* 返回值:*        检测器句柄          - 成功返回句柄,失败返回0*/
AD_FACE_API
void* adCreateFaceHandle(ad_errcode_t* errCode,const char* pFaceModelFile,const char* pLicence,int bGpu);/*** 功能:释放检测器* 输入:*      pDetector - 检测器句柄* 输出:*      无* 返回值:*     无*/
AD_FACE_API
void adReleaseFaceHandle(void* pDetector);/*** 功能:获取检测器参数* 输入:*       pDetector    - 检测器句柄* 输出:*      param        - 检测器参数* 返回值:*       ad_errcode_t - 成功返回AD_OK,失败返回其他*/
AD_FACE_API
ad_errcode_t adGetFaceParam(void* pDetector, ad_det_param_t* param);/*** 功能:设置检测器参数(必须先调用ADGetFaceParam再使用此函数)* 输入:*      pDetector - 检测器句柄*        param     - 参数* 输出:*      无* 返回值:*        ad_errcode_t - 成功返回AD_OK,失败返回其他*/
AD_FACE_API
ad_errcode_t adSetFaceParam(void* pDetector, const ad_det_param_t* param);/*** 功能:人脸检测跟踪接口* 输入:*      pDetector    - 检测器句柄*       filePath    -  图片路径*        pFrameImg     - ad_img_t 信息,内存需要外部释放* 输出:*       pFaceBuffer  - 存放检测结果的数组*       nFaceNum     - 实际被检测到的人脸数* 返回值:*     ad_errcode_t - 成功返回AD_OK,失败返回其他*/
AD_FACE_API
ad_errcode_t adParseImage(void*          pDetector,char *         filePath,ad_img_t*      pFrameImg);AD_FACE_API
ad_errcode_t adReleaseImage(void*          pDetector,ad_img_t*      pFrameImg);/*** 功能:人脸检测跟踪接口* 输入:*      pDetector    - 检测器句柄*      pFrameImg    - 被检测图像*       iBuffLen     - 存放检测结果pFaceBuffer数组的元素个数* 输出:*        pFaceBuffer  - 存放检测结果的数组*       nFaceNum     - 实际被检测到的人脸数* 返回值:*     ad_errcode_t - 成功返回AD_OK,失败返回其他*/
AD_FACE_API
ad_errcode_t adFaceDetection(void*          pDetector,ad_img_t*      pFrameImg,ad_face_res_t* pFaceBuffer,int            iBuffLen,int*           nFaceNum);/*** 功能:获取特征长度* 输入:*       pRecogHandle - 识别句柄* 输出:*      无* 返回值:*       int          - 特征长度*/
AD_FACE_API
int adGetFeatureLength(void* pDetector);/*** 功能:提取用于人脸特征* 输入:*        pRecogHandle  - 识别句柄*      alignedFaces  - 对齐的人脸数组*      iAlignFaceNum - 对齐的人脸数组个数* 输出:*      pFeatueData    - 返回的特征数据,需要预先分配足够空间*      nFeatureLength - 传入pFeatueData的长度,输出实际使用的长度* 返回值:*      ad_errcode_t   - 成功返回AD_OK,失败返回其他*/
AD_FACE_API
ad_errcode_t adGetFeature(void*              pDetector,ad_aligned_face_t* alignedFace,void*              pFeatueData,int                nFeatureLength);/*** 功能:比较相似度* 输入:*       pRecogHandle  - 识别句柄*      pFirstFeature    - 第一个特征*      pSecondFeature  - 第二个特征*      nFeatureLength  - 用于注册的特征长度* 输出:*      pScores       - 返回的相似度分数* 返回值:*        ad_errcode_t  - 成功返回AD_OK,失败返回其他*/
AD_FACE_API
ad_errcode_t adComputeMatchScore(void*   pDetector,const void* pFirstFeature,const void* pSecondFeature,int         nFeatureLength,float*      pScores);#ifdef __cplusplus
}
#endif#endif // ADFACESDK_H

使用方法:

#include <iostream>
#include <stdlib.h>
#include <assert.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <time.h>
#include "adfacesdk.h"using namespace std;#define MAX_FACES 200#define DGB printfint unit_test(int argc,char *argv[])
{ad_errcode_t    errCode;ad_img_t        stFrameImg;ad_face_res_t   FaceBuffer[MAX_FACES];int             nFaceNum=0;float           Scores;if(argc!=4){printf("%s modelfile image1 image2\n",argv[0]);return -1;}int off=0;int counter=0;while(true){if(off>1)off=0;void* pDetector=adCreateFaceHandle(&errCode,argv[1],NULL,off++);assert(pDetector);int nFeatureLength=adGetFeatureLength(pDetector);assert(nFeatureLength>0);char *pFeatueData[2]={new char[nFeatureLength],new char[nFeatureLength]};DGB("nFeatureLength:%d\n",nFeatureLength);clock_t start,finish;double totaltime;start=clock();assert(AD_OK==adParseImage(pDetector,argv[2],&stFrameImg));assert(AD_OK==adFaceDetection(pDetector,&stFrameImg,FaceBuffer,MAX_FACES,&nFaceNum));free(stFrameImg.data);assert(nFaceNum==1);assert(AD_OK==adGetFeature(pDetector,&FaceBuffer[0].faceAligned,pFeatueData[0],nFeatureLength));assert(AD_OK==adParseImage(pDetector,argv[3],&stFrameImg));assert(AD_OK==adFaceDetection(pDetector,&stFrameImg,FaceBuffer,MAX_FACES,&nFaceNum));free(stFrameImg.data);assert(nFaceNum==1);assert(AD_OK==adGetFeature(pDetector,&FaceBuffer[0].faceAligned,pFeatueData[1],nFeatureLength));assert(AD_OK==adComputeMatchScore(pDetector,pFeatueData[0],pFeatueData[1],nFeatureLength,&Scores));DGB("Scores:%0.2f\n",Scores);finish=clock();totaltime=(double)(finish-start)/CLOCKS_PER_SEC;DGB("%d usetime:%f (sec)\n",counter,totaltime);adReleaseFaceHandle(pDetector);if(counter++%100==0)printf("counter:%d\n",counter);break;}return 0;
}int unit_test_list(int argc,char *argv[])
{if(argc!=2){printf("%s modelfile\n",argv[0]);return -1;}ad_errcode_t    errCode;ad_img_t        stFrameImg;ad_face_res_t   FaceBuffer[MAX_FACES];int             nFaceNum=0;void* pDetector=adCreateFaceHandle(&errCode,argv[1],NULL,1);assert(pDetector);int nFeatureLength=adGetFeatureLength(pDetector);assert(nFeatureLength>0);char *pFeatueData[2]={new char[nFeatureLength],new char[nFeatureLength]};DGB("nFeatureLength:%d\n",nFeatureLength);std::ifstream fin("test_images_list.txt", std::ios::in);char line[8192] = { 0 };int counter=0;while (fin.getline(line, sizeof(line))){nFaceNum=0;clock_t start,finish;double totaltime;start=clock();assert(AD_OK==adParseImage(pDetector,line,&stFrameImg));assert(AD_OK==adFaceDetection(pDetector,&stFrameImg,FaceBuffer,MAX_FACES,&nFaceNum));free(stFrameImg.data);for(int i=0;i<nFaceNum;i++){assert(AD_OK==adGetFeature(pDetector,&FaceBuffer[i].faceAligned,pFeatueData[0],nFeatureLength));}finish=clock();totaltime=(double)(finish-start)/CLOCKS_PER_SEC;DGB("[%08d] Count:%04d usetime:%0.2f (sec) %s\n",counter++,nFaceNum,totaltime,line);}fin.clear();fin.close();return true;
}int main(int argc,char *argv[])
{unit_test(argc,argv);//unit_test_list(argc,argv);
}

AI人工智能分析-人脸识别和分析(人脸检测跟踪、获取特征长度、提取用于人脸特征、比较相似度)相关推荐

  1. 国标GB28181(EasyGBS)/RTSP/HIKSDK/EHOME协议视频智能分析平台EasyCVR人脸识别智能分析功能拓展

    计算机视觉技术作为人工智能(AI)技术发展的重要应用之一已经在我们的日常生活中屡见不鲜,AI人脸识别智能分析是基于人的脸部特征信息进行身份识别的一种生物识别技术,通常采用摄像机或摄像头采集含有人脸的图 ...

  2. 计算机视觉子方向,计算机视觉方向简介 | 人脸识别中的活体检测算法综述

    原标题:计算机视觉方向简介 | 人脸识别中的活体检测算法综述 本文转载自"SIGAI人工智能学习与实践平台"(ID:SIGAICN) 导言 1. 什么是活体检测? 判断捕捉到的人脸 ...

  3. 苹果手机人脸识别不了是什么原因_iPhone和安卓手机的人脸识别有什么区别?

    文/极客修小编 iPhone怎么识别人脸 今天一则新闻引起了我的注意 苹果供应商AMS宣布,推出全新的"behind OLED"红外接近传感器.刘海中的红外传感器TCS3701,能 ...

  4. 人脸识别中的活体检测算法

    人脸识别中的活体检测算法综述 1. 什么是活体检测? 判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击(如:彩色纸张打印人脸图,电子设备屏幕中的人脸数字图像 以及 面具 等) 2. 为什么需要活体检测? ...

  5. 浅析人脸识别中的活体检测算法的几种类型

    人脸识别技术在各种有安全性需求的身份识别鉴定场景有着广泛应用,例如手机电脑解锁, 企业住宅安全管理,公安司法刑侦等领域.目前已经有了越来越多的基于人脸识别的应用,例如我们现在应用极广的"刷脸 ...

  6. [转]人脸识别中的活体检测

    https://zhuanlan.zhihu.com/p/25401788 早在指纹识别应用中就有针对于活体手指的检测技术,即使机器只对真人活体指纹产生识别反应,对其他一切物质不作识别,用于指纹识别产 ...

  7. 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...

    微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...

  8. 【机器学习】基于LDA主题模型的人脸识别专利分析

    作者 | Soren Gran 编译 | VK 来源 | Towards Data Science 介绍 作为一名数据科学家,文本数据提出了一个独特的挑战:虽然金融.年龄和温度数据可以立即被注入线性回 ...

  9. Python通过人脸识别全面分析好友,一起看透你的“朋友圈”!

    微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...

最新文章

  1. C#实现的三种方式实现模拟键盘按键
  2. 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手
  3. 常见分数值归一化方法
  4. MYC编译器源码分析之程序入口
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的毕业论文设计管理系统
  6. python 点击按钮回去entry值_python中tkinter入门之Checkbutton,Radiobutton和Entry
  7. Docker教程小白实操入门(3)--如何启动一个已经停止的容器
  8. 微信活动报名源码php,fb1357 Thinkphp活动报名发布微信小程序源码 聚会活动报名小程序含说明...
  9. docker代理设置ssl证书_家用主机 篇六:群晖Docker配置SSL证书实现https安全访问
  10. 利用文本挖掘技术来找出《天龙八部》中的“小鲜词”
  11. python抓取数据包_python抓数据包
  12. 惠而浦扫地机器人充不进电_惠而浦 扫地狗等扫地机器人清扫效果差
  13. LVS 引入keepalived自动切换机制
  14. 欧拉函数φ(x)相关性质及计算
  15. 公交线路查询系统 C++实现 图
  16. ESP8266Wi-Fi数据通讯
  17. 看看人家Java 集合处理/ 空值处理/ 异常处理多么优雅,一看就经验丰富!
  18. 物权法全文内容有哪些呢-广告外链_网站SEO优化中,关键词内链与外链如何规划?...
  19. 复印机维修保养的常识
  20. 详解编码器和解码器电路:定义,工作原理,应用,真值表

热门文章

  1. Yarn上(Hadoop上)跑Spark出现Retring connect to server. 集群间机器无法连接的问题
  2. JavaWeb-仿小米商场(8) 订单支付[沙箱支付]
  3. 密码必须包含至少一个大写一个小写一个数字一个特殊字符的正则
  4. ubuntu Times-Roman 字体安装
  5. 超火的举牌加油小人生成器MATLAB复刻版(app designer)
  6. 几种常见web 容器比较
  7. 使用Python读取和处理安卓传感器数据与CSV读取
  8. 7-6 输出三角形面积和周长 (15分)
  9. 【期权课堂】第3课 如何像交易股票那样交易期权?
  10. 离职的哪些理由千万不能说呢