PHP实现人脸识别技术
这次人脸识别技术,是实现在微信端的,也就是说利用公众微信平台,调用第三的API来实现人脸识别这项技术的。
实现的思路:
首先呢,将收集的照片,建立一个照片库,然后利用在微信平台发送的照片,去到照片库进行匹配,那么怎么匹配呢?
这就要利用第三方的API了。
这个是收集信息,然后存储到信息库(包括图谱库)
部分代码:
<html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"> <title>上传到人脸信息库</title> <link rel="stylesheet" href="./weui/dist/style/weui.min.css"/> <style> #preview, .img, img { width:79px; height:79px; } </style> </head> <body> <div class="hd" style="text-align:center;"> <h1 class="weui_cell_primary">上传到人脸信息库</h1> </div> <form action="up.php" method="post" enctype="multipart/form-data"> <div class="weui_cell"> <div class="weui_cell_hd"><label class="weui_label">姓名</label></div> <div class="weui_cell_bd weui_cell_primary"> <input class="weui_input" type="text" name="username" placeholder="请输入联系人姓名"/> </div> </div> <div class="weui_cell"> <div class="weui_cell_hd"><label class="weui_label">电话</label></div> <div class="weui_cell_bd weui_cell_primary"> <input class="weui_input" type="text" name="number" pattern="[0-9]*" placeholder="请输入联系人电话号码"/> </div> </div> <div class="weui_cell"> <div class="weui_cell_hd"><label class="weui_label">微信</label></div> <div class="weui_cell_bd weui_cell_primary"> <input class="weui_input" type="text" name="weixin" placeholder="请输入联系人微信号"/> </div> </div> <div class="weui_cell"> <div class="weui_cell_bd weui_cell_primary"> <div class="weui_uploader"> <div class="weui_uploader_hd weui_cell"> <div class="weui_cell_bd weui_cell_primary">图片上传</div> </div> <div class="weui_uploader_bd"> <ul class="weui_uploader_files"> <li class="weui_uploader_file" id="preview"></li> </ul> <div class="weui_uploader_input_wrp"> <input class="weui_uploader_input" type="file" name="pic" onchange="preview(this)" /> </div> </div> </div> </div> </div> <input type="submit" value="提交" class="weui_btn weui_btn_primary" style="width:40%;"/> </form> </body> <script type="text/javascript"> function preview(file){ var prevDiv = document.getElementById('preview'); if(file.files && file.files[0]){ var reader = new FileReader(); reader.onload = function(evt){ prevDiv.innerHTML = '<img src="' + evt.target.result + '" />'; } reader.readAsDataURL(file.files[0]); }else{ prevDiv.innerHTML = '<div class="img" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src=\'' + file.value + '\'"></div>'; } } </script> </html>
分析照片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <? php if(isset($_FILES['pic'])&&$_FILES['pic']['error'] == 0){ $name = mt_rand(100000,999999); $ext = explode(".",$_FILES['pic']['name']); $ext = end($ext); $full = $name.".".$ext; $rs = move_uploaded_file($_FILES['pic']['tmp_name'], './upload/'.$full); if(!$rs){ exit('上传图片出错'); } //上传成功后,获取图片地址 $pic = 'http://yxhwxtest.applinzi.com/wx/upload/'.$full; //$pic = 'http://yxhwxtest.applinzi.com/wx/upload/718204.jpg'; //人脸检测与分析 $api = 'http://apicn.faceplusplus.com/v2/detection/detect?api_key=3f2fd9843ac889c84f43de513bca05f2&api_secret=sDUH2FP2b3L4tSKQNHCCk17sUYsHW8HU&url='.$pic.'&attribute=glass,pose,gender,age,race,smiling'; //将json转换为数组 $rs = json_decode(file_get_contents($api),true); if(count($rs['face']) == 0){ exit('没有检测出人脸'); } $face_id = $rs['face'][0]['face_id']; //创建脸集 //$api='https://apicn.faceplusplus.com/v2/faceset/create?api_key=3f2fd9843ac889c84f43de513bca05f2&api_secret=sDUH2FP2b3L4tSKQNHCCk17sUYsHW8HU&faceset_name=renlianshibie&face_id='.$face_id; //将人脸加入到脸集中 $api = 'https://apicn.faceplusplus.com/v2/faceset/add_face?api_secret=sDUH2FP2b3L4tSKQNHCCk17sUYsHW8HU&face_id='.$face_id.'&api_key=3f2fd9843ac889c84f43de513bca05f2&faceset_name=renlianshibie'; $rs = json_decode(file_get_contents($api),true); if($rs['success'] == 0){ exit('加入脸集失败'); }else{ //训练脸集 $api = 'https://apicn.faceplusplus.com/v2/train/search?api_key=3f2fd9843ac889c84f43de513bca05f2&api_secret=sDUH2FP2b3L4tSKQNHCCk17sUYsHW8HU&faceset_name=renlianshibie'; $rs = file_get_contents($api); //p($rs); exit('加入脸集成功'); } } //调试输出函数 function p($var){ if(is_bool($var)){ var_dump($var); }else if(is_null($var)){ var_dump(NULL); }else{ echo "<pre style='position:relative;z-index:1000;padding:10px;border-radius:5px;background:#F5F5F5;border:1px solid #aaa;font-size:14px;line-height:18px;opacity:0.9;'>".print_r($var,true)."</ pre >"; } } ?> |
收集信息完成后
在微信平台上回复 你要找的人的照片
这是服务器接收到图片进行响应的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | //接受图片进行回复 if(strtolower($postObj->MsgType=='image')){ $pic = $postObj->PicUrl; //检测人脸和分析 $api = 'http://apicn.faceplusplus.com/v2/detection/detect?api_key=3f2fd9843ac889c84f43de513bca05f2&api_secret=sDUH2FP2b3L4tSKQNHCCk17sUYsHW8HU&url='.$pic.'&attribute=glass,pose,gender,age,race,smiling'; $rs = json_decode(file_get_contents($api),true); if(count($rs['face'])==0){ $cont = "没有检测到人脸"; } $face_id = $rs['face'][0]['face_id']; //得到人脸,到脸集中去找相似的脸 $api = 'https://apicn.faceplusplus.com/v2/recognition/search?api_key=3f2fd9843ac889c84f43de513bca05f2&api_secret=sDUH2FP2b3L4tSKQNHCCk17sUYsHW8HU&faceset_name=renlianshibie&key_face_id='.$face_id; $rs = json_decode(file_get_contents($api),true); //$ps=[]; foreach($rs['candidate'] as $v) { if( intval($v['similarity']) > 60) { $ps[] = $v['face_id']; } } if(empty($ps)){ $cont = "找到相似的人"; }else{ $fids = implode(',', $ps); $api = 'https://apicn.faceplusplus.com/v2/info/get_face?api_key=3f2fd9843ac889c84f43de513bca05f2&api_secret=sDUH2FP2b3L4tSKQNHCCk17sUYsHW8HU&face_id='.$fids; $rs = json_decode(file_get_contents($api),true); if(count($rs['face_info'])==0){ $cont = '没有找到相识的人'; }else{ $cont = '找到相似的人'."\n"; foreach ($rs['face_info'] as $v) { $cont .= $v['url']."\n"; } } } //回复用户消息 $toUser = $postObj->FromUserName; $fromUser = $postObj->ToUserName; $time = time(); $content = $cont; $msgType = 'text'; $template = "< xml > < ToUserName ><![CDATA[%s]]></ ToUserName > < FromUserName ><![CDATA[%s]]></ FromUserName > < CreateTime >%s</ CreateTime > < MsgType ><![CDATA[%s]]></ MsgType > < Content ><![CDATA[%s]]></ Content > </ xml >"; $info = sprintf($template,$toUser,$fromUser,$time,$msgType,$content); echo $info; } |
然后,服务器就会返回,相应匹配到的信息。
返回的相应照片
然后就是实现了,人脸匹配的功能。
调用API的第三方平台:http://www.faceplusplus.com.cn/demo-detect/
代码下载:http://download.csdn.net/detail/yxhbk/9629866
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!