• 一引言
  • 二tesseract-ocr的使用
  • 三tesseract-ocr识别身份证信息
  • 四识别结果

完整项目地址:https://gitee.com/xgpxg/ICRS

一、引言

通过前两篇文章

身份证识别(一):身份证号定位

身份证识别(二):提取目标区域图像

已经得到了各个信息区域的图像。只剩最后一步:识别图像上的文字信息。

本次对于文字的识别,采用了tesseract-ocr识别。

二、tesseract-ocr的使用

之前采用调用tesseract的方式进行识别,但发现效率太低,故采直接采用C#代码进行识别。

     private string GetText(Bitmap img){using (var engine = new TesseractEngine(@"C:\Files\hci\file\Tesseract-OCR\tessdata", "chi_sim", EngineMode.Default)){var image = img;{using (var pix = PixConverter.ToPix(image)){using (var page = engine.Process(pix)){return page.GetText(); }}}}}

该函数返回识别结果的字符串

其中

var engine = new TesseractEngine(@"C:\Files\hci\file\Tesseract-OCR\tessdata", "chi_sim", EngineMode.Default))

TesseractEngine有3个参数分别是tessdata数据路径,要识别的语言,识别模式。
这里采用chi_sim即识别中文,识别模式为默认EngineMode.Default。

三、tesseract-ocr识别身份证信息

为了提高识别速度以及效果,将前两步得到的各个区域的图像进行去噪以及二值化处理。

      public static Image<Gray, byte> BinImg(Image<Bgr, byte> img,int blockSize,int val){return img.Convert<Gray, byte>().SmoothGaussian(5).ThresholdAdaptive(new Gray(255),AdaptiveThresholdType.GaussianC,ThresholdType.Binary,blockSize,new Gray(val));}> 采用高斯

模糊、自动阈值二值化,去除身份证背景条纹,只保留文字信息。

通过测试发现blockSize = 15,val = 0.00111倍的身份证号区域的面积效果较好。

    Bitmap id =  Util.BinImg( Util.Rote(img, idRect),15,(int)(0.00111 *idArea)).Bitmap;Bitmap address = Util.BinImg(Util.Rote(img, addressRect), 15, (int)(0.00111 *idArea)).Bitmap;Bitmap date = Util.BinImg(Util.Rote(img, dateRect), 15, (int)(0.001111 *idArea)).Bitmap;Bitmap sex = Util.BinImg(Util.Rote(img, sexRect), 15, (int)(0.00111 *idArea)).Bitmap;Bitmap name = Util.BinImg(Util.Rote(img, nameRect), 15, (int)(0.00111 *idArea)).Bitmap;最后

调用 private string GetText(Bitmap img)即可识别出图片上的文字信息。

由于生份证号码的识别效果较好,所以对于性别以及出生日期可以结合生份证号的识别结果与图像进行结果处理。

四、识别结果

附一: 身份证号码正确性验证

    private bool CheckIDCard(string idNumber){long n = 0;if (long.TryParse(idNumber.Remove(17), out n) == false|| n < Math.Pow(10, 16) || long.TryParse(idNumber.Replace('x', '0').Replace('X', '0'), out n) == false){return false;//数字验证  }string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";if (address.IndexOf(idNumber.Remove(2)) == -1){return false;//省份验证  }string birth = idNumber.Substring(6, 8).Insert(6, "-").Insert(4, "-");DateTime time = new DateTime();if (DateTime.TryParse(birth, out time) == false){return false;//生日验证  }string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');char[] Ai = idNumber.Remove(17).ToCharArray();int sum = 0;for (int i = 0; i < 17; i++){sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());}int y = -1;Math.DivRem(sum, 11, out y);if (arrVarifyCode[y] != idNumber.Substring(17, 1).ToLower()){return false;//校验码验证  }return true;  }

【C#】身份证识别(三):身份证信息识别相关推荐

  1. 集装箱号识别API免费信息识别免费,中国人工智能企业中集飞瞳全球最大AI集装箱识别检测云服务,智慧港航智能化港航中国人工智能企业

    集装箱号识别API免费信息识别免费,先进人工智能AI科技打造CIMCAI ENGINE™集装箱检测云服务, 中国人工智能企业CIMCAI全球最大AI集装箱识别检测云服务商,全球4千+企业用户使用, 集 ...

  2. 完成全球92万+集装箱箱况残损检验, 完成上亿集装箱信息识别, 中集飞瞳成熟集装箱码头人工智能,全球集装箱人工智能垂直领域领军者

    上海人工智能企业CIMCAI中集飞瞳成熟的集装箱港口人工智能科技,已完成全球上亿次集装箱信息识别,完成全球92万+集装箱人工智能箱况残损检验,生产环境总运行时间超过520万+小时.中集飞瞳先进产品完全 ...

  3. 智慧航运船公司智能集装箱管理方案,手机随时随地AI自动集装箱信息识别+箱况残损+地点报备,智能船公司智能化货代航运智能铁路货运

    CIMCAI智慧航运船公司智能集装箱管理方案,手机随时随地AI自动集装箱信息识别+箱况残损+地点报备,智能船公司智能化货代航运智能铁路货运.全球港口航运人工智能/集装箱人工智能独角兽,中集飞瞳CIMC ...

  4. 小程序全时全域自动化箱况检测+信息识别,中集飞瞳全球领先集装箱管理方案,AI自动化箱信息识别+箱况检测+地点报备,智慧港航智能化

    小程序全时全域自动化箱况检测+信息识别,中集飞瞳全球领先新一代集装箱管理方案,人工智能AI自动化箱信息识别+箱况检测+地点报备,智慧港航智能化.CIMCAI中集飞瞳是全球应用落地最广,规模最大,最先进 ...

  5. 车架号图像识别,车架号拍照识别,车架号扫描识别,车架号OCR识别

        车架号识别         车架号识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车架号识别提取.图像预处理.特征提取.车牌字符识别等技术,识别车辆VIN码(车架号)信息. ...

  6. OpenCV-Python身份证信息识别

    OpenCV-Python身份证信息识别 本篇文章使用OpenCV-Python和CnOcr来实现身份证信息识别的案例.想要识别身份证中的文本信息,总共分为三大步骤:一.通过预处理身份证区域检测查找: ...

  7. python基于百度智能云实现批量身份证信息识别(附完整代码,可直接使用)

    百度智能云配置 一.登录 登录百度智能云,找到卡证文字识别,点击立即使用 地址: https://cloud.baidu.com/product/ocr_cards 二.创建应用 创建一个应用,过程不 ...

  8. SpringBoot、Vue对接百度云API实现身份证信息识别功能(超详细,包含具体代码实现)

    记录一次开发过程中,Springboot.vue.oss文件上传的整合框架,对接百度云卡证识别API实现身份证信息识别功能的详细过程,包含具体代码实现以及详细注释. 文章目录 前提知识 1.JSON ...

  9. 利用Java进行身份证正反面信息识别

    利用Java进行身份证正反面信息识别 1.百度授权信息准备 首先你得在百度AI开放平台上面注册一个账号,或者已经有百度账号了,网址是:https://ai.baidu.com/,如下图所示: 然后点击 ...

最新文章

  1. winrunner事务概念的代码应用(毫秒级)
  2. asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  3. Java按空白部分切分图片
  4. android运动轨迹怎么画,Android 利用三阶贝塞尔曲线绘制运动轨迹的示例
  5. android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...
  6. 中文名称的文件传不到ftp服务器,FTP上传文件时文件的中文名称变为#号,解决方法...
  7. 在 NetBeans IDE 中调试 PHP 源代码
  8. 国内旅游业务全面复苏 携程后疫情时代如何深耕旅游市场?
  9. 腾讯联手华为!将让腾讯游戏越跑越快
  10. 项目管理学习总结(4)——项目团队,如何展开有效沟通?
  11. Unity3d + UGUI 的多分辨率适配
  12. 适合计算机中职生见到打拼音的软件,中职计算机基础教案设计(18页)-原创力文档...
  13. Python入门基础篇 No.26 —— 列表_复制列表_排序_revered逆序_max_min_sum
  14. Unity UI Toolkit学习笔记-EditorWindow
  15. 微信端H5页面调用分享接口
  16. img请求图片错误设置默认图片
  17. 微信小程序(七)注册
  18. 简化开发|Lombok神器带你消除冗余代码
  19. JAVA不直接使用指针吗_Java不直接使用指针。
  20. How to modify comment and attribute ClearCase

热门文章

  1. 立创eda学习笔记十一:立创eda、立创商城、嘉立创的区别
  2. 一种物联网型的电能监控排插
  3. php使用microtime(true)查看代码执行时间
  4. 【邢不行|量化小讲堂系列45-实战篇】关于股票市值:99%投资者不知道的坑,你知道吗?
  5. 全国翻译专业资格(水平) 考试
  6. zemax 学习笔记
  7. Ubunu安装一个更新版本的gda(2.3.2到 3.0.4)
  8. Msbuild的工具集版本
  9. Linux制作系统U盘
  10. 2019中国彩票市场行业分析