基于OPENCV的人脸识别项目

该代码示例展示了一个使用OpenCV进行实时人脸识别的程序,通过AIP接口与云端服务交互,当检测到的人脸与预设的相似度超过80%时,会识别出对应人员。程序首先捕获摄像头图像,然后进行灰度处理和人脸检测,接着调用API进行人脸识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先展示下效果:

这是源图片

测试结果:

 

 结果还是很不错的

代码中写入的是相似度达到80+才会识别。易烊千玺的相似度在70左右。

源图片需要存到云端:

 

 

 源代码

#include <iostream>
#include "face.h"
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
using namespace aip;

int main(int argc, char const *argv[])
{
    cout << "hello" << endl;
    VideoCapture cap(0);//打开相机
    if (cap.isOpened())//判断相机是否打开
    {
        cout << "打开相机成功" << endl;
    }
    else
    {
        cout << "打开相机失败" << endl;
        return -1;
    }
    aip::Face client("36872208","IWEjuvLEucWzbsGq19yLDkbR","uBjRcpGAuf05BTnnVDOIKDd7EVqjLHsb");
    Mat ColorImage;//存放彩色照片
    Mat GrayImage;//存放黑白照片
    Mat MatFace;//存放识别的人脸
    vector<Rect>AllFace;//存放人脸图像
    vector<uchar>JpgFace;//存放编码为Jpg格式的人脸图像数据
    CascadeClassifier Classifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml");
    Json::Value result;
    string Base64Face;
    while (1)//循环截图
    {
        cap >> ColorImage;
        cvtColor(ColorImage,GrayImage,CV_BGR2GRAY);//将照片转换为黑白照片
        equalizeHist(GrayImage,GrayImage);//色彩均衡处理
        Classifier.detectMultiScale(GrayImage,AllFace);
        if(AllFace.size())//判断是否检测到人脸
        {
            rectangle(GrayImage,AllFace[0],Scalar(255,255,255));//在图像中框出人脸
            MatFace=GrayImage(AllFace[0]);//从GrayImage中截取人脸
            imencode(".jpg",MatFace,JpgFace);//转换照片格式
            Base64Face=base64_encode((char*)JpgFace.data(),JpgFace.size());
            result=client.search(Base64Face,"BASE64","123",aip::null);

            if(!result["result"].isNull())
            {
                //相似度超过70时才会输出信息
                if (result["result"]["user_list"][0]["score"].asInt() > 80)
                {
                    cout<< result["result"]["user_list"][0]["user_id"]<<endl;
                    goto lable;
                }
                
                cout<<"没有匹配到人员"<<endl;
            }
            //else
            //{
                //cout<<result["result"]["user_list"][0]["user_id"]<<endl;
            //}
            
        }
        lable:
        imshow("video", GrayImage); //展示图片
        waitKey(10);           //停止40毫秒
    }

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值