【PHP】百度人工识别 demo 几个坑

百度人工识别 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);

解决方式:

  1. $img = base64_encode($img); 后面要再使用
$img = urlencode($img);  // url 转码:
// api文档有写,但是demo 没有,不写的话,就会出现 image transcode error 的错误
  1. $bodys 提交前,要进行 参数转换
$bodys = http_build_query($bodys);  
  • 至此问题完全解决!。
附:工单给出了 一个新的demo,其实也是差不多,只不过使用的是 curl_setopt_array 函数。
  • 我也是从这里发现问题应该是出在curl 上面了,然后一步一步去验证的,就不复述了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值