PHP结合Face++ API实现微信公众号人脸检测与相似度识别
本文详解如何利用PHP语言配合第三方SDK与Face++人脸搜索API,实现在微信公众号平台上的图片人脸检测及人脸相似度对比功能。
实现目标与效果
通过在微信公众号后台接入PHP脚本,当用户在对话框发送照片时,系统将自动解析并调用Face++接口进行图像处理。最终可实现以下功能:
1. 单张图片检测:识别画面中的脸数,并分析每张嘴脸的年龄、性别、种族、是否佩戴眼镜等特征。
2. 多张图片比对:若图片中包含两张面孔,系统可自动计算两人之间的面部相似百分比,并提供眼、眉、口、鼻的细分相似度分析。
运行效果图如下:
开发准备条件
- Face++开发者账号:登录官网注册账号,获取
api_key和api_secret。 - 微信公众号:需具备服务器配置权限的公众号。
- PHP开发环境:推荐基于成熟的开源封装库进行开发,例如 wechat-php-sdk,该库封装了基础的消息接收验证与回复逻辑。
第1步:初始化微信SDK核心类
引入 Wechat 核心文件后,需要实例化对象以建立连接。
<?php
include "wechat.class.php";
$options = array(
'token' => 'weego', // 此处替换为你在公众号后台设置的Token
'debug' => true,
'logcallback' => 'logdebug'
);
$weObj = new Wechat($options);
// 启动服务验证
$weObj->valid();
$weObj->getRev();
第2步:编写主处理逻辑分发器
根据用户发送的消息类型(文本、图片、关注事件等)进行路由判断。
<?php
$type = $weObj->getRevType();
switch($type) {
case Wechat::MSGTYPE_TEXT:
// 处理文字指令
break;
case Wechat::MSGTYPE_IMAGE:
// 核心:触发人脸检测函数
$imgUrl = $weObj->getRev()->getRevPic();
$resultStr = face($imgUrl);
$weObj->text($resultStr)->reply();
break;
default:
$weObj->text("Default")->reply();
}
第3步:实现 Face++ 人脸检测与比对算法
这是整个系统的核心。主要包含两步:
第一步:使用 /v2/detection/detect 接口解析图片;
第二步:如果检测到至少两个 face_id,则调用 /v2/recognition/compare 进行对比。
<?php
function face($imgUrl) {
// 请求人脸检测接口
$jsonStr = file_get_contents(\n "http://apicn.faceplusplus.com/v2/detection/detect?url="$imgUrl.&api_key=YOUR_KEY&api_secret=YOUR_SECRET&attribute=glass,pose,gender,age,race,smiling"
);
$replyDic = json_decode($jsonStr);
$faceArray = $replyDic->{'face'};
if(!isset($faceArray) || count($faceArray)==0) return "照片中木有人脸=.=";
$resultStr = "图中共检测到".count($faceArray)."张脸!\n";
foreach ($faceArray as $i => $tempFace){
$tempAttr = $tempFace->{'attribute'};
// 提取年龄区间
$minAge = max(0, $tempAttr->{'age'}->{'value'} - $tempAttr->{'age'}->{'range'});
$maxAge = $tempAttr->{'age'}->{'value'} + $tempAttr->{'age'}->{'range'};
$resultStr .= "脸".($i+1).": 年龄{$minAge}-{$maxAge}岁, ";
// 提取性别
$genderVal = $tempAttr->{'gender'}->{'value'};
$resultStr .= ($genderVal == "Male") ? "男" : "女";
// ... (省略其他属性如种族、微笑等的拼接代码)
}
// 只有当图片中存在恰好两张脸时,才执行相似度计算
if(count($faceArray) === 2){
$id1 = $faceArray[0]->{'face_id'};
$id2 = $faceArray[1]->{'face_id'};
// 调用人脸识别对比接口
$compareJson = file_get_contents("https://apicn.faceplusplus.com/v2/recognition/compare?face_id1=$id1&face_id2=$id2&api_key=YOUR_KEY&api_secret=YOUR_SECRET");
$simData = json_decode($compareJson);
$totalSim = round($simData->{'similarity'}) . "%";
$resultStr .= "\n相似程度:$totalSim\n";
// 输出局部特征相似度
$comp = $simData->{'component_similarity'};
$resultStr .= "眼睛相似度:".round($comp->{'eye'})."%\n";
$resultStr .= "眉毛相似度:".round($comp->{'eyebrow'})."%\n";
$resultStr .= "嘴巴相似度:".round($comp->{'mouth'})."%\n";
$resultStr .= "鼻子相似度:".round($comp->{'nose'})."%";
}
return $resultStr;
}
完成状态与排错
完成判断:
- 用户向公众号发送一张单人照片,收到年龄、性别等详细信息反馈。
- 用户发送包含两人的合影照片,除了基本信息外,额外输出两人面部总体的相似率及五官详细对比。
常见排查点:
- 401 Unauthorized 或参数错误:检查 api_key 和 api_secret 是否正确填入,且未暴露于公共前端源码中。
以上就是使用PHP结合Face++开发微信公众号人脸识别系统的详细内容,更多关于微信公众号AI开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













