c#实现身份证识别功能的方法

  介绍

这篇文章将为大家详细讲解有关c#实现身份证识别功能的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最近研究c#相关的OCR技术,图像识别一般C和c++这种底层语言做的比较多,c#主要是依托一些封装好的组件进行调用,这里介绍一种身份证识别的方法。

<强>环境搭建

下载地址:EmguCV官网

 C #实现身份证识别功能的方法

在文件类别下下载这个EXE,进行安装,安装后在目录下能找相应组件,还有些应用的案例。

dll文件夹中的dll引用c#到项目中,x64, x86, tessdata对应OCR识别的类库和语言库,我tessdata中已添加中文语言包,将这三个文件夹放入程序执行文件夹中。

<强>演示

自己做的小演示如图:身份证图片是百度上下载的

 C #实现身份证识别功能的方法

不得不说这个类库唯一弊端就是文字识别率太低,图像识别效果也不太好

使用系统;
  使用System.Collections.Generic;
  使用System.ComponentModel;
  使用System.Data;
  使用System.Drawing;
  使用来;
  使用text;
  使用System.Threading.Tasks;
  使用System.Windows.Forms;
  使用Emgu.CV;
  使用Emgu.CV.OCR;
  使用Emgu.CV.Structure;
  使用先;
  
  名称空间EmguCV
  {
  公共部分中类Form1:形式
  {
  Byte> Image<灰色;imageThreshold;
  公共Form1 ()
  {
  InitializeComponent ();
  pictureBox1。启用=false;
  }
  
  私人空间Form1_Load(对象发送方,EventArgs e)
  {
  
  
  
  }
  
  私人空间button1_Click(对象发送方,EventArgs e)
  {//第一个参数是语言包文件夹的地址,不写默认在执行文件夹下
  超正方体_ocr=new Tesseract (@"“,“chi_sim", OcrEngineMode.TesseractOnly);
  _ocr.SetImage (imageThreshold);
  _ocr.Recognize ();
  字符串文字=_ocr.GetUTF8Text ();
  this.textBox1。文本=文本;
  }
  
  私人空间pictureBox2_Click(对象发送方,EventArgs e)
  {
  OpenFileDialog=新OpenFileDialog ();
  的。Title=扒胙≡裢计?
  如果(of.ShowDialog ()==DialogResult.OK)
  {
  字符串文件=of.FileName;
  图像img=Image.FromFile(文件);
  pictureBox1。形象=img;
  }
  位图的位图=(位图)this.pictureBox1.Image;
  ImageimageSource=new Image(位图);
  Byte> Image<灰色;imageGrayscale=imageSource.Convert<灰色,Byte> ();
  imageGrayscale=randon (imageGrayscale);
  imageThreshold=imageGrayscale。ThresholdBinary(新的灰色(100),灰色(255);
  this.pictureBox2。形象=imageThreshold.ToBitmap ();
  }///& lt; summary>///旋转校正///& lt;/summary>///& lt;参数name=癷mageInput"祝辞& lt;/param>///& lt; returns> & lt;/returns>
  私人Image<灰色,Byte>Byte> randon (Image<灰色;imageInput)//图像投影旋转法倾斜校正子函数定义
  {
  int nwidth=imageInput.Width;
  int nheight=imageInput.Height;
  int总和;
  int SumOfCha;
  int SumOfChatemp=0;
  int [] sumhang=new int [nheight];
  Byte> Image<灰色;resultImage=imageInput;
  Byte> Image<灰色;ImrotaImage;//20度范围内的调整
  for (int ang=-20;ang & lt;20;ang=和+ 1)
  {
  ImrotaImage=imageInput。旋转(ang,新的灰色(1));
  for (int i=0;我& lt;nheight;我+ +)
  {
  金额=0;
  for (int j=0;j & lt;nwidth;j + +)
  {
  +=ImrotaImage求和。数据(i, j, 0);
  }
  sumhang[我]=总和;
  }
  SumOfCha=0;
  for (int k=0;k & lt;nheight - 1;k + +)
  {
  SumOfCha=SumOfCha +(数学。Abs (sumhang [k]——sumhang [k + 1]));
  }
  如果(SumOfCha比;SumOfChatemp)
  {
  resultImage=ImrotaImage;
  SumOfChatemp=SumOfCha;
  }
  }
  返回resultImage;
  }
  
  私人空间pictureBox1_Click(对象发送方,EventArgs e)
  {
  
  }
  }
  }

关于c#实现身份证识别功能的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

c#实现身份证识别功能的方法