介绍
这篇文章将为大家详细讲解有关c#实现身份证识别功能的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
最近研究c#相关的OCR技术,图像识别一般C和c++这种底层语言做的比较多,c#主要是依托一些封装好的组件进行调用,这里介绍一种身份证识别的方法。
<强>环境搭建强>
下载地址:EmguCV官网
在文件类别下下载这个EXE,进行安装,安装后在目录下能找相应组件,还有些应用的案例。
dll文件夹中的dll引用c#到项目中,x64, x86, tessdata对应OCR识别的类库和语言库,我tessdata中已添加中文语言包,将这三个文件夹放入程序执行文件夹中。
<强>演示强>
自己做的小演示如图:身份证图片是百度上下载的
不得不说这个类库唯一弊端就是文字识别率太低,图像识别效果也不太好
使用系统; 使用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#实现身份证识别功能的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。