提交
This commit is contained in:
189
app/service/BaiduOcrService.php
Normal file
189
app/service/BaiduOcrService.php
Normal file
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
namespace app\service;
|
||||
|
||||
use Curl\Curl;
|
||||
|
||||
class BaiduOcrService
|
||||
{
|
||||
private $access_token;
|
||||
private $access_token_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials';
|
||||
|
||||
private $ocr_url='https://aip.baidubce.com/rest/2.0/ocr/v1/';
|
||||
public function __construct()
|
||||
{
|
||||
$this->getAccessToken();
|
||||
}
|
||||
/**
|
||||
*
|
||||
*护照识别
|
||||
* @param string $fileData 图片的二进制数据
|
||||
* @return array
|
||||
*/
|
||||
function passport($fileData)
|
||||
{
|
||||
if ($fileData === false) {
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '无法读取上传的文件',
|
||||
];
|
||||
}
|
||||
if (empty($this->access_token)){
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '无法识别',
|
||||
];
|
||||
}
|
||||
$curl = new Curl();
|
||||
$curl->setOpt(CURLOPT_SSL_VERIFYPEER, false);
|
||||
$curl->setOpt(CURLOPT_SSL_VERIFYHOST, 0);
|
||||
$curl->post($this->ocr_url.'passport'.'?access_token='.$this->access_token, [
|
||||
'image' => base64_encode($fileData),
|
||||
]);
|
||||
if ($curl->error) {
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => $curl->errorMessage,
|
||||
];
|
||||
} else {
|
||||
if (isset($curl->response->error_code)){
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '解析失败',
|
||||
];
|
||||
}
|
||||
$datas = json_decode(json_encode($curl->response), true);
|
||||
return [
|
||||
'code' => 1,
|
||||
'data' => parsePassport($datas)
|
||||
];
|
||||
}
|
||||
}
|
||||
public function getAccessToken()
|
||||
{
|
||||
if (file_exists(BAIDUACCESSTOKENDIR.'baidu_access_token')){
|
||||
$access_token = file_get_contents(BAIDUACCESSTOKENDIR.'baidu_access_token');
|
||||
$access_token = json_decode($access_token,true);
|
||||
if ($access_token['expires_time'] > time()){
|
||||
$this->access_token = $access_token['access_token'];
|
||||
return [
|
||||
'code' => 1,
|
||||
'msg' => "获取成功",
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
$this->access_token_url = $this->access_token_url.'&client_id='.config('app.baidu_ocr.appkey').'&client_secret='.config('app.baidu_ocr.appsecket');
|
||||
$curl = new Curl();
|
||||
$curl->setHeader('Content-Type', 'application/json');
|
||||
$curl->post($this->access_token_url);
|
||||
if ($curl->error) {
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => $curl->errorMessage,
|
||||
];
|
||||
}
|
||||
//进行存储access_token
|
||||
$access_token = $curl->response->access_token;
|
||||
$this->access_token = $access_token;
|
||||
file_put_contents(BAIDUACCESSTOKENDIR.'baidu_access_token',json_encode(
|
||||
[
|
||||
'access_token' => $access_token,
|
||||
'expires_time' => time() + $curl->response->expires_in - 600,
|
||||
]
|
||||
));
|
||||
return [
|
||||
'code' => 1,
|
||||
'msg' => "获取成功",
|
||||
];
|
||||
}
|
||||
/**
|
||||
*
|
||||
*身份证识别
|
||||
* @param string $fileData 图片的二进制数据
|
||||
* @return array
|
||||
*/
|
||||
function identification($fileData)
|
||||
{
|
||||
if ($fileData === false) {
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '无法读取上传的文件',
|
||||
];
|
||||
}
|
||||
if (empty($this->access_token)){
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '无法识别',
|
||||
];
|
||||
}
|
||||
$curl = new Curl();
|
||||
$curl->post($this->ocr_url.'idcard'.'?access_token='.$this->access_token, [
|
||||
'id_card_side' => "front",
|
||||
'image' => base64_encode($fileData),
|
||||
]);
|
||||
if ($curl->error) {
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => $curl->errorMessage,
|
||||
];
|
||||
} else {
|
||||
if (isset($curl->response->error_code)){
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '解析失败',
|
||||
];
|
||||
}
|
||||
$datas = json_decode(json_encode($curl->response), true);
|
||||
return [
|
||||
'code' => 1,
|
||||
'data' => parseIdentification($datas)
|
||||
];
|
||||
}
|
||||
}
|
||||
/**
|
||||
*
|
||||
*护照识别
|
||||
* @param string $fileData 图片的二进制数据
|
||||
* @return array 包含压缩后图片信息的数组
|
||||
*/
|
||||
function visa($fileData)
|
||||
{
|
||||
if ($fileData === false) {
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '无法读取上传的文件',
|
||||
];
|
||||
}
|
||||
if (empty($this->access_token)){
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '无法识别',
|
||||
];
|
||||
}
|
||||
$curl = new Curl();
|
||||
$curl->post($this->ocr_url.'accurate_basic'.'?access_token='.$this->access_token, [
|
||||
'image' => base64_encode($fileData),
|
||||
'language_type'=>'ENG'
|
||||
]);
|
||||
if ($curl->error) {
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => $curl->errorMessage,
|
||||
];
|
||||
} else {
|
||||
if (isset($curl->response->error_code)){
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '解析失败',
|
||||
];
|
||||
}
|
||||
$datas = json_decode(json_encode($curl->response), true);
|
||||
return [
|
||||
'code' => 1,
|
||||
'data' => parseVisa($datas)
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user