一、登录百度AI开放平台创建orc应用

1、选择文字识别→创建应用→做好记录后续使用下面三个数据

2、选择需要操作的文字识别→买入身份识别和银行卡识别(根据自己实际需求选,这个返回的比较全面,有人头像,所以选择这分开的,要是只需要信息,买通用就行)

二、下载sdk包
我使用的框架是php的,thinkphp6。下载包地址:https://ai.baidu.com/sdk#ocr

三、tp框架引入sdk包
在项目三方类库vendor中新建一个ocr文件夹,把下载好的sdk包放入到里面:

四、tp6相关代码使用
1、在app文件夹下,新建一个公用文件夹common 放入两个文件 Ai.php Image.php(用于base64上传)。同时在页面上引入

2、\new\app\common\Ai.php’

<?phpnamespace app\common;use think\facade\Config;
require_once '../vendor/ocr/AipOcr.php';
class Ai
{/*** phpmailer对象*/protected $client;/*** 构造函数*/public function __construct(){$config = Config::get('ocr');$this->client = new \AipOcr($config['ai_app_id'],$config['ai_api_key'],$config['ai_secret_key']);}static private function _check_file_path_type_is_url($file_path) {if (preg_match('/http/', $file_path)) {return true;}return false;}/*** 身份证识别* @param $file_path //图片地址* @param $front //正反*/public function getIdCard($file_path,$front) {if (self::_check_file_path_type_is_url($file_path)) {return $this->client->idcard($file_path);} else {$image = file_get_contents($file_path);return $this->client->idcard($image,$front);}}/*** 银行卡识别* @param $file_path //图片地址*/public function getBankCard($file_path) {if (self::_check_file_path_type_is_url($file_path)) {return $this->client->bankcard($file_path);} else {$image = file_get_contents($file_path);return $this->client->bankcard($image);}}public function request_post($url = '', $param = '') {if (empty($url) || empty($param)) {return false;}
//        var_dump($param);exit;$postUrl = $url;$curlPost = $param;$curl = curl_init();//初始化curlcurl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页curl_setopt($curl, CURLOPT_HEADER, 0);//设置headercurl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上curl_setopt($curl, CURLOPT_POST, 1);//post提交方式curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);$data = curl_exec($curl);//运行curlcurl_close($curl);return $data;}}

3、\new\app\common\Image.php’

<?phpnamespace app\common;/*** API控制器基类*/
class Image
{public static function compressImg($src,$percent = 1,$ratio = 100,$path=''){// 获取图片的宽高,类型,宽高字符串“height="yyy" width="xxx"”// $type 1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP......$src = '.'.ltrim($src,'.');// 直接返回路径if (!getimagesize($src)){return ltrim($src,'.');}list($width, $height, $type, $attr) = getimagesize($src);//image_type_to_extension取得图像类型的文件后缀,是否在后缀名前加一个点。默认是 TRUE。$imageInfo = ['width'=>$width,'height'=>$height,'type'=>image_type_to_extension($type,false),'attr'=>$attr];// imagecreatefrom系列函数用于从文件或 URL 载入一幅图像。$fun   = "imagecreatefrom".$imageInfo['type'];$image = @$fun($src);if (!$image){return ltrim($src,'.');}// 新图的宽高,缩放比例$newWidth = $imageInfo['width'] * $percent;$newHeight = $imageInfo['height'] * $percent;// 建立的是一幅大小为 x和 y的黑色图像(默认为黑色),如想改变背景颜色则需要用填充颜色函数imagefill($img,0,0,$color);$imageThump = imagecreatetruecolor($newWidth,$newHeight);// 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。imagecopyresampled($imageThump,$image,0,0,0,0,$newWidth,$newHeight,$width,$height);// 压缩后的图片的命名,以及回存路径if (!empty($path)){$filePath = $path;}else{$filePath = substr($src,0,strrpos($src,'/'));}$filePath = $filePath.'/'.rand(1111, 9999).substr(strrchr($src,'/'),1);// IOS 图片旋转问题// 1:0°,6:顺时针90°, 8:逆时针90°,3:180°// 生成图片imagejpeg($imageThump,$filePath,$ratio);// 销毁imagedestroy($imageThump);imagedestroy($image);return ltrim($filePath,'.');}
}

3、\new\app\api\controller\web\web\Index.php’

<?php
namespace app\api\controller\web\web;use app\api\controller\Base;
use app\common\Ai;
use think\facade\Session;
/*** 首页接口*/
class Index extends Base
{public function _initialize(){parent::_initialize();}//身份证识别public function idcard(){$ai = new Ai();$front = $this->request->param('front','');//身份证正面64位数编码$back = $this->request->param('back','');//身份证反面64位数编码if(!empty($front)) {$frontUrl =  $this->uploadsBase($front,'card');//转64为图片。返回图片路径$url = app()->getRootPath() . '/public' .$frontUrl ;$state = 'front';//传参百度接口使用:正面}elseif (!empty($back)){$backUrl =  $this->uploadsBase($back,'card');$url = app()->getRootPath() . '/public' .$backUrl ;$state = 'back';//传参百度接口使用:反面}else{return $this->renderError('请上传图片');}$result = $ai->getIdCard($url,$state);if ($result['image_status'] == 'normal') {unset($result['log_id']);unset($result['words_result_num']);unset($result['idcard_number_type']);unset($result['image_status']);// 保存登录状态if(!empty($frontUrl)) {//身份证正面头像//获取识别成功后的头像(通用好像没有这个)$image = "data:image/jpg;base64," . $result['photo'];$path = '.'.preg_replace('/(.*)\/{1}([^\/]*)/i', '$1', $frontUrl);$imageName = date("Ymd") . date("His", time()) . "_" . rand(1111, 9999) . '.png';if (strstr($image, ",")) {$image = explode(',', $image);$image = $image[1];}if (!is_dir($path)) { //判断目录是否存在 不存在就创建mkdir($path, 0777, true);}$imageSrc = $path . "/" . $imageName; //图片名字$r = file_put_contents($imageSrc, base64_decode($image));//返回的是字节数if (!$r) {$tmparr1 = array('data' => null, "code" => 1, "msg" => "图片生成失败");echo json_encode($tmparr1);} else {$tmparr2 = array('data' => 1, "code" => 0, "msg" => "图片生成成功");echo json_encode($tmparr2);}}return $this->renderSuccess('身份证识别成功',$result );} else {return $this->renderError('身份证识别失败', $result);}}//银行卡识别public function idBank(){$ai = new Ai();$url = $this->request->param('url','');//银行卡正面64位数编码if(!empty($url)) {$urlData =  $this->uploadsBase($url,'bank');$url = app()->getRootPath() . '/public' .$urlData ;}else{return $this->renderError('请上传图片');}$result = $ai->getBankCard($url)['result'];if ($result['bank_card_type'] != 0) {return $this->renderSuccess('银行卡识别成功',$result );} else {return $this->renderError('银行卡识别失败', $result);}}
}

4、\new\app\api\controller\Base.php’

<?phpnamespace app\api\controller;use app\api\BaseController;
use app\common\Image;
use think\facade\Session;/*** 首页接口*/
class Base extends BaseController
{public function _initialize(){parent::_initialize();}/*** 图片上传bate64解码* @param $data* @param $param //预存文件路径名称*/public function uploadsBase($data,$param){$image = "data:image/png;base64," . $data;
//        $cardId = $this->cardId();
//        $path = './uploads/'.$cardId['corp'].'/'.$param.'/'.date("Ymd");$path = './uploads/'.'1'.'/'.$param.'/'.date("Ymd");$imageName = date("Ymd") . date("His", time()) . "_" . rand(1111, 9999) . '.jpg';if (strstr($image, ",")) {$image = explode(',', $image);$image = $image[1];}if (!is_dir($path)) { //判断目录是否存在 不存在就创建mkdir($path, 0777, true);}$imageSrc = $path . "/" . $imageName; //图片名字$r = file_put_contents($imageSrc, base64_decode($image));//返回的是字节数if (!$r) {return false;} else {$img = new Image();$res = $img->compressImg($imageSrc,1,100,$path);//压缩后的新图片unlink($imageSrc);//删除初始64图片return $res;}}

tp6 + 百度身份证识别ocr相关推荐

  1. python 身份证识别仪_Card-Ocr:身份证识别 OCR

    Card-Ocr 身份证识别OCR, 从身份证图片中自动提取身份证号. 测试图片来自百度搜索的样例图片. 找到的图片比较少,目前都能正确识别. 可用的数据集个人很难找到. 依赖 opencv pyte ...

  2. android ocr识别源码_身份证识别OCR解决手动输入繁琐问题

    随着互联网金融的的发展,越来越多的互联网金融公司都推出了自己的金融APP,这些APP都涉及到个人身份证信息的输入认证,如果手动去输入身份证号码和姓名,速度非常慢,且用户体验非常差. 为了提高在手机移动 ...

  3. 身份证识别OCR 应用技术及应用行业

    银行卡开户.证券开户.火车票机票购买.旅馆入住登记--这时输入身份证信息就成了一件烦人事.如今更多的人倾向于在手机上办理各种业务,各大商家也主推这种营业方式来减轻营业厅压力,节约人力资源.但在在银行. ...

  4. 调用阿里云身份证识别OCR

    这个是需要收费的第三方身份证识别OCR的接口 这个是官方给出的案例和文档 https://market.aliyun.com/products/57124001/cmapi028587.htmlspm ...

  5. 华为云-身份证识别-OCR

    使用华为云的AI身份证识别-OCR服务功能需要对应的服务器 华为云的OCR身份证识别需要开通服务区域与调用服务的区域保持一致,目前貌似只有四个服务区才有身份证识别服务,如果购买的服务器不是这四个区的貌 ...

  6. Android 集成百度文字识别OCR身份证银行卡驾驶证识别

    SDK提供了下列百度AI开放平台RESTful接口的封装.文字识别的服务,可实现一些通用文字,网络图片文字,身份证,银行卡,驾驶证,行驶证,车牌,营业执照,通用票据等的识别需求,简化输入操作. 本篇主 ...

  7. JAVA-调用百度文字识别OCR进行身份证识别

    1.第三方接口         文字识别OCR,需要进行注册和实名认证后,获取对应的应用列表以及免费测试额度 2.调用例子  <!-- 百度识别 --> <dependency> ...

  8. Android 集成百度身份证识别

    最近因为项目需要实现身份证识别与读取,对百度的文字识别进行了集成.很多地方都是参照官方文档来写,能力强的老哥可以去官方文档自行查阅. 第一步:创建项目,下载SDK https://cloud.baid ...

  9. java百度身份证识别

    在项目里因客户要求在注册时要求上传身份证照片来识别身份证上信息来录入信息资料,于是采用了百度OCR文字识别,废话不多说,进入正题 1.登录百度云(没有就先注册) 在全部产品 - 人工智能 - 文字识别 ...

最新文章

  1. ADO.NET 2.0 Dataset和Datatable 新功能新特性
  2. Node.js可能是最适合写简易小爬虫的语言,速度极快、代码极少
  3. 金融风控--申请评分卡模型--特征工程(特征分箱,WOE编码) 标签: 金融特征分箱-WOE编码 2017-07-16 21:26 4086人阅读 评论(2) 收藏 举报 分类: 金融风
  4. 树形结构:从二分查找,二叉搜索树寻找最近祖先,从递归到迭代,实现技巧总结
  5. 简单的基准测试:不可变集合VS持久集合
  6. 想成长为一名实战型架构师?7大实战技能经验分享
  7. Java 向文件中追加数据
  8. 超级终端工具_【招商通信余俊团队】智能网联汽车发展提速,科技巨头跑步入场,有望成为新一代超级终端——招商通信周周谈(2020年第48周)...
  9. springcloud使用zipkin和rabbitmq进行服务链路追踪
  10. 试驾Marvel R :传统车企认真起来,就没新势力什么事了
  11. linux查看所有目录
  12. axure导入的元件库不见了_Axure教程丨制作自己的Axure元件库
  13. 中文语音软件再次升级,即将发布百度语音助手
  14. python之if-else_Python中的if-else
  15. c++ notes (very basic)
  16. vue项目无法在IE浏览器中显示
  17. C盘容量不足,怎么增加c盘空间?看这5个方法
  18. 月嫂类地域性网站SEO挣钱案例
  19. 风险投资(VC)私募股权投资(PE)30问答
  20. scDeepCluster:Clustering single-cell RNA-seq data with a model-based deep learning approach论文解读

热门文章

  1. Java中多态弊端以及解决方案
  2. WRF-Chem笔记——模式运行流程
  3. 大数据技术原理与应用作业十
  4. 上海大学计算机学院同等学力申硕,上海大学同等学力申硕通过率高不高?
  5. 1990-2020年上市公司申请专利的被引用数量、信息和基础信息
  6. 从对待游戏音乐的态度看国内外差距
  7. Latex公式编号的基本方法:
  8. javaee和mysql在国内外技术_JavaEE的13种核心技术
  9. HandBrakeMac视频转码软件,小巧高效
  10. 安卓ROM包改为ZIP格式刷机包