闲来无事研究了百度图像辨认 API,发现该功用还算强大,在此将其运用方法总结成教程,供给我们学习参考
首先预览下效果
从以上预览图中可看出,每张图片辨认出5条数据,每条数据根据辨认度从高往下排,每条数据包括物品称号、辨认度、所属类目
准备工作
1、注册百度账号
2、登录百度智能云控制台
3、在产品列表中找到 人工智能->图像辨认
4、点击创立运用,如下图:
已创立好的运用列表
代码部分
1、获取access_token值
注意:运用图像辨认需用到access_token值,因此需先获取到,以便下面代码的运用
access_token获取的方法有多种,这儿运用PHP获取,更多有关access_token获取的方法以及阐明可查看官方文档:
ai.baidu.com/docs#/Auth/…
创立一个get_token.php文件,用来获取access_token值
PHP获取access_token代码示例:
<?php
//恳求获取access_token值函数
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);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($curl);//运转curl
curl_close($curl);
return $data;
}
$url = 'https://aip.baidubce.com/oauth/2.0/token'; //固定地址
$post_data['grant_type'] = 'client_credentials'; //固定参数
$post_data['client_id'] = '你的 Api Key'; //创立运用的API Key;
$post_data['client_secret'] = '你的 Secret Key'; //创立运用的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);//调用获取access_token值函数
var_dump($res);
?>
回来的数据如下,红框内的便是我们所要的access_token值
2、图片上传及辨认
2.1、在项目的根目录下创立一个upload文件夹,用于寄存上传的图片
2.2、创立一个index.html文件,用于上传图片及数据渲染
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>运用百度 API 实现图像辨认</title>
<style type="text/css">
.spanstyle{
display:inline-block;
width:500px;
height:500px;
position: relative;
}
</style>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script>
function imageUpload(imgFile) {
var uploadfile= imgFile.files[0] //获取图片文件流
var formData = new FormData(); //创立一个FormData对象
formData.append('file',uploadfile);
//将图片放入FormData对象对象中(因为图片归于文件格局,不能直接将文件流直接通过ajax传递到后台,需求放入FormData对象中。在传递)
$("#loading").css("opacity",1);
$.ajax({
type: "POST", //POST恳求
url: "upload.php", //接收图片的地址(同目录下的php文件)
data:formData, //传递的数据
dataType:"json", //声明成功运用json数据类型回调
//假如传递的是FormData数据类型,那么下来的三个参数是有必要的,否则会报错
cache:false, //默许是true,但是一般不做缓存
processData:false, //用于对data参数进行序列化处理,这儿有必要false;假如是true,就会将FormData转换为String类型
contentType:false, //一些文件上传http协议的联系,自行百度,假如上传的有文件,那么只能设置为false
success: function(msg){ //恳求成功后的回调函数
console.log(msg.result)
//预览上传的图片
var filereader = new FileReader();
filereader.onload = function (event) {
var srcpath = event.target.result;
$("#loading").css("opacity",0);
$("#PreviewImg").attr("src",srcpath);
};
filereader.readAsDataURL(uploadfile);
//将后台回来的数据进行进一步处理
var data= '<li><span>物品称号:'+msg.result[0].keyword+';</span> <span>辨认度:'+msg.result[0].score*100+'%'+';</span><span>所属类目:'+msg.result[0].root+';</span></li>'
data=data+ '<li><span>物品称号:'+msg.result[1].keyword+';</span> <span>辨认度:'+msg.result[1].score*100+'%'+';</span><span>所属类目:'+msg.result[1].root+';</span></li>'
data=data+ '<li><span>物品称号:'+msg.result[2].keyword+';</span> <span>辨认度:'+msg.result[2].score*100+'%'+';</span><span>所属类目:'+msg.result[2].root+';</span></li>'
data=data+ '<li><span>物品称号:'+msg.result[3].keyword+';</span> <span>辨认度:'+msg.result[3].score*100+'%'+';</span><span>所属类目:'+msg.result[3].root+';</span></li>'
data=data+ '<li><span>物品称号:'+msg.result[4].keyword+';</span> <span>辨认度:'+msg.result[4].score*100+'%'+';</span><span>所属类目:'+msg.result[4].root+';</span></li>'
//将辨认的数据在页面渲染出来
$("#content").html(data);
}
});
}
</script>
</head>
<body>
<fieldset>
<input type="file" onchange="imageUpload(this)" >
<legend>图片上传</legend>
</fieldset>
<div style="margin-top:2%">
<span class="spanstyle">
<img id="PreviewImg" src="https://juejin.im/post/7241874482574770235/default.jpg" style="width:100%;max-height:100%" >
<img id="loading" style="width:100px;height:100px;top: 36%;left: 39%;position: absolute;opacity: 0;" src="https://juejin.im/post/7241874482574770235/loading.gif" >
</span>
<span class="spanstyle" style="vertical-align: top;border: 1px dashed #ccc;background-color: #4ea8ef;color: white;">
<h4 style="padding-left:2%">辨认成果:</h4>
<ol style="padding-right: 20px;" id="content">
</ol>
</span>
</div>
</body>
</html>
2.3、创立一个upload.php文件,用于接收图片及调用图像辨认API
补白:百度图像辨认API接口有多种,这儿运用的是【通用物体和场景辨认高级版】 ;该接口支撑辨认10万个常见物体及场景,接口回来大类及细分类的称号成果,且支撑获取图片辨认成果对应的百科信息
该接口调用的方法也有多种,这儿运用PHP来调用接口,更多有关通用物体和场景辨认高级版调用的方法以及阐明可查看官方文档:
ai.baidu.com/docs#/Image…
PHP恳求代码示例:
<?php
//图像辨认恳求函数
function request_post($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;
}
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取图片文件后缀名
$_FILES["file"]["name"]=time().'.'.$extension;//图片重命名(以时刻戳来命名)
//将图片文件存在项目根目录下的upload文件夹下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
$token = '调用鉴权接口获取的token';//将获取的access_token值放进去
$url = 'https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general?access_token=' . $token;
$img = file_get_contents("upload/" . $_FILES["file"]["name"]);//本地文件路径(存入后的图片文件路径)
$img = base64_encode($img);//文件进行base64编码加密
//恳求所需求的参数
$bodys = array(
'image' => $img,//Base64编码字符串
'baike_num'=>5 //回来百科信息的成果数 5条
);
$res = request_post($url, $bodys);//调用恳求函数
echo $res; //将辨认的数据输出到前端
?>
结语弥补
在实际开发过程中,获取access_token值并不是独自写成一个页面文件,而是写在项目体系的配置中;因为access_token值有效期为30天,可通过判断是否失效,来重新恳求access_token值