印刷文字识别-身份证识别
// 阿里身份证识别
public function actionAliAutonym($file, $side = 'face')
{
$url = "https://dm-51.data.aliyun.com/rest/160601/ocr/ocr_idcard.json";
$appcode = ''; #你的APPCODE
//如果输入带有inputs, 设置为True,否则设为False
$is_old_format = false;
//如果没有configure字段,config设为空
$config = array(
"side" => $side
);
if ($fp = fopen($file, "rb", 0)) {
$binary = fread($fp, filesize($file)); // 文件读取
fclose($fp);
$base64 = base64_encode($binary); // 转码
}
$headers = array();
array_push($headers, "Authorization:APPCODE " . $appcode);
//根据API的要求,定义相对应的Content-Type
array_push($headers, "Content-Type" . ":" . "application/json; charset=UTF-8");
if ($is_old_format == TRUE) {
$request = array();
$request["image"] = array(
"dataType" => 50,
"dataValue" => "$base64"
);
if (count($config) > 0) {
$request["configure"] = array(
"dataType" => 50,
"dataValue" => json_encode($config)
);
}
$body = json_encode(array("inputs" => array($request)));
} else {
$request = array(
"image" => "$base64"
);
if (count($config) > 0) {
$request["configure"] = json_encode($config);
}
$body = json_encode($request);
}
$method = "POST";
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
if (1 == strpos("$" . $url, "https://")) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($curl);
$res = json_decode($result, true);
if ($res && $res['success']) {
if ($side == 'face') return ['realname' => $res['name'], 'id_number' => $res['num'], 'sex' => $res['sex']];
if ($side == 'back') return ['start_date' => $res['start_date'], 'end_date' => $res['end_date']];
} else {
return $this->port(0, '请上传正确的身份证照');
}
}
这里有一个比较坑点要注意, 身份识别必须是存储在服务器本地的图片,
云存储上的图片无法识别