【PHP】接入百度AI開放平臺人臉識別API,實現人臉對比

目錄

一、需求

二、準備工作

1、申請服務

2、創建應用,獲取開發密鑰

3、官方開發文檔

4、測試人像圖片

三、PHP接入

1、鑒權,獲取access_token

2、人臉對比

四、完整代碼


一、需求

現在人臉識別、人臉對比技術越來越成熟,使用越來越廣泛,比較好的是百度AI開放平臺提供的人臉對比接口,對接簡單,那么怎樣通過PHP來接入人臉識別的接口,以實現人臉識別呢?本篇文章詳細介紹PHP接入百度AI人臉識別PAI的全步驟。

二、準備工作

因為使用的是百度AI開放平臺的人臉識別接口,就需要進入到百度開放平臺注冊/登錄平臺,創建人臉對比應用,獲取AIP Key和Secret Key。

1、申請服務

進入百度開放平臺,找到“開放能力->人臉與人體->人臉對比”服務,立即申請使用。

地址:人臉對比_人臉對比識別_人臉對比相似度-百度AI開放平臺

2、創建應用,獲取開發密鑰

登錄平臺后進入控制臺,點擊左上角菜單,搜索并選擇“人臉識別”,點擊右側菜單應用列表,創建應用,勾選“人臉對比V3”,立即創建,創建成功后會有PAI key和Secret Key。

詳細接入說明:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3

3、官方開發文檔

每個用戶都有一定的免費測試額度,個人認證的賬號與企業認證的賬號免費額度也不同。人臉識別接口有V2、V3、V4三個版本,由于我是個人認證的賬號,所以使用的是V3版本。

V3版本開發文檔:https://ai.baidu.com/ai-doc/FACE/Lk37c1tpf

V4版本開發文檔:https://ai.baidu.com/ai-doc/FACE/Oktmssfse

4、測試人像圖片

準備幾張用于測試的人像圖片

三、PHP接入

1、鑒權,獲取access_token

接口描述:獲取access_token

?名稱說明
接口名稱鑒權,獲取access_token
接口地址https://aip.baidubce.com/oauth/2.0/token
請求方式GET/POST(推薦)
官方文檔https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

?請求參數說明

參數類型必填含義說明
grant_typestring固定為client_credentialsclient_credentials?
client_idstring應用的API Key,獲取方式:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3Va5yQRHlA4Fq5eR3LT0vuXV4
client_secretstring應用的Secret Key,獲取方式:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn30rDSjzQ20XUj5itV6WRtznPQSzr5pVw2

返回參數說明

名稱類型含義
access_tokenstring要獲取的Access Token
refresh_tokenstring該參數忽略
expires_instringAccess Token的有效期(秒為單位,有效期30天)
scopestring該參數忽略
session_keystring該參數忽略
session_secretstring該參數忽略

?代碼示例

// 鑒權,獲取token
public function getToken()
{$apiUrl = 'https://aip.baidubce.com/oauth/2.0/token';$params = ["grant_type" => 'client_credentials','client_id' => $this->api_key,"client_secret" => $this->secret_key,];$params = http_build_query($params);$result = $this->returnArray($this->freeApiCurl($apiUrl,$params));$access_token = $result['access_token'];return $access_token;
}

2、人臉對比

接口描述:人臉對比V3,對比兩張圖片中的人臉的相似度,并返回相似度分值。

?名稱說明
接口名稱人臉對比
接口地址https://aip.baidubce.com/rest/2.0/face/v3/match
請求方式POST
官方文檔https://ai.baidu.com/ai-doc/FACE/Lk37c1tpf

?請求參數說明

參數類型必填含義
imagestring圖片信息(總數據大小應小于10M,圖片尺寸在1920x1080以下),圖片上傳方式根據image_type來判斷。?兩張圖片通過json格式上傳,格式參考本表格下方的示例
image_typestring圖片類型
BASE64:(推薦)圖片的base64值,base64編碼后的圖片數據,編碼后的圖片大小不超過2M;
FACE_TOKEN: 人臉圖片的唯一標識,調用人臉檢測接口時,會為每個人臉圖片賦予一個唯一的FACE_TOKEN,同一張圖片多次檢測得到的FACE_TOKEN是同一個。
face_typestring人臉的類型
LIVE:表示生活照:通常為手機、相機拍攝的人像圖片、或從網絡獲取的人像圖片等,
IDCARD:表示身份證芯片照:二代身份證內置芯片中的人像照片,
WATERMARK:表示帶水印證件照:一般為帶水印的小圖,如公安網小圖
CERT:表示證件照片:如拍攝的身份證、工卡、護照、學生證等證件圖片
INFRARED?表示紅外照片:使用紅外相機拍攝的照片
HYBRID:表示混合類型,如果傳遞此值時會先對圖片進行檢測判斷所屬類型(生活照 or 證件照)(僅針對請求參數 image_type 為 BASE64 或 URL 時有效)
默認LIVE
quality_controlstring圖片質量控制
NONE: 不進行控制
LOW:較低的質量要求
NORMAL: 一般的質量要求
HIGH: 較高的質量要求
默認 NONE
若圖片質量不滿足要求,則返回結果中會提示質量檢測失敗
liveness_controlstring活體檢測控制
NONE: 不進行控制
LOW:較低的活體要求(高通過率 低攻擊拒絕率)
NORMAL: 一般的活體要求(平衡的攻擊拒絕率, 通過率)
HIGH: 較高的活體要求(高攻擊拒絕率 低通過率)
默認 NONE
若活體檢測結果不滿足要求,則返回結果中會提示活體檢測失敗
face_sort_typestring人臉檢測排序類型
0:代表檢測出的人臉按照人臉面積從大到小排列
1:代表檢測出的人臉按照距離圖片中心從近到遠排列
默認為0
spoofing_controlstring合成圖控制參數
NONE: 不進行控制
LOW:較低的合成圖閾值數值,由于合成圖判定邏輯為大于閾值視為合成圖攻擊,該項代表低通過率、高攻擊拒絕率
NORMAL: 一般的合成圖閾值數值,由于合成圖判定邏輯為大于閾值視為合成圖攻擊,該項代表平衡的攻擊拒絕率, 通過率
HIGH: 較高的合成圖閾值數值,由于合成圖判定邏輯為大于閾值視為合成圖攻擊,該項代表高通過率、低攻擊拒絕率
默認為NONE

返回參數說明

名稱類型含義
scorefloat要獲取的Access Token
face_listarray人臉信息列表,列表里的face_token順序與傳入的圖片順序保存一致
face_tokenstring人臉的唯一標志

質量控制參數說明:不同的控制度下所對應的質量控制閾值,如果檢測出來的質量信息某一項不符合控制閾值的要求,則會返回錯誤信息。

控制參數說明文檔:https://ai.baidu.com/ai-doc/FACE/Lk37c1tpf?

?代碼示例

public function run()
{$img1 = 'static/index/images/11.png';$img2 = 'static/index/images/22.png';// 讀取圖片文件內容$imageContent1 = file_get_contents($img1);$imageContent2 = file_get_contents($img2);// 將圖片內容轉換為Base64編碼$base64Image1 = base64_encode($imageContent1);$base64Image2 = base64_encode($imageContent2);$apiUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/match?access_token='.$this->getToken();$params = [['image' => $base64Image1,'image_type' => 'BASE64','face_type' => 'LIVE',          // 人臉的類型'quality_control' => 'HIGH',    // 圖片質量控制'liveness_control' => 'NONE'    // 活體檢測控制],['image' => $base64Image2,'image_type' => 'BASE64','face_type' => 'LIVE',          // 人臉的類型'quality_control' => 'HIGH',    // 圖片質量控制'liveness_control' => 'NONE'    // 活體檢測控制]];// 參數 數組格式轉json格式$params = json_encode($params);$result = $this->returnArray($this->freeApiCurl($apiUrl,$params,1));}

?需要注意的幾點

1、access_token的有效期為30天,切記需要每30天進行定期更換,或者每次請求都拉取新token;

2、請求參數是json,不是數組,在傳入之前先轉成json格式;

3、傳入的圖片(image字段)大小不超過10M,尺寸在1920*1080以下,必須是base64編碼,且不包含圖片頭,如data:image/jpg;base64,使用前請檢查一邊;

4、圖片格式先僅支持png、jpg、jpeg、bmp格式;

5、人臉類型、圖片質量控制、活體檢測控制設置不同的閾值也會返回不同的結果或錯誤,錯誤可參看錯誤碼,所以需要根據實際需求設置閾值。

四、完整代碼

使用ThinkPHP5框架,替換自己的api_key和secret_key即可。

<?php
namespace app\index\controller;
use think\Controller;class Face extends Controller
{private $api_key = 'xxxxxx';private $secret_key = 'xxxxxxx';// 鑒權,獲取tokenpublic function getToken(){$apiUrl = 'https://aip.baidubce.com/oauth/2.0/token';$params = ["grant_type" => 'client_credentials','client_id' => $this->api_key,"client_secret" => $this->secret_key,];$params = http_build_query($params);$result = $this->returnArray($this->freeApiCurl($apiUrl,$params));$access_token = $result['access_token'];return $access_token;}public function run(){$img1 = 'static/index/images/11.png';$img2 = 'static/index/images/22.png';// 讀取圖片文件內容$imageContent1 = file_get_contents($img1);$imageContent2 = file_get_contents($img2);// 將圖片內容轉換為Base64編碼$base64Image1 = base64_encode($imageContent1);$base64Image2 = base64_encode($imageContent2);$apiUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/match?access_token='.$this->getToken();$params = [['image' => $base64Image1,'image_type' => 'BASE64','face_type' => 'LIVE',		// 人臉的類型'quality_control' => 'HIGH',	// 	圖片質量控制'liveness_control' => 'NONE'	// 活體檢測控制],['image' => $base64Image2,'image_type' => 'BASE64','face_type' => 'LIVE',		// 人臉的類型'quality_control' => 'HIGH',	// 	圖片質量控制'liveness_control' => 'NONE'	// 活體檢測控制]];// 參數 數組格式轉json格式$params = json_encode($params);$result = $this->returnArray($this->freeApiCurl($apiUrl,$params,1));}/*** 將JSON內容轉為數組,并返回*/public function returnArray($content){return json_decode($content,true);}/*** @describe CURL操作,支持POST和GET兩種請求方式* @param $url:API接口請求地址,$param:請求參數,$ispost:請求方式 post=1/get=2* @return array  接口返回結果集*/public function freeApiCurl($url,$params=false,$ispost=0){$ch = curl_init();curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );curl_setopt( $ch, CURLOPT_TIMEOUT , 60);curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );if( $ispost ){curl_setopt( $ch , CURLOPT_POST , true );curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );curl_setopt( $ch , CURLOPT_URL , $url );}else{if($params){curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );}else{curl_setopt( $ch , CURLOPT_URL , $url);}}$response = curl_exec( $ch );if ($response === FALSE) {return false;}curl_close( $ch );return $response;}}

返回結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917138.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【東楓科技】DreamHAT+

DreamHAT 是一款頂部附加硬件 (HAT) 套件&#xff0c;可為 Raspberry Pi 提供 60GHz 毫米波雷達供您使用。 全尺寸 HAT 包含一個英飛凌 BGT60TR13C 芯片&#xff0c;具有單個發射天線和三個接收器&#xff08;TX/RX&#xff09;&#xff0c;通過 GPIO 引腳和 SPI 連接到 Raspbe…

Spring Boot + MongoDB:從零開始手動配置 MongoConfig 實戰

前言 你以為只要寫上 spring.data.mongodb.*,就能一勞永逸,MongoDB 立馬聽話?別天真,這只是入門級操作,像是拿個自動擋鑰匙,開個小車溜達溜達,遠遠算不上高手操作。當項目需求變得復雜,連接字符串需要靈活配置,或者多數據源并行作戰時,自動配置的魔法顯得捉襟見肘。…

建筑節能目標下,樓宇自控系統以高效運行助力節能減碳

隨著全球氣候變化問題日益嚴峻&#xff0c;節能減排已成為各國政府和企業的重要任務。在建筑領域&#xff0c;樓宇自控系統&#xff08;Building Automation System, BAS&#xff09;作為實現建筑節能目標的關鍵技術&#xff0c;正發揮著越來越重要的作用。根據中國政府發布的《…

LOVON——面向足式Open-Vocabulary的VLN導航:LLM做任務分解、YOLO11做目標檢測,最后L2MM將指令和視覺映射為動作,且解決動態模糊

前言 因為項目需要(比如我們在做的兩個展廳講解訂單)&#xff0c;近期我一直在研究VLN相關&#xff0c;有些工作哪怕暫時還沒開源(將來可能會開源)&#xff0c;但也依然會解讀&#xff0c;比如好處之一是構建完整的VLN知識體系&#xff0c;本文便是其中一例 我在解讀過程中&am…

在線免費的AI文本轉語音工具TTSMaker介紹

TTSMaker是一個在線的文本轉語音工具&#xff0c; 支持多語言和中文方言&#xff0c;不同的語言和方言單次轉換的字符上限從200-10000 不同&#xff0c;轉換的效果還不錯&#xff0c;聽不出明顯的AI痕跡。 工具的網址是&#xff1a;https://ttsmaker.cn/。 工具的界面如上&…

【AI問答】PromQL中interval和rate_interval的區別以及Grafana面板的配置建議

問題1&#xff1a;interval和rate_interval的區別 在PromQL中確實有 $__rate_interval 這個特殊的變量&#xff0c;它與 $__interval 有不同的用途和計算方式。 $__interval vs $__rate_interval 1. $__interval 含義&#xff1a;Grafana計算出的基本時間間隔計算方式&#xff…

STM32學習記錄--Day5

今天了解了&#xff1a;中斷中斷有多個類別包括&#xff1a;USART中斷&#xff0c;I2C中斷等&#xff1b;并通過NVIC來分配中斷的優先級EXTIEXTI的內部結構&#xff1a;EXTI線&#x1f527; ??一、EXTI系統核心架構??1. ??中斷源輸入&#xff08;左上區域&#xff09;??…

CentOS7下同步時間的幾種方式(NTP 、Chrony和systemd-timesyncd)

文章目錄前言一、NTP (Network Time Protocol) & ntpd1.原理2. 安裝與配置(ntp 包)3.NTPd 優缺點對比二、Chrony1.原理2.安裝與配置 (chrony 包)3. 優點4. 缺點三、systemd-timesyncd1.原理2.安裝與配置 (systemd 自帶)3. 優點4. 缺點四、手動同步工具1.ntpdate(已廢棄&…

Web3:在 VSCode 中基于 Foundry 快速構建 Solidity 智能合約本地開發環境

相關文章推薦鏈接Web3專欄https://blog.csdn.net/qq_42392981/category_13016259.html在 VSCode 中基于 Foundry 快速構建 Solidity 智能合約本地開發環境引言1. 開發環境準備&#xff08;Windows&#xff09;1.1 安裝 VSCode1.2 安裝推薦插件1.3 安裝 Foundry1.4 驗證 Forge 和…

Implement recovery based on PITR using dump file and binlog

模擬生產場景中需要基于某個事務點的恢復&#xff0c;使用存量備份與存量binlog 生成測試數據 (rootlocalhost) [(none)]> create database NanJing; Query OK, 1 row affected (0.01 sec) (rootlocalhost) [test]> use NanJing; Database changed (rootlocalhost) [NanJ…

HTML-取消div,a等標簽點擊效果

一、背景當標簽被設置onclick事件之后&#xff0c;在有些手機瀏覽器中&#xff0c;點擊這些標簽&#xff0c;會有點擊變色效果。想要取消點擊變色效果。通過為div和標簽元素添加-webkit-tap-highlight-color樣式屬性&#xff0c;可以有效地解決這一問題二、解決方案已a標簽示例…

VR 三維重建:開啟沉浸式體驗新時代

在科技飛速發展的今天&#xff0c;VR&#xff08;虛擬現實&#xff09;技術已經逐漸滲透到我們生活的各個領域&#xff0c;為我們帶來了前所未有的沉浸式體驗。而 VR 三維重建作為 VR 技術的重要應用之一&#xff0c;更是讓人們能夠身臨其境地感受各種場景&#xff0c;無論是旅…

iTwinjs 幾何 - Curve

CurvePrimitive 常用的見下 LineSegment3d直線段兩點直線邊、桿件、骨架LineString3d折線多點連續直線輪廓線、路徑Arc3d圓弧 / 橢圓弧圓心 半徑 起止角圓孔、圓角、弧段BezierCurve3d貝塞爾曲線端點 控制點平滑過渡、動畫軌跡BSplineCurve3dB 樣條 / NURBS控制點 節點矢…

iPhone 恢復出廠設置是否會刪除所有內容?

當你的 iPhone 經常崩潰、出現黑屏死機、卡在加載屏幕上等問題時&#xff0c;你可能會考慮進行恢復出廠設置來修復它。或者在其他情況下&#xff0c;如果你要將使用多年的設備交給新主人&#xff0c;出于安全考慮&#xff0c;也需要進行恢復出廠設置。那么&#xff0c;恢復出廠…

機器學習②【字典特征提取、文本特征處理(TF-IDF)、數據標準化與歸一化、特征降維】

文章目錄先言一、特征工程概述二、特征提取1.字典特征提取&#xff08;特征離散化&#xff09;2.文本特征提取2.1英文文本提取2.2中文文本提取&#xff08;jieba分詞器&#xff09;3.TfidfVectorizer TF-IDF文本特征詞的重要程度特征提取三、數據歸一化與標準化1.MinMaxScaler …

3、CC3200串口DMA

先說下CC3200存在2個16*8的fifos, 分別用于發送和接收 當fifos被disable時&#xff0c;將會作為一個1字節深度的保持寄存器&#xff0c; 所以無論fifos是開是關&#xff0c;發送和接收都繞不開fifos DMA 由于發送和接收都繞不過fifos,所以DMA也繞不開FIFOS. MAP_UARTFIFOLevelS…

從游戲NPC到手術助手:Agent AI重構多模態交互,具身智能打開AGI新大門

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 清華《GPT多模態大模型與AI Agent智能體》書籍配套視頻課程【陳敬雷…

Lesson 29 Taxi!

Lesson 29 Taxi! taxi n.出租車 同義詞:cab n.出租車 相關:taxi meter計價器 taxi stand taxi rank 出租車站 call ataxi 叫車&#xff0c;打車 例句:對不起,請問出租車站在哪里? Excuse me, do you know where the taxi rank is please? land v.著陸&#xff0c;登陸n.陸地…

怎樣將allegro的brd文件轉化為AD的PCB文件

由于工作需要將allegro的PCB轉成ad給同事&#xff0c;在使用AD軟件導入Allegro的brd格式文件時出現各種的異常報錯彈窗問題&#xff0c;現分享兩種將Allegro PCB文件導入到AD中的方法。一、第1種方法使用高版本的AD軟件&#xff08;AD22&#xff0c;同時操作電腦需安裝了Allegr…

[免費]【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts)【論文+源碼+SQL腳本】

大家好&#xff0c;我是python222_小鋒老師&#xff0c;看到一個不錯的【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)&#xff0c;分享下哈。 項目視頻演示 【免費】【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts爬蟲) Pytho…