首先:
注册百度云,并搜索人脸实名认证
第二步查看自己要请求的api
创建步骤:
添加一个人脸识别的人脸库
添加一个人脸用户组
添加一个人脸用户
给这个用户添加一张人像图
然后 渲染出 拍照页
前端:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.5.4/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<style>
*{
margin: 0 auto;
padding: 0;
}
button{
width: 100px;
height: 40px;
background-color: black;
color: white;
border-radius: 10px;
}
#video{
background-color: black;
border-radius: 50%;
}
.layuimini-container{
margin: 10%;
}
</style>
</head>
<body>
<div class="layuimini-container">
<div align="center">
<video id="video" width="300px" height="300px" autoplay></video>
<canvas hidden="hidden" id="canvas" width="626" height="800"></canvas>
</div>
<div align="center">
<button id="open">授权摄像头</button>
<button id="close">关闭摄像头</button>
<button id="CatchCode">人脸检测</button>
</div>
</div>
<script src="/static/lib/layui-v2.5.4/layui.js" charset="utf-8"></script>
<script src="/static/js/wk.js" charset="utf-8"></script>
<script type="text/javascript">
var video; //视频流对象
var context; //绘制对象
var canvas; //画布对象
$(function () {
var flag = false;
//开启摄像头
$("#open").click(function () {
//判断摄像头是否打开
if (!flag) {
//调用摄像头初始化
open();
flag = true;
}
});
//关闭摄像头
$("#close").click(function () {
//判断摄像头是否打开
if (flag) {
video.srcObject.getTracks()[0].stop();
flag = false;
}
});
//拍照
$("#CatchCode").click(function () {
if (flag) {
context.drawImage(video, 0, 0, 330, 250);
CatchCode();
} else
alert("请先开启摄像头!");
});
});
//将当前图像传输到后台
function CatchCode() {
//获取图像
var img = getBase64();
//Ajax将Base64字符串传输到后台处理
$.ajax({
type: "POST",
async: false,
url: "{:url('faceVerify')}",
data: {
img: img,
},
dataType: "JSON",
success: function (data) {
console.log(data);return false;
//返回的结果
if (data.code == 0){
location.href = "{:url('paySuccess')}"
}else {
location.href = "{:url('payFail')}"
return false;
}
}
});
};
// 开启摄像头
function open() {
// 获取摄像头对象
canvas = document.getElementById("canvas");
context = canvas.getContext("2d");
// 获取视频流
video = document.getElementById("video");
var videoObj = {
"video": true
},
errBack = function (error) {
console.log("Video capture error: ", error.code);
};
context.drawImage(video, 0, 0, 330, 250);
if (navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia) {
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia;
navigator.getUserMedia(videoObj, function (stream) {
video.srcObject = stream;
video.play();
}, errBack);
}
}
// 将摄像头拍取的图片转换为Base64格式字符串
function getBase64() {
// 获取当前图像并转换为Base64的字符串
var imgSrc = canvas.toDataURL("image/png");
// 截取字符串
return imgSrc.substring(22);
};
</script>
</body>
</html>
curl请求代码:
<?php
function request_post($url = '', $param = '') {
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();//初始化curl
curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页
curl_setopt($curl, CURLOPT_HEADER, 0);//设置header
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($curl);//运行curl
curl_close($curl);
return $data;
}
/**
* 发起http post请求(REST API), 并获取REST请求的结果
* @param string $url
* @param string $param
* @return - http response body if succeeds, else false.
*/
function request_posts($url = '', $param = '')
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
// 初始化curl
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $postUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 要求结果为字符串且输出到屏幕上
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// post提交方式
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
// 运行curl
$data = curl_exec($curl);
curl_close($curl);
return $data;
}
后端:
第一步:获取access_token
public function getToken(){
$url = 'https://aip.baidubce.com/oauth/2.0/token';
$post_data['grant_type'] = 'client_credentials';
$post_data['client_id'] = '你创建应用给的ak'; // Api Key
$post_data['client_secret'] = '你创建应用给的sk'; // Secret Key
$o = "";
foreach ($post_data as $k => $v) {
$o .= "$k=" . urlencode($v) . "&";
}
$post_data = substr($o, 0, -1);
$res = request_post($url, $post_data);
$res = json_decode($res, true);
print_r( $res);
cache('token',$res['access_token']);
}
第二部:开始识别
public function faceVerify(Request $request)
{
$token = cache('token');
$url = 'https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=' .$token;
$image = $request->param('img');
$bodys = "{
\"image\":\"$image\",
\"image_type\":\"BASE64\",
\"group_id_list\":\"face\",
\"quality_control\":\"LOW\",
\"liveness_control\":\"NORMAL\"
}";
// print_r($bodys);die;
$res = request_posts($url, $bodys);
$req = json_decode($res,true);
$userList = $req['result']['user_list'][0];
print_r($userList);
}