C# ocr识别(Tesseract库)

时间:2024-10-08 07:08:03

C#版本源码下载地址:/charlesw/tesseract

其实在vs中可以直接用NuGet工具进行下载:

打开nuget,搜索tesseract,点安装即可。

.

源码是vs2015编译的,需要安装vs2015以上版本。

打开项目后如:

我们再添加一个winform项目,画界面如:

实现点击“选择需要识别的图片”,打开一张图片,调用算法并显示结果。比较简单。源码如下:

  1. using System;
  2. using ;
  3. using ;
  4. using ;
  5. using ;
  6. using ;
  7. using ;
  8. using ;
  9. using ;
  10. using Tesseract;
  11. namespace TesseractDemo
  12. {
  13. public partial class Form1 : Form
  14. {
  15. public Form1()
  16. {
  17. InitializeComponent();
  18. }
  19. //选图片并调用ocr识别方法
  20. private void btnRec_Click(object sender, EventArgs e)
  21. {
  22. // = "";
  23. if (() == )
  24. {
  25. var imgPath = ;
  26. =(imgPath);
  27. string strResult = ImageToText(imgPath);
  28. if (string.IsNullOrEmpty(strResult))
  29. {
  30. = "无法识别";
  31. }
  32. else
  33. {
  34. = strResult;
  35. }
  36. }
  37. }
  38. //调用tesseract实现OCR识别
  39. public string ImageToText(string imgPath)
  40. {
  41. using (var engine = new TesseractEngine("tessdata", "eng", ))
  42. {
  43. using (var img = (imgPath))
  44. {
  45. using (var page = (img))
  46. {
  47. return ();
  48. }
  49. }
  50. }
  51. }
  52. }
  53. }
 

 有一点要注意的是,tesseract的识别语言包要自己下载后包含到项目里面,并设置为始终复制,或者直接把这个文件包放到运行程序目录(bin\debug)下:

eng是英文字符的意思,要识别其他语言字符,需要自己下载:

Tesseract has unicode (UTF-8) support, and can recognize more than 100 languages "out of the box".

这个库支持100种语言的识别

字库下载地址为:GitHub - tesseract-ocr/tessdata: Trained models with support for legacy and LSTM OCR engine

OpencvSharp先降噪再调OCR识别:

  1. //用opencv进行降噪处理再ocr识别
  2. private void button3_Click(object sender, EventArgs e)
  3. {
  4. //从网上读取一张图片
  5. string imgUrl = "/user/validate/";
  6. MemoryStream ms = ReadImgFromWeb(imgUrl);
  7. Image img = (ms);
  8. = img;
  9. //降噪
  10. Mat simg = (ms, );
  11. ("Input Image", simg);
  12. //阈值操作 阈值参数可以用一些可视化工具来调试得到
  13. Mat ThresholdImg = (29, 255, );
  14. ("Threshold", ThresholdImg);
  15. ("d:\\", ThresholdImg);
  16. = ImageToText("d:\\");
  17. }
  18. /// <summary>
  19. /// 从网上读取一张图片
  20. /// </summary>
  21. /// <param name="Url"></param>
  22. public MemoryStream ReadImgFromWeb(string Url)
  23. {
  24. HttpWebRequest request = (HttpWebRequest)(Url);
  25. = ; // 添加授权证书
  26. = "Microsoft Internet Explorer";
  27. WebResponse response = ();
  28. Stream s = ();
  29. byte[] data = new byte[1024];
  30. int length = 0;
  31. MemoryStream ms = new MemoryStream();
  32. while ((length = (data, 0, )) > 0)
  33. {
  34. (data, 0, length);
  35. }
  36. (0, );
  37. // = (ms);
  38. return ms;
  39. }
 

请自行用NuGet程序下载opencvsharp3.0库,参考使用C#版OpenCV进行圆心求取 - 小y - 博客园

另外专门有篇文章介绍中文识别:Tesseract-OCR识别中文与训练字库实例