Professional Applications Programmers/Consultants برمجة واستشارات تطبيقات الإنترنت
Skip Navigation LinksHome » Code Library » Ocr

Public general use code classes and xml files that we've compiled and used over the years:

Handles OCR operations.

   1:  #if WINDOWS_FORM
   2:  using System;
   3:  using System.Collections.Generic;
   4:  using System.Text;
   5:  using System.Drawing;
   6:  using System.Threading;
   7:   
   8:  namespace Ia.Cl.Model
   9:  {
  10:      /// <summary publish="true">
  11:      /// Handles OCR operations.
  12:      /// </summary>
  13:      /// <value>
  14:      /// See http://code.google.com/p/tesseract-ocr/downloads/list. Include tessnet2.dll and tessdata folder
  15:      /// </value>
  16:      /// <remarks> 
  17:      /// Copyright © 2001-2015 Jasem Y. Al-Shamlan (info@ia.com.kw), Internet Applications - Kuwait. All Rights Reserved.
  18:      ///
  19:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  20:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  21:      ///
  22:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  23:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  24:      /// 
  25:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  26:      /// 
  27:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  28:      /// </remarks> 
  29:      public class Ocr
  30:      {
  31:          StringBuilder sb;
  32:          List<tessnet2.Word> result;
  33:          tessnet2.Tesseract ocr;
  34:          ManualResetEvent m_event;
  35:   
  36:          ////////////////////////////////////////////////////////////////////////////
  37:   
  38:          /// <summary>
  39:          ///
  40:          /// </summary>
  41:          public Ocr()
  42:          {
  43:              ocr = new tessnet2.Tesseract();
  44:              ocr.Init("eng", false);
  45:          }
  46:   
  47:          ////////////////////////////////////////////////////////////////////////////
  48:   
  49:          /// <summary>
  50:          ///
  51:          /// </summary>
  52:          public void Dispose()
  53:          {
  54:              ocr.Dispose();
  55:              sb.Length = 0;
  56:          }
  57:   
  58:          ////////////////////////////////////////////////////////////////////////////
  59:   
  60:          /// <summary>
  61:          ///
  62:          /// </summary>
  63:          public void DumpResult(List<tessnet2.Word> result)
  64:          {
  65:              foreach (tessnet2.Word word in result) Console.WriteLine("{0} : {1}", word.Confidence, word.Text);
  66:          }
  67:   
  68:          ////////////////////////////////////////////////////////////////////////////
  69:   
  70:          /// <summary>
  71:          ///
  72:          /// </summary>
  73:          public string DoOCRNormal(Bitmap image)
  74:          {
  75:              result = ocr.DoOCR(image, Rectangle.Empty);
  76:   
  77:              sb = new StringBuilder(result.Count);
  78:   
  79:              foreach (tessnet2.Word word in result)
  80:              {
  81:                  sb.Append(word.Text + " ");
  82:              }
  83:   
  84:              return sb.ToString();
  85:          }
  86:   
  87:          ////////////////////////////////////////////////////////////////////////////
  88:   
  89:          /// <summary>
  90:          ///
  91:          /// </summary>
  92:          public List<tessnet2.Word> DoOCRNormal_Word(Bitmap image)
  93:          {
  94:              result = ocr.DoOCR(image, Rectangle.Empty);
  95:   
  96:              return result;
  97:          }
  98:   
  99:          ////////////////////////////////////////////////////////////////////////////
 100:   
 101:          /// <summary>
 102:          ///
 103:          /// </summary>
 104:          public void DoOCRMultiThred(Bitmap image, string lang)
 105:          {
 106:              tessnet2.Tesseract ocr = new tessnet2.Tesseract();
 107:              ocr.Init(lang, false);
 108:              // If the OcrDone delegate is not null then this'll be the multithreaded version
 109:              ocr.OcrDone = new tessnet2.Tesseract.OcrDoneHandler(Finished);
 110:              // For event to work, must use the multithreaded version
 111:              ocr.ProgressEvent += new tessnet2.Tesseract.ProgressHandler(ocr_ProgressEvent);
 112:              m_event = new ManualResetEvent(false);
 113:              ocr.DoOCR(image, Rectangle.Empty);
 114:              // Wait here it's finished
 115:              m_event.WaitOne();
 116:          }
 117:   
 118:          ////////////////////////////////////////////////////////////////////////////
 119:   
 120:          /// <summary>
 121:          ///
 122:          /// </summary>
 123:          public void Finished(List<tessnet2.Word> result)
 124:          {
 125:              //DumpResult(result);
 126:              m_event.Set();
 127:          }
 128:   
 129:          ////////////////////////////////////////////////////////////////////////////
 130:   
 131:          /// <summary>
 132:          ///
 133:          /// </summary>
 134:          void ocr_ProgressEvent(int percent)
 135:          {
 136:              //Console.WriteLine("{0}% progression", percent);
 137:          }
 138:   
 139:          ////////////////////////////////////////////////////////////////////////////
 140:          ////////////////////////////////////////////////////////////////////////////
 141:      }
 142:  }
 143:  #endif