本篇內(nèi)容主要講解“Qt如何實(shí)現(xiàn)人臉識(shí)別在線版”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Qt如何實(shí)現(xiàn)人臉識(shí)別在線版”吧!
在宜州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),全網(wǎng)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),宜州網(wǎng)站建設(shè)費(fèi)用合理。
關(guān)于人臉識(shí)別這塊,前些年不要太火,哪怕是到了今天依然火的一塌糊涂,什么玩意都要跟人臉識(shí)別搭個(gè)邊,這東西應(yīng)該只是人工智能的一個(gè)很小的部分,人臉識(shí)別光從字面上理解就是識(shí)別出人臉區(qū)域,其實(shí)背后真正的處理是拿到人臉區(qū)域圖片,提取人臉特征值,再用這些特征值去做比對(duì)分析處理,識(shí)別出到底是誰(shuí),國(guó)內(nèi)廠家也不少,比拼的就是準(zhǔn)確度誤報(bào)率,速度無(wú)非就是靠堆硬件來(lái),什么VPU各種并行運(yùn)算都堆上去,速度杠杠的,好多廠家都做到了幾個(gè)毫秒的級(jí)別,估計(jì)很多廠家都是在開(kāi)源的基礎(chǔ)上加上了自家的算法,一直跑呀跑的整出了符合自家算法的人臉模型文件,比如百度的人臉識(shí)別模型文件,經(jīng)過(guò)好幾年的發(fā)展,越來(lái)越大越來(lái)越細(xì)越來(lái)越準(zhǔn)。
聽(tīng)某個(gè)大神說(shuō)過(guò),很多時(shí)候人工智能其實(shí)并不是完全的智能,絕大部分都停留在半智能階段,而且這種半智能階段還需要借助很多輔助的硬件甚至人為的判斷,很多模型庫(kù)文件的生成就是靠一小小姑娘在那邊流水線上類似的不停的點(diǎn)呀點(diǎn),號(hào)稱深度學(xué)習(xí)算法,就是讓他識(shí)別更多的數(shù)據(jù),使得更準(zhǔn)確。關(guān)于人臉識(shí)別或者人工智能,外行一般覺(jué)得很科幻,內(nèi)行一般覺(jué)得很絕望,業(yè)界領(lǐng)袖和領(lǐng)袖各種打雞血。
國(guó)內(nèi)的廠家大部分都提供了官網(wǎng)對(duì)應(yīng)的api來(lái)進(jìn)行處理,注冊(cè)個(gè)賬號(hào),搞個(gè)key,直接就可以擼起來(lái),關(guān)于這塊技術(shù)上沒(méi)有任何難點(diǎn),初學(xué)者都可以搞定,無(wú)非就是先post數(shù)據(jù),拿到返回的數(shù)據(jù)進(jìn)行解析,要搞清楚的就是如何填充要post的數(shù)據(jù),比如帶上key,組織其他數(shù)據(jù)比如圖片是base64字符串上傳還是二進(jìn)制文件上傳等,返回的數(shù)據(jù)都是json啦,直接用現(xiàn)成的json庫(kù)進(jìn)行解析就ok。
百度人臉識(shí)別在線版和離線版SDK的封裝:
離線版要求支持C++11的編譯器,而且必須為MSVC。不支持mingw編譯器。
在線版中的密鑰等信息,務(wù)必記得換成自己申請(qǐng)的。
離線版本只能在windows上使用。
離線版本需要自己申請(qǐng)密鑰。找到facebaidusdk文件夾下的LicenseTool.exe,填寫(xiě)后臺(tái)離線SDK管理中申請(qǐng)到的序列號(hào),單擊激活按鈕。
離線版本對(duì)應(yīng)的動(dòng)態(tài)庫(kù)和模型文件自行從官網(wǎng)下載。
如果源碼包中有facebaidusdk+face-resource文件夾則說(shuō)明帶了動(dòng)態(tài)庫(kù)和模型庫(kù)文件夾,只需要將facebaidusdk文件夾下的所有文件復(fù)制到可執(zhí)行文件同一目錄,face-resource文件夾復(fù)制到可執(zhí)行文件夾目錄同等級(jí)目錄即可。目錄位置見(jiàn)snap文件夾下的示例圖。
facebaidusdk目錄下的TestFaceApi.exe為百度提供的測(cè)試程序,先要將USB攝像頭插到電腦上,會(huì)實(shí)時(shí)找人臉框。
支持的功能包括人臉識(shí)別、人臉比對(duì)、人臉?biāo)阉?、活體檢測(cè)等。
在線版還支持身份證、駕駛證、行駛證、銀行卡等識(shí)別。
在線版的協(xié)議支持百度、曠視,離線版的支持百度,可定制。
除了支持X86架構(gòu),還支持嵌入式linux比如contex-A9、樹(shù)莓派等。
每個(gè)功能的執(zhí)行除了返回結(jié)果還返回執(zhí)行用時(shí)時(shí)間。
多線程處理,通過(guò)type控制當(dāng)前處理類型。
支持單張圖片檢索相似度最高的圖片。
支持指定目錄圖片用來(lái)生成人臉特征值文件。
可設(shè)置等待處理圖片隊(duì)列中的數(shù)量。
每次執(zhí)行都有成功或者失敗的信號(hào)返回。
人臉?biāo)阉鞯姆祷亟Y(jié)果包含了原圖+最大相似度圖+相似度等。
人臉比對(duì)同時(shí)支持兩張圖片和兩個(gè)特征值比對(duì)。
相關(guān)功能自定義一套協(xié)議用于客戶端和服務(wù)端,可以通過(guò)TCP通信進(jìn)行交互。
自定義人臉識(shí)別協(xié)議非常適用于中心一臺(tái)服務(wù)器,現(xiàn)場(chǎng)若干設(shè)備請(qǐng)求的場(chǎng)景。
每個(gè)模塊全部是獨(dú)立的一個(gè)類,代碼整潔、注釋完善。
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(); //發(fā)送接收數(shù)據(jù)信號(hào) emit receiveData(data); //初始化腳本引擎 QScriptEngine engine; //構(gòu)建解析對(duì)象 QScriptValue script = engine.evaluate("value=" + data); //獲取鑒權(quán)標(biāo)識(shí)符 QString token = script.property("access_token").toString(); if (!token.isEmpty()) { this->token = token; emit receiveResult(0, "鑒權(quán)標(biāo)識(shí)返回成功"); return; } //通用返回結(jié)果字段 int code = script.property("error_code").toInt32(); QString msg = script.property("error_msg").toString(); emit receiveResult(code, msg); //圖片識(shí)別部分 QScriptValue result = script.property("result"); if (!result.isNull()) { //人臉識(shí)別 if (data.contains("location")) { QScriptValue face_list = result.property("face_list"); checkFaceList(face_list); } //人臉比對(duì) 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(); } } //活體檢測(cè) 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) { //創(chuàng)建迭代器逐個(gè)解析具體值 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() { //具體參見(jiàn) 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); //如果需要活體檢測(cè)則NONE改為L(zhǎng)OW 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<QImage> imgs; if (!img.isNull()) { imgs << img; } live(imgs); } void FaceWebBaiDu::live(const QList<QImage> &imgs) { //記住最后一次處理的時(shí)間,限制頻繁的調(diào)用 QDateTime now = QDateTime::currentDateTime(); if (lastTime.msecsTo(now) < 500) { return; } lastTime = now; QStringList list; list.append("["); int count = imgs.count(); for (int i = 0; i < count; i++) { QString imgData = FaceHelper::getImageData2(imgs.at(i)); list.append(QString("{\"image\":\"%1\",\"image_type\":\"BASE64\"}").arg(imgData)); if (i < count - 1) { list.append(","); } } list.append("]"); QString data = list.join(""); QString url = QString("https://aip.baidubce.com/rest/2.0/face/v3/faceverify?access_token=%1").arg(token); FaceHelper::sendData(manager, url, data); }
到此,相信大家對(duì)“Qt如何實(shí)現(xiàn)人臉識(shí)別在線版”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)頁(yè)名稱:Qt如何實(shí)現(xiàn)人臉識(shí)別在線版
網(wǎng)頁(yè)鏈接:http://jinyejixie.com/article48/gpgiep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站設(shè)計(jì)、Google、用戶體驗(yàn)、電子商務(wù)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)