C# WebService中调用TesseractOCR

573 阅读2分钟

注意:服务器要安装media feature pack(服务器端安装桌面体验功能),否则会失败

  1. vs中创建一个Web项目,项目的.net版本>=4.0

  2. 使用nuget添加EmguCV,右键项目

    在这里插入图片描述
    在这里插入图片描述

  3. 在web项目的bin目录下创建文件夹tessdata,打开github链接https://github.com/tesseract-ocr/tessdata,下载"eng.traineddata"文件到tessdata目录下。

  4. 将bin文件夹中x86文件夹内容复制到bin目录下

  5. 创建一个WebService用于测试Tesseract能否成功使用

  	  [WebMethod]
      public string OcrEngineDemo()
      {
          // ReSharper disable once TooWideLocalVariableScope
          // ReSharper disable once RedundantAssignment
          string info = "没有图片识别引擎";
          using (Tesseract tesseract = new Tesseract(HttpContext.Current.Server.MapPath("./bin/tessdata"),"eng",OcrEngineMode.Default))
          {
              info = tesseract.ToString();
              return info;
          }
      }

6.在解决方案下选择Web项目,右键该WebService,选择在浏览器中查看,调用测试方法可以知道是否部署成功 7.图片识别使用:在客户端使用时将图片转换为二进制数据,然后调用WebService传入这些二进制数据,在服务器端将数据还原为图片调用TesseractOCR进行识别。

Tips:图片识别代码

 public class TesseractConfig
    {

        public const string tessdata = "./bin/tessdata";
        public const string language = "eng";

        public const OcrEngineMode mode = OcrEngineMode.Default;
    }

public class ImageRecognizer
    {
        /// <summary>
        /// 识别图片
        /// </summary>
        /// <param name="tesseract">ocr</param>
        /// <param name="bitmap">被识别的图片</param>
        /// <returns>识别失败返回"-",成功返回识别内容</returns>
        private string recognizeImg(Tesseract tesseract, Bitmap bitmap)
        {

            using (Image<Bgr, byte> imageSource = new Image<Bgr, byte>(bitmap))
            using (Image<Gray, byte> grayImg = imageSource.Convert<Gray, Byte>())
            using (Image<Gray,byte> binaryImg= grayImg.ThresholdBinary(new Gray(100), new Gray(255)))
            {
                tesseract.SetImage(binaryImg);
                
                int flag = tesseract.Recognize();
                grayImg.Dispose();
                imageSource.Dispose();

                return flag == 0 ? tesseract.GetUTF8Text() : "-";
            }
        }

        /// <summary>
        /// 识别多张图片
        /// </summary>
        /// <param name="bitmaps"></param>
        /// <returns>返回识别结果列表</returns>
        public List<string> recognizeImgs(List<Bitmap> bitmaps)
        {
            List<string> list=new List<string>();

            using (Tesseract tesseract = new Tesseract(HttpContext.Current.Server.MapPath(TesseractConfig.tessdata), TesseractConfig.language, TesseractConfig.mode))
            {
                foreach (Bitmap bitmap in bitmaps)
                {
                    list.Add(recognizeImg(tesseract, bitmap));
                }
            }

            return list;
        }

        /// <summary>
        /// 识别一张图片
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        public string recognizeImg(Bitmap bitmap)
        {
            using (Tesseract tesseract = new Tesseract(HttpContext.Current.Server.MapPath(TesseractConfig.tessdata), TesseractConfig.language, TesseractConfig.mode))
            {
                return recognizeImg(tesseract, bitmap);
            }
        }

        /// <summary>
        /// 将二进制数组转换为图片
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public Bitmap bytesToBitmap(byte[] bytes)
        {
            using (MemoryStream stream = new MemoryStream(bytes))
            {
                IFormatter formatter = new BinaryFormatter();

                return (Bitmap)formatter.Deserialize(stream);
            }
        }
    }

web