C\#기술 을 바탕 으로 신분증 식별 기능 실현

최근 에 C\#와 관련 된 ORC 기술 을 연구 한 결과 이미지 인식 은 일반 C 와 C++와 같은 바 텀 언어 를 많이 만 들 었 다.C\#는 주로 포 장 된 구성 요 소 를 바탕 으로 호출 되 었 는데 여기 서 세 가지 신분증 식별 방법 을 소개 한다.
1.대기업 API 인터페이스,바 이 두,클 라 우 드 맥 을 호출 하고 문 통 과학기술 은 모두 관련 API 소 개 를 합 니 다.
2.이미지 처리 라 이브 러 리 를 호출 합 니 다.EmguCV 는 OpenCV 의 크로스 플랫폼 입 니 다.Net 패키지 입 니 다.이 패 키 지 는 모 노 플랫폼 으로 컴 파일 되 고 Windows,Mac OS,Android,iPhone,iPad 등 여러 플랫폼 에서 실 행 될 수 있 습 니 다.
3.Office 2007 구성 요소 호출
1.증명 식별 API 인터페이스
취 합 된 데이터 중의 API 인 터 페 이 스 를 예 로 들 면 공식 API 가 C\#호출 방식 을 제공 하지 않 았 기 때문에 인터넷 주 소 는 다음 과 같다.증명 식별 인터페이스

/// <summary>
///     
/// </summary>
/// <returns></returns>
public static string CardUpload()
{
try
{
string appkey = "       key"; //      appkey 
HttpPostedFile file = HttpContext.Current.Request.Files[0];
string url = "http://api2.juheapi.com/cardrecon/upload";
var parameters = new Dictionary<string, string>();
parameters.Add("key", appkey);
parameters.Add("cardType", "2");
string result = HttpPostData(url, 60000, "pic", file.InputStream, parameters);
JObject info = JObject.Parse(JObject.Parse(result)["result"].ToString());
var cardInfo = new
{
name = info["  "],
card = info["      "]
};
return cardInfo.ToJson();
}
catch (Exception ex)
{
return ex.ToString();
}
}
/// <summary>
/// Post  API
/// </summary>
/// <param name="url">api  </param>
/// <param name="timeOut">      </param>
/// <param name="fileKeyName">     </param>
/// <param name="file">   </param>
/// <param name="stringDict">    </param>
/// <returns>   </returns>
private static string HttpPostData(string url, int timeOut, string fileKeyName,
Stream file, Dictionary<string, string> stringDict)
{
string responseContent;
var memStream = new MemoryStream();
var webRequest = (HttpWebRequest)WebRequest.Create(url);
//    
var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
//    
var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r
"); // var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r
"); // webRequest.Method = "POST"; webRequest.Timeout = timeOut; webRequest.ContentType = "multipart/form-data; boundary=" + boundary; // memStream.Write(beginBoundary, 0, beginBoundary.Length); // const string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r
" + "Content-Type: application/octet-stream\r
\r
"; var header = string.Format(filePartHeader, fileKeyName, "card.jpg"); var headerbytes = Encoding.UTF8.GetBytes(header); memStream.Write(headerbytes, 0, headerbytes.Length); file.CopyTo(memStream); // Key var stringKeyHeader = "\r
--" + boundary + "\r
Content-Disposition: form-data; name=\"{0}\"" + "\r
\r
{1}\r
"; foreach (byte[] formitembytes in from string key in stringDict.Keys select string.Format(stringKeyHeader, key, stringDict[key]) into formitem select Encoding.UTF8.GetBytes(formitem)) { memStream.Write(formitembytes, 0, formitembytes.Length); } // memStream.Write(endBoundary, 0, endBoundary.Length); webRequest.ContentLength = memStream.Length; // , POST var requestStream = webRequest.GetRequestStream(); memStream.Position = 0; var tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); memStream.Close(); requestStream.Write(tempBuffer, 0, tempBuffer.Length); requestStream.Close(); var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"))) { responseContent = httpStreamReader.ReadToEnd(); } httpWebResponse.Close(); webRequest.Abort(); return responseContent; }
2.EmguCV 라 이브 러 리 호출
환경 구축
다운로드 주소:EmguCV 홈 페이지

File 클래스 에서 이 EXE 를 다운로드 하여 설치 하고 설치 한 후 디 렉 터 리 에서 해당 구성 요 소 를 찾 을 수 있 으 며 응용 사례 도 있 습 니 다.
C\#식별 을 하려 면 이미지 이치 화 처리 와 OCR 호출 관련 DLL 을 해 야 합 니 다.제 가 정리 할 수 있 는 주소 다운로드:360 클 라 우 드 디스크 추출 코드:89f 4
dll 폴 더 의 dll 은 C\#항목 에 인용 되 었 습 니 다.x64,x86,tessdata 는 OCR 인식 에 대응 하 는 라 이브 러 리 와 언어 라 이브 러 리 입 니 다.제 tessdata 에는 중국어 패 키 지 를 추가 하여 이 세 개의 폴 더 를 프로그램 실행 폴 더 에 넣 었 습 니 다.
Demo
자신 이 만 든 작은 데모 그림:신분증 사진 은 바 이 두 에서 다운로드 한 것 이다.

관련 코드 는 다음 과 같 습 니 다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.OCR;
using Emgu.CV.Structure;
using System.IO;
namespace ImageManage
{
public partial class Form1 : Form
{
Image<Gray, Byte> imageThreshold;
public Form1()
{
InitializeComponent();
}
private void btn_convert_Click(object sender, EventArgs e)
{
//               ,           
Tesseract _ocr = new Tesseract("", "chi_sim", OcrEngineMode.TesseractOnly);
_ocr.Recognize(imageThreshold);
String text = _ocr.GetText();
this.textBox1.Text = text;
}
private void pictureBox1_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;
}
}
}
3.Office 2007 구성 요소
이 구성 요 소 는 무료 이 며 식별 도가 비교적 높다.
환경 구축
Office 2007 구성 요소 MODI,Ofiice 2007 을 설치 해 야 하 며 호환성 때문에 패 치 를 설치 해 야 합 니 다.SP1 또는 SP2 가 모두 가능 합 니 다.패 치 다운로드 주 소 는 다음 과 같 습 니 다.
SP1 다운로드 주소 SP2 다운로드 주소
설치 후 제어 판-->마 운 트 해제 또는 업데이트 프로그램-->Office 2007-->변경 사항 선택-->추가 또는 복구 기능 선택-->아래 인터페이스 팝 업 을 선택 하여 해당 구성 요 소 를 실행 합 니 다.

Office 도구-->Microsoft Office Document Imaging 에서 도 구 를 실행 합 니 다.
C\#항목 에서 Com 구성 요 소 를 참조 하면 됩 니 다.

Office 구성 요소 응용 프로그램 이 로 컬 프로그램 이 아니 라 IIS 에 배치 되 어야 한다 면 응용 프로그램의 풀 권한 을 다음 그림 과 같이 설정 해 야 합 니 다.응용 프로그램 풀->고급 설정->표지

Demo

StringBuilder sb = new StringBuilder();
MODI.Document doc = new MODI.Document();
doc.Create(fullFileName);
MODI.Image image;
MODI.Layout layout;
doc.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED, true, true); //       
for (int i = 0; i < doc.Images.Count; i++)
{
image = (MODI.Image)doc.Images[i];
layout = image.Layout;
sb.Append(layout.Text);
}
이상 의 C\#신분증 식별 방법 은 자신의 프로젝트 의 다양한 수요 에 따라 선택 할 수 있다.

좋은 웹페이지 즐겨찾기