由於項目的需要,我使用百度的文字識別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功能齊全。