QT对接百度云实现人脸注册和识别

文章目录

一.UI界面设计

左上lineedit是处理后的解析的json数据

下方的lineedit2是利用解析数据再进行数据库查询得到的数据

标签 人脸拍照OK是进行一个图片的显示

黑的部分是摄像头//我把摄像头堵了所以看不见

选择图片按钮是为了进行功能测试添加

 

 

二、对接百度云

          参考:        Qt+百度AI实现人脸识别之人脸检测

        对接格式一定要 严格 严格 严格 按照百度云要求的格式!!!

1.获取Access Token

       可以使用在线post工具,也可以在代码中申请,使用Api_Key,Secret_Key获取Token;

QString httpRequest::GetBaidu_Token(QString &Api_Key, QString &Secret_Key)
{
    QString  Url = "https://aip.baidubce.com/oauth/2.0/token?";
    QByteArray append = QString("grant_type=client_credentials&client_id=%1&client_secret=%2").arg(Api_Key).arg(Secret_Key).toLatin1();

    Network_Request(Url, append);

    QByteArray JsonData;
    QEventLoop loop;
    auto c = connect(this, Network_Reply_Finish, [&](const QByteArray & data){
        JsonData = data;
        loop.exit(1);
    });
    loop.exec();
    disconnect(c);

    QJsonObject data =  QJsonDocument::fromJson(JsonData).object();
    if (data.isEmpty() && !data.contains("access_token"))
        return "get error";
    return data.value("access_token").toString();
}

二 http协议头构造

void httpRequest::Network_Request(QString & Url, QByteArray Request_Data)
{
    // 构造请求
    QNetworkRequest Request((QUrl(Url)));

    Manager = new QNetworkAccessManager(this);
    connect(Manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(Network_Reply(QNetworkReply*)));

    //设置头信息
    Request.setHeader(QNetworkRequest::ContentTypeHeader, "Content-Type: application/json");
    //Request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
    // 发送请求
    Manager->post(Request, Request_Data);
    qDebug()<<"构造HTTP头成功";
}

void httpRequest::Network_Reply(QNetworkReply * Reply)
{
    if (Reply->isReadable()){
        Reply_Data = Reply->readAll();
        emit Network_Reply_Finish(Reply_Data);
    }
}

三.对接百度云人脸注册和识别

只给出人脸注册。     识别就按照百度API文档要求更改就可以了

掌握对图片进行BASE64编码,以及按格式进行数据上传

QJsonObject facecheck::insert_face(QImage &image,QString str)
{
    QByteArray ba;
    QBuffer buffer(&ba);
    image.save(&buffer, "jpg");
    QString imgData = QString(ba.toBase64());
    buffer.close();
    QJsonObject insetr_obj;
    insetr_obj.insert("image", imgData);
    insetr_obj.insert("image_type","BASE64");
    insetr_obj.insert("group_id","test_1");
    insetr_obj.insert("user_id",str);

    QString t1 ="https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
    QString Url=t1 + "?access_token=" + baiToken;
    http->Network_Request(Url, QJsonDocument(insetr_obj).toJson());
       QByteArray JsonData;
       QEventLoop loop;
       auto c = connect(http, http->Network_Reply_Finish, [&](const QByteArray & data){
           JsonData = data;
           loop.exit(1);
       });
       loop.exec();
       disconnect(c);      
       QJsonObject data =  QJsonDocument::fromJson(JsonData).object();
       return data ;
}

四.json数据处理

由于此项目是个人练手,所以要求较为简单。对数据处理也很粗暴

if(data.contains("result"))
     {
            QJsonObject resobj = data.take("result").toObject();
             if(resobj.contains("user_list"))
             {
                QJsonArray groupArray = resobj.take("user_list").toArray();
                for(int i=0; i<groupArray.size();i++)
                {
                    QJsonObject groupobj = groupArray[i].toObject();
                    double score =groupobj.value("score").toDouble();
                    info.append("匹配度:"+QString::number(score)+"\n");
                    if(score > 75)
                    {
                        name =groupobj.value("user_id").toString();
                        info.append("云用户编号"+name+"\n");
                        pclass=groupobj.value("group_id").toString();
                        info.append("云所属组:"+pclass+"\n");//班级                   
                    }
                    else
                    {
                        info.append("库里没有此人! nohavethepeople\n");
                        ui->lineEdit->clear();
                        ui->lineEdit_2->clear();
                        ui->lineEdit_3->clear();
                    }
               }
             }
     }

五,数据----->UI界面

解析JSON返回的数据,再利用得到的部分数据去查询数据库,再将查询到的数据显示到UI界面

     db_select(name);
     ui->textEdit->clear();
     QDateTime dtm = QDateTime::currentDateTime();
     QString time = dtm.toString("yyyy.MM.dd hh:mm:ss ddd");
     info.append(time);
     ui->textEdit->setText(info);

代码写的很杂乱,由于数据库的原因,没有单独封装函数

由于注册功能是后面写的,导致图3也就是注册功能没有对原有的界面数据进行全部更高

只讲lineedit的内容改成了???表示库中没有此人,去进行了一个注册,如果库里有此人则是图2状况。正常识别则是图1效果

人脸识别也是一样,如果库中没有此人则识别失败,点击注册再点击识别即可识别成功

可以知道对于人脸注册和识别的功能是有的。同时UI界面数据的更改表示对数据库的查询以及对界面的修改也是有的

六,效果 

 

 

 总结:      

        还停留在面向过程思维。只会写垃圾轮子。
        学习到了{
        1.对接百度云
            要得到自己的token,可以用代码去申请,也可以在网站申请(但只有30天期限)
            采用的post请求 url 和 json 格式必须严格按照文档写
        2.json解析
        3.复习了QT一些部件功能
        } 

代码和更多总结,请点击:点这

提取码:XLLL

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Qt是一个跨平台的应用程序开发框架,而百度AI则是百度公司提供的人工智能服务平台。要实现Qt调用百度AI的人脸识别解锁功能,可以按照以下步骤进行: 1. 首先,在百度AI平台上注册一个账号,并创建一个人脸识别的应用。获取该应用的API Key和Secret Key,以便后续使用。 2. 在Qt项目中,引入百度AI提供的SDK(软件开发工具包),这个SDK可以提供与百度AI平台进行通信的接口。 3. 在Qt代码中,使用SDK提供的函数调用方式,实现人脸识别解锁功能。具体步骤如下: a. 初始化百度AI SDK,将API Key和Secret Key传入进行认证。 b. 将待识别人脸图像传入SDK的人脸检测接口,提取图像中的人脸信息。 c. 将提取到的人脸信息传入SDK的人脸对接口,与已注册人脸信息进行比对。 d. 根据比对结果,判断是否为有效用户,进而进行解锁操作。 4. 在Qt界面中集成该人脸识别解锁功能,可以通过摄像头实时捕捉人脸图像,并调用SDK进行人脸识别。在界面上展示识别结果,如解锁成功或失败的提示。 总的来说,Qt调用百度AI的人脸识别解锁需要引入百度AI提供的SDK,并通过SDK提供的接口函数实现人脸检测和比对的功能。在Qt界面中通过摄像头捕捉人脸图像,进行实时的人脸识别操作,以实现人脸识别解锁。 ### 回答2: Qt是一款功能强大的跨平台应用程序开发框架,可以用于开发各种类型的应用程序,包括人脸识别解锁功能。而百度AI的人脸识别技术是一种基于人脸图像进行人脸检测、人脸比对和人脸搜索的先进技术。下面将介绍如何使用Qt调用百度AI的人脸识别解锁。 首先,我们需要在百度AI开放平台上注册账号并创建一个人脸识别应用。在创建应用后,我们将得到一个API Key和Secret Key,这将用于调用百度AI的人脸识别接口。 接下来,在Qt中创建一个新的项目。我们可以使用Qt提供的网络请求类QNetworkAccessManager来发送HTTP请求。通过发送HTTP POST请求到百度AI的人脸识别接口,将待识别人脸图像数据传输给服务器。 在调用人脸识别接口时,需要注意接口的请求参数。首先,需要指定人脸识别接口的URL,以及携带API Key和Secret Key的请求头信息。其次,在请求体中,需要传输待识别人脸图像数据。可以将人脸图像数据进行Base64编码后作为请求参数发送。同时,可以指定一些可选的参数,如人脸识别的阈值、检测的最大人脸数等。发送请求后,服务器会返回一个识别结果,我们可以根据接口返回的JSON数据进行解析和处理,以获取人脸识别的结果。 最后,在Qt界面中添加一个调用人脸识别解锁功能的按钮。当用户点击该按钮时,应用程序将调用百度AI的人脸识别接口进行解锁验证。根据接口返回的结果,我们可以判断是否解锁成功,并在界面中显示相应的提示信息。 总之,通过Qt调用百度AI的人脸识别解锁,我们可以实现一种安全、快速的人脸识别解锁功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值