百度人工识别 demo 几个坑
- 照着demo 来,发现不行。提交了工单,给了另外的demo,倒是解决了。
- 顺便想了想再去解决这个老demo 的问题,把demo 也解决了。
问题如下。
-
根据 demo 提交后,要么提示
image format error
, 要么 只识别出一部分 ,而且限定.jpeg
格式 -
为了方便看,把 官方的线上demo 放上:
<?php
/**
* 发起http post请求(REST API), 并获取REST请求的结果
* @param string $url
* @param string $param
* @return - http response body if succeeds, else false.
*/
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;
}
$token = '[调用鉴权接口获取的token]';
$url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis?access_token=' . $token;
$img = file_get_contents('[本地文件路径]');
$img = base64_encode($img);
$bodys = array(
'language_type' => "CHN_ENG",
'result_type' => "big",
'image' => $img
);
$res = request_post($url, $bodys);
var_dump($res);
解决方式:
- 在
$img = base64_encode($img);
后面要再使用
$img = urlencode($img); // url 转码:
// api文档有写,但是demo 没有,不写的话,就会出现 image transcode error 的错误
- $bodys 提交前,要进行 参数转换
$bodys = http_build_query($bodys);
- 至此问题完全解决!。
附:工单给出了 一个新的demo,其实也是差不多,只不过使用的是 curl_setopt_array 函数。
- 我也是从这里发现问题应该是出在curl 上面了,然后一步一步去验证的,就不复述了。