Qt音视频开发39-人脸识别在线版

日期:2023-02-27 19:34:11 / 人气:159

于人脸辨认这块,前些年不要太火,哪怕是到了明天仍然火的一塌懵懂,什麼玩意都要跟人脸辨认搭个边,这东西应该只是人工智能的一个很小的局部,人脸辨认光从字面上了解就是辨认出人脸区域,其实面前真正的处置是拿到人脸区域图片,提取人脸特征值,再用这些特征值去做比对剖析处置,辨认出究竟是谁,国际厂家也不少,比拼的就是精确度误报率,速度无非就是靠堆硬件来,什麼VPU各种并行运算都堆上去,速度杠杠的,好多厂家都做到了几个毫秒的级别,估量很多厂家都是在开源的根底上加上了自家的算法,不断跑呀跑的整出了契合自家算法的人脸模型文件,比方百度的人脸辨认模型文件,经过好几年的开展,越来越大越来越细越来越准。听某个大神说过,很多时分人工智能其实并不是完全的智能,绝大局部都停留在半智能阶段,而且这种半智能阶段还需求借助很多辅佐的硬件甚至人爲的判别,很多模型库文件的生成就是靠一小小姑娘在那边流水线上相似的不停的点呀点,号称深度学习算法,就是让他辨认更多的数据,使得更精确。关于人脸辨认或许人工智能,内行普通觉得很科幻,内行普通觉得很绝望,业界首领和首领各种打鸡血。国际的厂家大局部都提供了官网对应的api来停止处置,注册个账号,搞个key,间接就可以撸起来,关于这块技术上没有任何难点,初学者都可以搞定,无非就是先post数据,拿到前往的数据停止解析,要搞清楚的就是如何填充要post的数据,比方带上key,组织其他数据比方图片是base64字符串上传还是二进制文件上传等,前往的数据都是json啦,间接用现成的json库停止解析就ok。百度人脸辨认在线版和离线版SDK的封装:离线版要求支持C++11的编译器,而且必需爲MSVC。不支持mingw编译器。在线版中的密钥等信息,务必记得换成本人请求的。离线版本只能在windows上运用。离线版本需求本人请求密钥。找到facebaidusdk文件夹下的LicenseTool.exe,填写后台离线SDK管理中请求到的序列号,单击激活按钮。离线版本对应的静态库和模型文件自行从官网下载。假如源码包中有facebaidusdk+face-resource文件夹则阐明带了静态库和模型库文件夹,只需求将facebaidusdk文件夹下的一切文件复制到可执行文件同一目录,face-resource文件夹复制到可执行文件夹目录同等级目录即可。目录地位见snap文件夹下的示例图。facebaidusdk目录下的TestFaceApi.exe爲百度提供的测试顺序,先要将USB摄像头插到电脑上,会实时找人脸框。二、功用特点支持的功用包括人脸辨认、人脸比对、人脸搜索、活体检测等。在线版还支持身份证、驾驶证、行驶证、银行卡等辨认。在线版的协议支持百度、旷视,离线版的支持百度,可定制。除了支持X86架构,还支持嵌入式linux比方contex-A9、树莓派等。每个功用的执行除了前往后果还前往执行用时工夫。多线程处置,经过type控制目前处置类型。支持单张图片检索类似度最高的图片。支持指定目录图片用来生成人脸特征值文件。可设置等候处置图片队列中的数量。每次执行都有成功或许失败的信号前往。人脸搜索的前往后果包括了原图+最大类似度图+类似度等。人脸比对同时支持两张图片和两个特征值比对。相关功用自定义一套协议用于客户端和效劳端,可以经过TCP通讯停止交互。自定义人脸辨认协议十分适用于中心一台效劳器,现场若干设备恳求的场景。每个模块全部是独立的一个类,代码整洁、正文完善。三、效果图四、相关站点国际站点:https://gitee.com/feiyangqingyun/QWidgetDemo国际站点:https://github.com/feiyangqingyun/QWidgetDemo团体主页:https://blog.csdn.net/feiyangqingyun知乎主页:https://www.zhihu.com/people/feiyangqingyun/体验地址:https://blog.csdn.net/feiyangqingyun/article/details/97565652五、中心代码void FaceWebBaiDu::finished(QNetworkReply *reply){    QString error = reply->errorString();    if (!error.isEmpty() && error != "Unknown error") {        emit receiveError(error);    }    if (reply->bytesAvailable() > 0 && reply->error() == QNetworkReply::NoError) {        QString data = reply->readAll();        reply->deleteLater();        //发送接纳数据信号        emit receiveData(data);        //初始化脚本引擎        QScriptEngine engine;        //构建解析对象        QScriptValue script = engine.evaluate("value=" + data);        //获取鉴权标识符        QString token = script.property("access_token").toString();        if (!token.isEmpty()) {            this->token = token;            emit receiveResult(0, "鉴权标识前往成功");            return;        }        //通用前往后果字段        int code = script.property("error_code").toInt32();        QString msg = script.property("error_msg").toString();        emit receiveResult(code, msg);        //图片辨认局部        QScriptValue result = script.property("result");        if (!result.isNull()) {            //人脸辨认            if (data.contains("location")) {                QScriptValue face_list = result.property("face_list");                checkFaceList(face_list);            }            //人脸比对            if (data.contains("score") && !data.contains("location")) {                QScriptValue score = result.property("score");                float result = score.toString().toFloat();                if (result > 0) {                    emit receiveFaceCompare(QRect(), QRect(), result);                } else {                    emit receiveFaceCompareFail();                }            }            //活体检测            if (data.contains("face_liveness")) {                QScriptValue face_liveness = result.property("face_liveness");                float result = face_liveness.toString().toFloat();                if (result >= 0) {                    emit receiveLive(result);                }            }                   }            }}void FaceWebBaiDu::checkFaceList(const QScriptValue &scriptValue){    //创立迭代器逐一解析详细值    QScriptValueIterator it(scriptValue);    while (it.hasNext()) {        it.next();        if (it.flags() & QScriptValue::SkipInEnumeration) {            continue;        }        QRect rect;        QString face_token = it.value().property("face_token").toString();        if (!face_token.isEmpty()) {            QScriptValue value = it.value().property("location");            rect = FaceHelper::getRect(value);        }        if (rect.width() > 0) {            emit receiveFaceRect(rect);            break;        }    }}void FaceWebBaiDu::getToken(){    //详细参见 http://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu    QStringList list;    list.append(QString("grant_type=%1").arg("client_credentials"));    list.append(QString("client_id=%1").arg(key));    list.append(QString("client_secret=%1").arg(secret));    QString data = list.join("&");    QString url = "https://aip.baidubce.com/oauth/2.0/token";    FaceHelper::sendData(manager, url, data);}void FaceWebBaiDu::detect(const QImage &img){    QString imgData = FaceHelper::getImageData2(img);    QStringList list;    list.append(QString("{\"image\":\"%1\",\"image_type\":\"BASE64\"}").arg(imgData));    QString data = list.join("");    QString url = QString("https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=%1").arg(token);    FaceHelper::sendData(manager, url, data);}void FaceWebBaiDu::compare(const QImage &img1, const QImage &img2){    QString imgData1 = FaceHelper::getImageData2(img1);    QString imgData2 = FaceHelper::getImageData2(img2);    //假如需求活体检测则NONE改爲LOW NORMAL HIGH    QStringList list;    list.append("[");    list.append(QString("{\"image\":\"%1\",\"image_type\":\"BASE64\",\"liveness_control\":\"NONE\"}").arg(imgData1));    list.append(",");    list.append(QString("{\"image\":\"%1\",\"image_type\":\"BASE64\",\"liveness_control\":\"NONE\"}").arg(imgData2));    list.append("]");    QString data = list.join("");    QString url = QString("https://aip.baidubce.com/rest/2.0/face/v3/match?access_token=%1").arg(token);    FaceHelper::sendData(manager, url, data);}void FaceWebBaiDu::live(const QImage &img){    QList

作者:河内五分彩开户官网




现在致电 5243865 OR 查看更多联系方式 →

COPYRIGHT 河内五分彩开户官网 版权所有