Cet article présente principalement l'explication détaillée des technologies liées à la reconnaissance de carte d'identité C#, qui a une certaine valeur de référence. Les amis intéressés peuvent se référer à
Recherches récentes sur la technologie OCR liée à C#, la reconnaissance d'image est généralement C Par rapport à. langages de bas niveau tels que C++, C# s'appuie principalement sur certains composants encapsulés pour effectuer des appels. Voici une méthode de reconnaissance de carte d'identité.
Configuration de l'environnement
Adresse de téléchargement : site officiel d'EmguCV
Téléchargez cet EXE dans la catégorie Fichier et continuez Installer . Après l'installation, vous pourrez retrouver les composants correspondants dans le répertoire, ainsi que quelques cas d'application.
La dll dans le dossier dll est référencée au projet C# x64, x86 et tessdata correspondent à la bibliothèque de classes et à la bibliothèque de langues reconnues par OCR. vers tessdata. Les trois dossiers sont placés dans le dossier d'exécution du programme.
Démo
La petite démo que j'ai faite est la suivante : la carte d'identité l'image a été téléchargée depuis Baidu
Je dois dire que le seul inconvénient de cette bibliothèque est que le taux de reconnaissance de texte est trop faible et que l'effet de reconnaissance d'image n'est pas très bon
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) { } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!