欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#身份證識(shí)別相關(guān)技術(shù)功能詳解

 更新時(shí)間:2017年07月15日 11:39:06   作者:Alex_zha  
這篇文章主要介紹了C#身份證識(shí)別相關(guān)技術(shù)詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近研究C#相關(guān)的OCR技術(shù),圖像識(shí)別一般C和C++這種底層語(yǔ)言做的比較多,C#主要是依托一些封裝好的組件進(jìn)行調(diào)用,這里介紹一種身份證識(shí)別的方法。

環(huán)境搭建

下載地址:EmguCV官網(wǎng)

在File類(lèi)別下下載這個(gè)EXE,進(jìn)行安裝,安裝后在目錄下能找相應(yīng)組件,還有些應(yīng)用的案例。

dll文件夾中的dll引用到C#項(xiàng)目中,x64,x86,tessdata對(duì)應(yīng)OCR識(shí)別的類(lèi)庫(kù)和語(yǔ)言庫(kù),我tessdata中已添加中文語(yǔ)言包,將這三個(gè)文件夾放入程序執(zhí)行文件夾中。

Demo

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

不得不說(shuō)這個(gè)類(lèi)庫(kù)唯一弊端就是文字識(shí)別率太低,圖像識(shí)別效果也不太好

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)
  {
   //第一個(gè)參數(shù)是語(yǔ)言包文件夾的地址,不寫(xiě)默認(rèn)在執(zhí)行文件夾下
   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 = "請(qǐng)選擇圖片";
   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>
  /// 旋轉(zhuǎn)校正
  /// </summary>
  /// <param name="imageInput"></param>
  /// <returns></returns>
  private Image<Gray, Byte> randon(Image<Gray, Byte> imageInput)//圖像投影旋轉(zhuǎn)法傾斜校正子函數(shù)定義
  {
   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度范圍內(nèi)的調(diào)整
   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)
  {

  }
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#多線程之線程池ThreadPool用法

    C#多線程之線程池ThreadPool用法

    這篇文章介紹了C#多線程之線程池ThreadPool的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 解決C# X64應(yīng)用程序中讀取WParam溢出的問(wèn)題

    解決C# X64應(yīng)用程序中讀取WParam溢出的問(wèn)題

    C#應(yīng)用程序是AnyCPU的,在一段處理鼠標(biāo)滾輪WM_MOUSEWHEEL的代碼里碰到溢出的問(wèn)題OverflowException
    2013-04-04
  • c#獲取存儲(chǔ)過(guò)程返回值示例分享

    c#獲取存儲(chǔ)過(guò)程返回值示例分享

    這篇文章主要介紹了C#獲取存儲(chǔ)過(guò)程返回值的方法,大家參考使用吧
    2014-01-01
  • WPF自定義MenuItem樣式的實(shí)現(xiàn)方法

    WPF自定義MenuItem樣式的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于WPF自定義MenuItem樣式的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用WPF具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C#備忘錄人生存檔的設(shè)計(jì)模式實(shí)例

    C#備忘錄人生存檔的設(shè)計(jì)模式實(shí)例

    這篇文章主要為大家介紹了C#設(shè)計(jì)模式中備忘錄模式的實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口實(shí)例

    Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口實(shí)例

    這篇文章主要介紹了Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口的方法,以實(shí)例的形式講述了數(shù)據(jù)接口及反射辨別響應(yīng)的實(shí)現(xiàn)方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#基于Extension Method(擴(kuò)展方法)獲得文件大小的方法

    C#基于Extension Method(擴(kuò)展方法)獲得文件大小的方法

    這篇文章主要介紹了C#基于Extension Method(擴(kuò)展方法)獲得文件大小的方法,實(shí)例分析了C#擴(kuò)展方法的定義與文件操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • c#采用toml做配置文件遇到的坑

    c#采用toml做配置文件遇到的坑

    這篇文章主要介紹了c#采用toml做配置文件遇到的坑,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),通過(guò)本文介紹得出c#用toml文件讀取非整數(shù)字請(qǐng)用double,不要用float,decimal倒無(wú)所謂,反正編譯不過(guò),切記不要用float,需要的朋友可以參考下
    2024-04-04
  • C#進(jìn)行文件讀寫(xiě)、創(chuàng)建、復(fù)制、移動(dòng)、刪除的方法

    C#進(jìn)行文件讀寫(xiě)、創(chuàng)建、復(fù)制、移動(dòng)、刪除的方法

    這篇文章主要介紹了C#進(jìn)行文件讀寫(xiě)、創(chuàng)建、復(fù)制、移動(dòng)、刪除的方法,涉及C#針對(duì)文件操作的常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#類(lèi)和結(jié)構(gòu)詳解

    C#類(lèi)和結(jié)構(gòu)詳解

    本文詳細(xì)講解了C#中的類(lèi)和結(jié)構(gòu),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論