PHP结合Face++ API实现微信公众号人脸检测与相似度识别

木白
木白
发布时间:2026-10-13 | 3人浏览过
原创

本文详解如何利用PHP语言配合第三方SDK与Face++人脸搜索API,实现在微信公众号平台上的图片人脸检测及人脸相似度对比功能。

实现目标与效果

通过在微信公众号后台接入PHP脚本,当用户在对话框发送照片时,系统将自动解析并调用Face++接口进行图像处理。最终可实现以下功能:
1. 单张图片检测:识别画面中的脸数,并分析每张嘴脸的年龄、性别、种族、是否佩戴眼镜等特征。
2. 多张图片比对:若图片中包含两张面孔,系统可自动计算两人之间的面部相似百分比,并提供眼、眉、口、鼻的细分相似度分析。

运行效果图如下:

开发准备条件

  1. Face++开发者账号:登录官网注册账号,获取 api_key 和 api_secret。
  2. 微信公众号:需具备服务器配置权限的公众号。
  3. 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.&amp;api_key=YOUR_KEY&amp;api_secret=YOUR_SECRET&amp;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&amp;face_id2=$id2&amp;api_key=YOUR_KEY&amp;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开发的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表