PHP接入图片文字识别AIP
由于项目的需要,我使用百度的文字识别API,但要注意的是不是百分百可以识别,特别是手写的字体很潦草就很难识别了。
使用文字识别的API:
第一步:新手接入指南
https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3
第二步:接入API
文档:https://ai.baidu.com/ai-doc/OCR/zk3h7xz52
文字API请求URL,它必须要有参数
access_token:
$url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=' . $token;
示例如下:
/** * 发起http post请求(REST API), 并获取REST请求的结果 * @param string $url * @param string $param * @return - http response body if succeeds, else false. */ public 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_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; }
/** * 获取API访问授权码,调用鉴权接口获取的token * @param ak: ak from baidu cloud app * @param sk: sk from baidu cloud app * @return - access_token string if succeeds, else false. */ public function access_token(){ //密钥 $ak = '';//你的 Api Key $sk = '';//你的 Secret Key //请求地址 $url = 'https://aip.baidubce.com/oauth/2.0/token'; //参数 $post_data = array(); $post_data['grant_type'] = 'client_credentials'; $post_data['client_id'] = $ak; $post_data['client_secret'] = $sk; //请求方法 $res = $this->request_post($url, $post_data); $res = json_decode($res, true); return $res['access_token']; }
//演示 public function demo() { //获取access_token $access_token = $this->access_token(); //定义参数并去请求api,注意:“?”前面车牌识别的API,后面是参数 $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token=' . $access_token; //要识别的图片 $img = file_get_contents('https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1378137177,1265877744&fm=26&gp=0.jpg'); $img = base64_encode($img); $bodys = array( "image" => $img ); $data = $this->request_post($url, $bodys);//解码json数据 //重定义数据,只获取文字 // $arr = array(); // foreach ($data->words_result as $k=>&$v){ // $arr[]=$v->words; // } //转换成字符串 echo "<pre>"; print_r($data); }
注:演示时我使用了车牌识别的API,调用时你要根据需要更改
使用SDK文字识别
在百度文档里,文字识别有API文档和SDK文档,如果你想使用SDK就直接调用就好,比API方便。
第一步:把SDK放在extend里
第二步:调用SDK已经封装好函数
use baidu\AipOcr;//这里改成namespace和use引入,也可以直接require_once引入 public function demo2(){ $api_id = '你的 App ID'; $api_key = '你的 Api Key'; $secret_key = '你的 Secret Key'; // 初始化, $aipOcr = new AipOcr($api_id, $api_key, $secret_key); // 身份证识别 //var_dump($aipOcr->idcard(file_get_contents('idcard.jpg'), true)); // 银行卡识别 //var_dump($aipOcr->bankcard(file_get_contents('bankcard.jpg'))); // 通用文字识别 $rescult = $aipOcr->general(file_get_contents('图片路径')); $words = $rescult['words_result']; echo "<pre>"; print_r($words); }
API和SDK的区别
API
API即“应用程序编程接口”,是一些预先定义的函数,目的是作为“介面”沟通两个不同的东西,提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
即简单的说,前端调用后端数据的一个通道,就是我们俗说的接口,通过这个通道,可以访问到后端的数据,但是又无需调用源代码。
SDK
SDK即“软体开发工具包”,一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。通俗点是指由第三方服务商提供的实现软件产品某项功能的工具包。
即简单的说,工程师为辅助开发某类软件的相关文档、范例和工具的集合,使用SDK可以提高开发效率,更简单的接入某个功能。
区别
1、API是一个函数,有其特定的功能;而SDK是一个很多功能函数的集合体,一个工具包。
2、API是数据接口,SDK相当于开发集成工具环境,要在SDK的环境下来调用API。
3、API接口对接过程中需要的环境需要自己提供,SDK不仅提供开发环境,还提供很多API。
4、简单功能调用,API调用方便快捷;复杂功能调用,SDK功能齐全。