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=" imageInput祝辞& 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#身份证识别相关技术功能详解