C#实现身份证识别功能的图文代码详解

互联网 17-7-17
这篇文章主要介绍了C#身份证识别相关技术详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

环境搭建

下载地址:EmguCV官网

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

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

Demo

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

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

using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Linq;  using System.Text;  using System.Threading.Tasks;  using System.Windows.Forms;  using Emgu.CV;  using Emgu.CV.OCR;  using Emgu.CV.Structure;  using System.IO;    namespace EmguCV  {   public partial class Form1 : Form   {    Image<Gray, Byte> imageThreshold;    public Form1()    {     InitializeComponent();     pictureBox1.Enabled = false;    }      private void Form1_Load(object sender, EventArgs e)    {          }      private void button1_Click(object sender, EventArgs e)    {     //第一个参数是语言包文件夹的地址,不写默认在执行文件夹下     Tesseract _ocr = new Tesseract(@"", "chi_sim", OcrEngineMode.TesseractOnly);     _ocr.SetImage(imageThreshold);     _ocr.Recognize();     String text = _ocr.GetUTF8Text();     this.textBox1.Text = text;    }      private void pictureBox2_Click(object sender, EventArgs e)    {     OpenFileDialog of = new OpenFileDialog();     of.Title = "请选择图片";     if (of.ShowDialog() == DialogResult.OK)     {      string file = of.FileName;      Image img = Image.FromFile(file);      pictureBox1.Image = img;     }     Bitmap bitmap = (Bitmap)this.pictureBox1.Image;     Image<Bgr, Byte> imageSource = new Image<Bgr, byte>(bitmap);     Image<Gray, Byte> imageGrayscale = imageSource.Convert<Gray, Byte>();     imageGrayscale = randon(imageGrayscale);     imageThreshold = imageGrayscale.ThresholdBinary(new Gray(100), new Gray(255));     this.pictureBox2.Image = imageThreshold.ToBitmap();    }    /// <summary>    /// 旋转校正    /// </summary>    /// <param name="imageInput"></param>    /// <returns></returns>    private Image<Gray, Byte> randon(Image<Gray, Byte> imageInput)//图像投影旋转法倾斜校正子函数定义    {     int nwidth = imageInput.Width;     int nheight = imageInput.Height;     int sum;     int SumOfCha;     int SumOfChatemp = 0;     int[] sumhang = new int[nheight];     Image<Gray, Byte> resultImage = imageInput;     Image<Gray, Byte> ImrotaImage;     //20度范围内的调整     for (int ang = -20; ang < 20; ang = ang + 1)     {      ImrotaImage = imageInput.Rotate(ang, new Gray(1));      for (int i = 0; i < nheight; i++)      {       sum = 0;       for (int j = 0; j < nwidth; j++)       {        sum += ImrotaImage.Data[i, j, 0];       }       sumhang[i] = sum;      }      SumOfCha = 0;      for (int k = 0; k < nheight - 1; k++)      {       SumOfCha = SumOfCha + (Math.Abs(sumhang[k] - sumhang[k + 1]));      }      if (SumOfCha > SumOfChatemp)      {       resultImage = ImrotaImage;       SumOfChatemp = SumOfCha;      }     }     return resultImage;    }      private void pictureBox1_Click(object sender, EventArgs e)    {      }   }  }

以上就是C#实现身份证识别功能的图文代码详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 身份证
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Windows服务在C#下如何创建(图)?

相关资讯