使用 PHP 调用阿里云印刷文字识别服务,通过 HTTP POST 请求传递图像数据时,需要将图像数据转化为 Base64 编码格式,并将其作为 body 参数传递给 OCR API 接口。
下面是使用 PHP 发起阿里云印刷文字识别服务请求的示例代码,其中将图像文件读取为 Base64 编码的字符串,并通过 https://ocr.cn-shanghai.aliyuncs.com/
接口地址发起 HTTP POST 请求,检测图像中的文字:
<?php
// 设置阿里云 API 访问密钥
$accessKeyId = '<Your Access Key ID>';
$accessKeySecret = '<Your Access Key Secret>';
// 设置 OCR API 请求参数
$params = array(
'RegionId' => 'cn-shanghai',
'Version' => '2019-12-30',
'Method' => 'POST',
'Action' => 'RecognizePrintedText',
'Format' => 'JSON',
'ImageURL' => '',
'ImageUrl' => '',
'OCRType' => 'normal',
'OutputFileFormat' => 'normal',
'MinHeight' => '',
'MaxHeight' => '',
'ReturnType' => '',
'ProjectId' => '',
'Side' => '',
'WatermarkImageURL' => '',
'Watermark' => '',
);
// 读取图像文件
$filename = 'path/to/image.jpg';
$imageData = base64_encode(file_get_contents($filename));
// 设置 HTTP POST 请求参数
$requestParams = array(
'http' => array(
'method' => 'POST',
'header' => array(
'Content-Type: application/json; charset=utf-8',
'Authorization: ACS '.$accessKeyId.':'
.signature($params, $accessKeySecret),
),
'content' => json_encode(array(
'ImageType' => 'Base64',
'Image' => $imageData,
'Url' => '',
'Height' => '',
'Width' => '',
)),
),
);
// 发起 HTTP POST 请求
$response = file_get_contents(
'https://ocr.'.strtolower($params['RegionId'])
.'.aliyuncs.com/', false, stream_context_create($requestParams));
// 输出识别结果
echo $response;
// 计算阿里云 API 访问秘钥签名
function signature($params, $accessKeySecret) {
ksort($params);
$strToSign = 'POST&%2F&'
.rawurlencode(http_build_query($params, null, '&',
PHP_QUERY_RFC3986));
return base64_encode(hash_hmac('sha1', $strToSign, $accessKeySecret.'&',
true));
}
需要注意的是,OCR API 的请求参数中,ImageURL 和 ImageUrl、Height 和 Width 参数不可以同时出现。如果是通过本地图像上传识别的方式,需要在请求内容中加入 ImageType 和 Image 参数,使用 Base64 编码,ImageType 参数值为 Base64。
在以上代码中,可以将要检测的图像数据读取到 $imageData
变量中,然后将其 Base64 编码后与其他参数一起放在 HTTP POST 请求的请求体中的 content 字段里面。同时,根据 API 文档中要求,还需要在 HTTP POST 请求头里面设置 Content-Type 为 application/json,并在 Authorization 中加入阿里云 API 访问秘钥签名。
用例子中的StreamUtil::readFromFilePath 报错 Invalid resource type: array,此回答整理自钉群“【官方】阿里云OCR公共云客户交流群”
在 PHP 中,使用 HTTP 请求的 body 参数进行检测时,需要传入相应的请求体数据。具体传入什么参数需要根据你要检测的内容来决定,通常情况下需要传入以下参数:
请求方法:例如 GET、POST、PUT 等。 请求 URL:包括主机名、路径、查询参数等。 请求头部:例如 User-Agent、Content-Type、Authorization 等。 请求体:例如表单数据、JSON 数据、XML 数据等。 具体需要传入哪些参数,可以根据接口文档或接口规范来确认。在 PHP 中,可以使用 $_POST、$_GET、$_PUT、$_DELETE 等变量来获取请求参数。如果请求体是 JSON 数据,可以使用 file_get_contents('php://input') 获取请求体数据,并使用 json_decode() 函数将其解析为 PHP 对象或数组。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。