使用PHP SDK图片OCR接口识别图片中的文字或卡证信息,并同步返回识别出来的结果。

说明 通用OCR除了能够识别除了普通图片中的文字,还能识别结构化的卡证上的文字,具体请参考图片OCR检测API说明

准备工作

在进行具体的服务调用之前,请参考以下步骤,完成准备工作:
  1. 创建阿里云AccessKeyId和AccessKeySecret。具体请参考创建AccessKey
  2. 安装PHP依赖。具体请参考安装PHP依赖

传图片url检测示例代码

以下示例针对互联网图片链接进行身份证信息识别:
<?php

require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';

use Green\Request\V20180509 as Green;

//请替换成您的accessKeyId、accessKeySecret
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您自己的AccessKeyId", "您自己的AccessKeySecret");
DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
$client = new DefaultAcsClient($iClientProfile);

$request = new Green\ImageSyncScanRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");

$task1 = array('dataId' =>  uniqid(),
    'url' => 'https://身份证图片.jpg'
);
$extras = array('card' => 'id-card-front');
// 设置待检测图片, 一张图片一个task,
// 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
// 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
// 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task
// ocr检测按照实际检测的图片张数×检测的卡证类型单价计费
$request->setContent(json_encode(array(
    "tasks" => array($task1),
    "scenes" => array("ocr"),
    "extras" => array($extras)
    )));
try {
    $response = $client->getAcsResponse($request);
   # print_r($response);
    if(200 == $response->code){
        $taskResults = $response->data;
        foreach ($taskResults as $taskResult) {
            if (200 == $taskResult->code) {
                $sceneResults = $taskResult->results;
                print_r($sceneResults);
            }
        }
    }else{
        print_r("detect not success. code:" + $response->code);
    }
} catch (Exception $e) {
    print_r($e);
}

图片文件检测示例代码

以下示例针对本地图片文件进行身份证信息识别:
<?php

require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';

use Green\Request\V20180509 as Green;
use Green\Request\Extension\ClientUploader;

//请替换成您的accessKeyId、accessKeySecret
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您自己的AccessKeyId", "您自己的AccessKeySecret");
DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
$client = new DefaultAcsClient($iClientProfile);

$request = new Green\ImageSyncScanRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");

$uploader = ClientUploader::getImageClientUploader($client);
$url = $uploader->uploadFile("d:/身份证图片.png");
$task1 = array('dataId' =>  uniqid(),
    'url' => $url
);
$extras = array('card' => 'id-card-front');
// 设置待检测图片, 一张图片一个task,
// 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
// 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
// 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task
// ocr检测按照实际检测的图片张数×检测的卡证类型单价计费
$request->setContent(json_encode(array(
    "tasks" => array($task1),
    "scenes" => array("ocr"),
    "extras" => array($extras)
    )));
try {
    $response = $client->getAcsResponse($request);
   # print_r($response);
    if(200 == $response->code){
        $taskResults = $response->data;
        foreach ($taskResults as $taskResult) {
            if (200 == $taskResult->code) {
                $sceneResults = $taskResult->results;
                print_r($sceneResults);
            }
        }
    }else{
        print_r("detect not success. code:" + $response->code);
    }
} catch (Exception $e) {
    print_r($e);
}

图片二进制数据检测示例代码

以下示例针对二进制图片字节数组数据进行身份证信息识别:
<?php

require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';

use Green\Request\V20180509 as Green;
use Green\Request\Extension\ClientUploader;

//请替换成您的accessKeyId、accessKeySecret
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您自己的AccessKeyId", "您自己的AccessKeySecret");
DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
$client = new DefaultAcsClient($iClientProfile);

$request = new Green\ImageSyncScanRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");

$bytes = file_get_contents("d:/身份证图片.jpg");
$url = $uploader->uploadBytes($bytes);
$task1 = array('dataId' =>  uniqid(),
    'url' => $url
);
$extras = array('card' => 'id-card-front');
// 设置待检测图片, 一张图片一个task,
// 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
// 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
// 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task
// ocr检测按照实际检测的图片张数×检测的卡证类型单价计费
$request->setContent(json_encode(array(
    "tasks" => array($task1),
    "scenes" => array("ocr"),
    "extras" => array($extras)
    )));
try {
    $response = $client->getAcsResponse($request);
   # print_r($response);
    if(200 == $response->code){
        $taskResults = $response->data;
        foreach ($taskResults as $taskResult) {
            if (200 == $taskResult->code) {
                $sceneResults = $taskResult->results;
                print_r($sceneResults);
            }
        }
    }else{
        print_r("detect not success. code:" + $response->code);
    }
} catch (Exception $e) {
    print_r($e);
}