Heim >Backend-Entwicklung >C#.Net-Tutorial >Ausführliche Erläuterung des Grafik- und Textcodes zur Realisierung der ID-Kartenerkennungsfunktion in C#

Ausführliche Erläuterung des Grafik- und Textcodes zur Realisierung der ID-Kartenerkennungsfunktion in C#

黄舟
黄舟Original
2017-07-17 11:02:353231Durchsuche

In diesem Artikel werden hauptsächlich detaillierte Erläuterungen zu C#-ID-Kartenerkennungstechnologien vorgestellt, die einen gewissen Referenzwert haben.

Neueste Forschung zur C#-bezogenen OCR-Technologie, Bilderkennung ist im Allgemeinen C Low-Level-Sprachen wie C++ und C# basieren hauptsächlich auf einigen gekapselten Komponenten, um Aufrufe durchzuführen. Hier ist eine Methode zur ID-Kartenerkennung.

Umgebungseinrichtung

Download-Adresse: Offizielle EmguCV-Website

Laden Sie diese EXE-Datei in der Kategorie „Datei“ herunter und fahren Sie fort Installieren Nach der Installation finden Sie im Verzeichnis die entsprechenden Komponenten sowie einige Anwendungsfälle.

Die DLL im DLL-Ordner verweist auf das C#-Projekt x64, x86 und Tessdaten entsprechen der von OCR erkannten Klassenbibliothek zu tessdata. Die drei Ordner werden im Programmausführungsordner abgelegt.

Demo

Die kleine Demo, die ich erstellt habe, ist wie folgt: Ausweis Bild wurde von Baidu heruntergeladen

Ich muss sagen, dass der einzige Nachteil dieser Bibliothek darin besteht, dass die Texterkennungsrate zu niedrig ist und der Bilderkennungseffekt nicht sehr gut ist

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)
  {

  }
 }
}

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Grafik- und Textcodes zur Realisierung der ID-Kartenerkennungsfunktion in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn