公司的项目因为要用到百度的OCR接口,而恰巧遇到了一些小坑,所以打算写出来。
一个是小问题 但是让我郁闷了很久
因为拍的照片不一定都是正着拍的所以我打算将['detect_direction'=>true]这个参数传过去的。
之前因为用了postman测试了一下百度的这个接口,一开始我是这么传的(图上这个image也是有问题的,开始我用的url所以没问题):
这里测试是完完全全没有问题的然后当我用PHP CURL写出来时问题来了
<?php $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'; $headers = [ 'Content-Type:multipart/form-data' ]; $post_data = [ 'image' => (string) $bimg, 'access_token' => $this->accessToken, 'detect_direction' => true ]; $curl = curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_NOBODY, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($curl, CURLOPT_POST,true); //设置POST请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); curl_setopt($curl, CURLOPT_TIMEOUT,(int)40); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); //添加httpheader if(!$output = curl_exec($curl)) die('curl not result'); curl_close($curl); echo $output;
是确确实实有参数返回了,但是和postman测试的完全不同了,识别的乱七八糟的。。。。然后苦思冥想之后发现文档中把post的参数中的
'detect_direction' => true 改成了'detect_direction' => 'true'
然后好了!!??TMD文档上写的bool呢?
我去真的很郁闷。。
然后紧接着又出现了一个问题,因为我写代码时是在本机跑的这个项目 所以传url这个方式真的很麻烦就想把图片转成base64,也就是第一张图的image那个参数结果总是提示我格式不对。。。。。
后来发现百度所需要的base64真的就只需要
base64_encode($imageUrl);
这样一下 然后传过去就好了。。。。
不知道是不是自己想的太多了之前还拼了data:图片类型啥的。。。