最近需要检测一下书籍封面的LOGO问题,文字识别,只能试试百度的api接口了,然后通用接口好办、直接传url值为图片的http地址就行,但是你说,高精度的那个,按照文档:所有图片均需要base64编码、去掉编码头后再进行urlencode。我试了几次,网上的工具也好,自己写demo处理也好就是返回image format error,刚开始试了一个demo:
<?php $img = '1.jpg'; $base64_img = base64EncodeImage($img); echo '<img src="' . $base64_img . '" />'; function base64EncodeImage ($image_file) { $base64_image = ''; $image_info = getimagesize($image_file); $image_info['mime'] = 'image/jpg'; $image_data = fread(fopen($image_file, 'r'), filesize($image_file)); $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data)); return $base64_image; }
是可以正确显示用base64显示图片,但是还是不ok,早上起来莫名其妙好了,希望能帮到一些跟我一样遇到这样问题的人,脚本:
<?php function post($url,$post_data){ //初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 0); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设置post方式提交 //关闭https验证 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_POST, 1); //设置post数据 curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); //显示获得的数据 return $data; } function detail_ocr($image_url){ // 文字识别 - 高精度版 $access_token = '123456'; $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token='.$access_token; $img = file_get_contents($image_url); $img = base64_encode($img); $headers['Content-Type'] = 'application/x-www-form-urlencoded'; $bodys = array( 'image' => $img, ); $res = post($url, $bodys); return $res; }