Baidu 画像認識 API

最初にエフェクトをプレビューしてください

feaa250077a543a39f037ae8e78a3e80~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp (640×594) (bytaimg.com)

上記のプレビュー画像からわかるように、各画像は5 つのデータを認識し、各データは認識度に応じて高いものから低いものに並べられており、各データには項目名認識度、とカテゴリー

準備

1.百度アカウントを登録する

2. Baidu Smart Cloud コンソールにログインします。

3. 製品リストで、人工知能 -> 画像認識を見つけます。

4. 以下の図に示すように、「アプリケーションの作成」をクリックします。

作成したアプリケーションリスト

コード部分

1. access_token 値を取得する

: 画像認識を使用するには access_token 値が必要なので、次のコードを使用できるように最初に取得する必要があります。

access_token を取得するにはさまざまな方法がありますが、ここでは PHP を使用して取得します。access_token の取得方法の詳細については、公式ドキュメントを参照してください。

ai.baidu.com/docs#/Auth/…

get_token.php ファイルを作成して access_token 値を取得します

PHP get access_token コード例:

 
 

php

コードをコピーする

<?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. アップロードした写真を保存するために、プロジェクトのルート ディレクトリにアップロード フォルダーを作成します。

2.2. 写真をアップロードしてデータをレンダリングするためのindex.htmlファイルを作成する

コードは以下のように表示されます。

 
 

js

コードをコピーする

<!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 style="margin:2% 0"><span>物品名称:'+msg.result[0].keyword+';</span> <span style="padding: 0 2%">识别度:'+msg.result[0].score*100+'%'+';</span><span>所属类目:'+msg.result[0].root+';</span></li>'                 data=data+  '<li style="margin:2% 0"><span>物品名称:'+msg.result[1].keyword+';</span> <span style="padding: 0 2%">识别度:'+msg.result[1].score*100+'%'+';</span><span>所属类目:'+msg.result[1].root+';</span></li>'                 data=data+  '<li style="margin:2% 0"><span>物品名称:'+msg.result[2].keyword+';</span> <span style="padding: 0 2%">识别度:'+msg.result[2].score*100+'%'+';</span><span>所属类目:'+msg.result[2].root+';</span></li>'                 data=data+  '<li style="margin:2% 0"><span>物品名称:'+msg.result[3].keyword+';</span> <span style="padding: 0 2%">识别度:'+msg.result[3].score*100+'%'+';</span><span>所属类目:'+msg.result[3].root+';</span></li>'                 data=data+  '<li style="margin:2% 0"><span>物品名称:'+msg.result[4].keyword+';</span> <span style="padding: 0 2%">识别度:'+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="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="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. 写真を受信し、画像認識 API を呼び出すための Upload.php ファイルを作成する

備考: Baidu 画像認識 API インターフェイスにはさまざまな種類がありますが、ここでは [一般オブジェクトとシーンの認識アドバンスト エディション] を示します。このインターフェイスは 100,000 の一般的なオブジェクトとシーンの認識をサポートし、インターフェイスは主要なカテゴリとサブカテゴリの名前の結果を返し、画像認識結果に応じた百科事典情報を取得

このインターフェイスを呼び出す方法も多数あります。ここでは、PHP を使用してインターフェイスを呼び出します。一般オブジェクトおよびシーン認識の高度なバージョンを呼び出す方法と手順については、公式ドキュメントを参照してください。

ai.baidu.com/docs#/画像…

PHP リクエスト コードのサンプル:

 
 

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 値が有効かどうかを判断して再リクエストすることができます。無効です

おすすめ

転載: blog.csdn.net/bruce__ray/article/details/131144536