C#實現身份證識別功能的圖文代碼詳解

來源:互聯網
上載者:User
這篇文章主要介紹了C#身份證識別相關技術詳解,具有一定的參考價值,感興趣的小夥伴們可以參考一下

最近研究C#相關的OCR技術,Image Recognition一般C和C++這種底層語言做的比較多,C#主要是依託一些封裝好的組件進行調用,這裡介紹一種身份證識別的方法。

環境搭建

下載地址:EmguCV官網

在File類別下下載這個EXE,進行安裝,安裝後在目錄下能找相應組件,還有些應用的案例。

dll檔案夾中的dll引用到C#項目中,x64,x86,tessdata對應OCR識別的類庫和語言庫,我tessdata中已添加中文語言套件,將這三個檔案夾放入程式執行檔案夾中。

Demo

自己做的小Demo身份證圖片是百度上下載的

不得不說這個類庫唯一弊端就是文字識別率太低,Image Recognition效果也不太好

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)  {  } }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.