예제 #1
0
        /// <summary>
        /// Get segmented regions at specified page iterator level.
        /// </summary>
        /// <param name="pageIteratorLevel">PageIteratorLevel enum</param>
        /// <returns></returns>
        public List <Rectangle> GetSegmentedRegions(PageIteratorLevel pageIteratorLevel)
        {
            var boxArray = Interop.TessApi.Native.BaseAPIGetComponentImages(Engine.Handle, pageIteratorLevel, Interop.Constants.TRUE, IntPtr.Zero, IntPtr.Zero);
            int boxCount = Interop.LeptonicaApi.Native.boxaGetCount(new HandleRef(this, boxArray));

            List <Rectangle> boxList = new List <Rectangle>();

            for (int i = 0; i < boxCount; i++)
            {
                var box = Interop.LeptonicaApi.Native.boxaGetBox(new HandleRef(this, boxArray), i, PixArrayAccessType.Clone);
                if (box == IntPtr.Zero)
                {
                    continue;
                }

                int px, py, pw, ph;
                Interop.LeptonicaApi.Native.boxGetGeometry(new HandleRef(this, box), out px, out py, out pw, out ph);
                boxList.Add(new Rectangle(px, py, pw, ph));
                Interop.LeptonicaApi.Native.boxDestroy(ref box);
            }

            Interop.LeptonicaApi.Native.boxaDestroy(ref boxArray);

            return(boxList);
        }
        private static IEnumerable <RecognizedTextChunk> recognizeWords(PdfPage page, TesseractEngine engine,
                                                                        int resolution, string tempFileName)
        {
            // Save PDF page as high-resolution image
            PdfDrawOptions options = PdfDrawOptions.Create();

            options.BackgroundColor      = new PdfRgbColor(255, 255, 255);
            options.HorizontalResolution = resolution;
            options.VerticalResolution   = resolution;
            page.Save(tempFileName, options);

            using (var img = Pix.LoadFromFile(tempFileName))
            {
                using (var recognizedPage = engine.Process(img))
                {
                    using (ResultIterator iter = recognizedPage.GetIterator())
                    {
                        const PageIteratorLevel Level = PageIteratorLevel.Word;
                        iter.Begin();
                        do
                        {
                            if (iter.TryGetBoundingBox(Level, out Rect bounds))
                            {
                                string text       = iter.GetText(Level);
                                float  confidence = iter.GetConfidence(Level);

                                yield return(new RecognizedTextChunk(text, bounds, confidence));
                            }
                        } while (iter.Next(Level));
                    }
                }
            }
        }
예제 #3
0
 public static extern int TessPageIteratorBoundingBox(
     PageIterator handle,
     PageIteratorLevel level,
     out int left,
     out int top,
     out int right,
     out int bottom);
예제 #4
0
 public int PageIteratorIsAtFinalElement(IntPtr handle,
                                         PageIteratorLevel level,
                                         PageIteratorLevel element
                                         )
 {
     return(UnsafeTesseractPrimitives.PageIteratorIsAtFinalElement(handle, (int)level, (int)element));
 }
예제 #5
0
        public IEnumerable <TextEntry> Extract(string imagePath)
        {
            List <TextEntry> texts = new List <TextEntry>();

            PageIteratorLevel mode = PageIteratorLevel.Word;

            TesseractEngine engine    = new TesseractEngine(System.IO.Directory.GetCurrentDirectory(), "eng", EngineMode.Default);
            var             pixImage  = Pix.LoadFromFile(imagePath);
            var             page      = engine.Process(pixImage);
            Point           imageSize = new Point(pixImage.Width, pixImage.Height);

            var iterator = page.GetIterator();

            iterator.Begin();

            while (iterator.Next(mode))
            {
                if (iterator.TryGetBoundingBox(mode, out Tesseract.Rect bounds))
                {
                    texts.Add(new TextEntry()
                    {
                        Position = new Point(bounds.X1 / (double)pixImage.Width, bounds.Y1 / (double)pixImage.Height),
                        Text     = iterator.GetText(mode)
                    });
                }
            }

            iterator.Dispose();

            return(texts);
        }
예제 #6
0
 /// <summary>
 /// Moves to the start of the next element at the given level.
 /// </summary>
 /// <remarks>
 /// 
 /// </remarks>
 /// <param name="level"></param>
 /// <returns></returns>
 public bool Next(PageIteratorLevel level)
 {
     VerifyNotDisposed();
     if (handle.Handle == IntPtr.Zero)
         return false;
     return Interop.TessApi.Native.PageIteratorNext(handle, level) != 0;
 }
예제 #7
0
        public IEnumerable <Result> Results(PageIteratorLevel level)
        {
            var pageIterationLevel = GetPageIteratorLevel(level);

            return(_api.RecognizedBlocksByIteratorLevel(pageIterationLevel)
                   .Select(ConvertToResult));
        }
예제 #8
0
 /// <summary>
 /// Gets segmented regions at specified page iterator level.
 /// </summary>
 /// <param name="image"></param>
 /// <param name="level"></param>
 /// <returns></returns>
 public override List <Rectangle> GetSegmentedRegions(Bitmap image, PageIteratorLevel level)
 {
     using (var engine = new TesseractEngine(Datapath, Language, EngineMode.Default))
     {
         List <Rectangle> boxes = engine.GetSegmentedRegions(image, level);
         return(boxes);
     }
 }
예제 #9
0
        public float GetConfidence(PageIteratorLevel level)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero)
                return 0f;

            return Interop.TessApi.Native.ResultIteratorGetConfidence(handle, level);
        }
예제 #10
0
 public void GetTextReturnNullForEachLevel(PageIteratorLevel level)
 {
     using (var page = Engine.Process(EmptyPix)) {
         using (var iter = page.GetIterator()) {
             Assert.That(iter.GetText(level), Is.Null);
         }
     }
 }
예제 #11
0
 /// <summary>
 /// Moves to the start of the next element at the given level.
 /// </summary>
 /// <remarks>
 ///
 /// </remarks>
 /// <param name="level"></param>
 /// <returns></returns>
 public bool Next(PageIteratorLevel level)
 {
     VerifyNotDisposed();
     if (handle.Handle == IntPtr.Zero)
     {
         return(false);
     }
     return(TessApi.Native.PageIteratorNext(handle, level) != 0);
 }
예제 #12
0
 /// <summary>
 /// Moves the iterator to the next <paramref name="element"/> iff the iterator is not currently pointing to the last <paramref name="element"/> in the specified <paramref name="level"/> (i.e. the last word in the paragraph).
 /// </summary>
 /// <param name="level">The iterator level.</param>
 /// <param name="element">The page level.</param>
 /// <returns><c>True</c> iff there is another <paramref name="element"/> to advance too and the current element is not the last element at the given level; otherwise returns <c>False</c>.</returns>
 public bool Next(PageIteratorLevel level, PageIteratorLevel element)
 {
     var isAtFinalElement = IsAtFinalOf(level, element);
     if (!isAtFinalElement) {
         return Next(element);
     } else {
         return false;
     }
 }
예제 #13
0
 public IntPtr PageIteratorGetImage(IntPtr handle,
                                    PageIteratorLevel level,
                                    int padding,
                                    out int left,
                                    out int top
                                    )
 {
     return(UnsafeTesseractPrimitives.PageIteratorGetImage(handle, (int)level, padding, out left, out top));
 }
예제 #14
0
        public Pix GetBinaryImage(PageIteratorLevel level)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero) {
                return null;
            }

            return Pix.Create(Interop.TessApi.Native.PageIteratorGetBinaryImage(handle, level));
        }
예제 #15
0
        public string GetText(PageIteratorLevel level)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero) {
                return String.Empty;
            }

            return Interop.TessApi.ResultIteratorGetUTF8Text(handle, level);
        }
예제 #16
0
        // Grab text from image
        private string GetText(TessBaseAPI tessBaseAPI, int partX, int partY)
        {
            // These can change depending on resolution, HUD scaling, or UI changes
            // For now, only supports 1440p with full HUD scaling
            // TODO: Dynamic scaling
            const int BOXWIDTH  = 311;
            const int BOXHEIGHT = 33;

            // Set image location start
            tessBaseAPI.SetRectangle(partX, partY, BOXWIDTH, BOXHEIGHT);

            // Recognize image
            tessBaseAPI.Recognize();

            ResultIterator resultIterator = tessBaseAPI.GetIterator();

            // Extract text from result iterator
            StringBuilder     stringBuilder     = new StringBuilder();
            PageIteratorLevel pageIteratorLevel = PageIteratorLevel.RIL_PARA;

            do
            {
                stringBuilder.Append(resultIterator.GetUTF8Text(pageIteratorLevel));
            } while (resultIterator.Next(pageIteratorLevel));

            // Fix up string for Warframe.market
            stringBuilder = stringBuilder.Replace("\n", String.Empty);
            string guess = stringBuilder.ToString();

            // Changed to use Levenshtein here due to important of having a matching "Blueprint" word
            Levenshtein levBP         = new Fastenshtein.Levenshtein("Blueprint");
            int         levBPDistance = levBP.DistanceFrom(guess);

            Debug.WriteLine("Distance from Blueprint: " + levBPDistance);

            // If there is a 4-character difference, accept the word is == "Blueprint"
            // Adjust the offset for 2-lined parts
            if (levBPDistance < 5)
            {
                guess = GetText(tessBaseAPI, partX, 550);
            }

            // Match whatever result we get to the closest selling item name from Warframe.market
            // We want to ignore "Blueprint" because this indicates that it's a 2-lined item
            if (guess != "Blueprint" && !guess.Contains("Forma"))
            {
                Debug.Write("");
                Debug.Write("Old: " + guess);

                guess = FindClosestWord(guess);

                Debug.WriteLine(" | New: " + guess);
            }

            return(guess);
        }
예제 #17
0
        /// <summary>
        /// Moves the iterator to the next <paramref name="element"/> iff the iterator is not currently pointing to the last <paramref name="element"/> in the specified <paramref name="level"/> (i.e. the last word in the paragraph).
        /// </summary>
        /// <param name="level">The iterator level.</param>
        /// <param name="element">The page level.</param>
        /// <returns><c>True</c> iff there is another <paramref name="element"/> to advance too and the current element is not the last element at the given level; otherwise returns <c>False</c>.</returns>
        public bool Next(PageIteratorLevel level, PageIteratorLevel element)
        {
            var isAtFinalElement = this.IsAtFinalOf(level, element);

            if (!isAtFinalElement)
            {
                return(this.Next(element));
            }
            return(false);
        }
예제 #18
0
        /// <summary>
        /// Returns <c>True</c> if the iterator is at the first element at the given level.
        /// </summary>
        /// <remarks>
        /// A possible use is to determin if a call to next(word) moved to the start of a new paragraph.
        /// </remarks>
        /// <param name="level"></param>
        /// <returns></returns>
        public bool IsAtBeginningOf(PageIteratorLevel level)
        {
            VerifyNotDisposed();

            if (handle.Handle == IntPtr.Zero)
            {
                return(false);
            }
            return(TessApiSignatures.PageIteratorIsAtBeginningOf(handle, level));
        }
예제 #19
0
 public int PageIteratorBoundingBox(IntPtr handle,
                                    PageIteratorLevel level,
                                    out int left,
                                    out int top,
                                    out int right,
                                    out int bottom
                                    )
 {
     return(UnsafeTesseractPrimitives.PageIteratorBoundingBox(handle, (int)level, out left, out top, out right, out bottom));
 }
예제 #20
0
 public int PageIteratorBaseline(IntPtr handle,
                                 PageIteratorLevel level,
                                 out int x1,
                                 out int y1,
                                 out int x2,
                                 out int y2
                                 )
 {
     return(UnsafeTesseractPrimitives.PageIteratorBaseline(handle, (int)level, out x1, out y1, out x2, out y2));
 }
예제 #21
0
        public float GetConfidence(PageIteratorLevel level)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero)
            {
                return(0f);
            }

            return(Interop.TessApi.Native.ResultIteratorGetConfidence(handle, level));
        }
예제 #22
0
        public string GetText(PageIteratorLevel level)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero)
            {
                return(String.Empty);
            }

            return(Interop.TessApi.ResultIteratorGetUTF8Text(handle, level));
        }
예제 #23
0
        public Pix GetBinaryImage(PageIteratorLevel level)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero)
            {
                return(null);
            }

            return(Pix.Create(TessApi.Native.PageIteratorGetBinaryImage(handle, level)));
        }
예제 #24
0
        /// <summary>
        /// Returns <c>True</c> if the iterator is at the first element at the given level.
        /// </summary>
        /// <remarks>
        /// A possible use is to determin if a call to next(word) moved to the start of a new paragraph.
        /// </remarks>
        /// <param name="level"></param>
        /// <returns></returns>
        public bool IsAtBeginningOf(PageIteratorLevel level)
        {
            VerifyNotDisposed();

            if (handle.Handle == IntPtr.Zero)
            {
                return(false);
            }
            return(Interop.TessApi.Native.PageIteratorIsAtBeginningOf(handle, level) != 0);
        }
예제 #25
0
        /// <summary>
        /// Returns <c>True</c> if the iterator is positioned at the last element at the given level.
        /// </summary>
        /// <param name="level"></param>
        /// <param name="element"></param>
        /// <returns></returns>
        public bool IsAtFinalOf(PageIteratorLevel level, PageIteratorLevel element)
        {
            VerifyNotDisposed();

            if (handle.Handle == IntPtr.Zero)
            {
                return(false);
            }
            return(TessApi.Native.PageIteratorIsAtFinalElement(handle, level, element) != 0);
        }
예제 #26
0
        public Pix GetImage(PageIteratorLevel level, int padding, Pix originalImage, out int left, out int top)
        {
            var pointer = Native.DllImports.TessPageIteratorGetImage(handleRef, level, padding, (HandleRef)originalImage, out left, out top);

            if (IntPtr.Zero != pointer)
            {
                return(new Pix(pointer));
            }

            return(null);
        }
예제 #27
0
        public Pix GetBinaryImage(PageIteratorLevel level)
        {
            var pointer = Native.DllImports.TessPageIteratorGetBinaryImage(handleRef, level);

            if (IntPtr.Zero != pointer)
            {
                return(new Pix(pointer));
            }

            return(null);
        }
예제 #28
0
        public static string ResultIteratorGetUTF8Text(HandleRef handle, PageIteratorLevel level)
        {
            var txtHandle = Native.ResultIteratorGetUTF8TextInternal(handle, level);

            if (txtHandle != IntPtr.Zero)
            {
                var result = MarshalHelper.PtrToString(txtHandle, Encoding.UTF8);
                Native.DeleteText(txtHandle);
                return(result);
            }
            return(null);
        }
예제 #29
0
        /// <summary>
        /// Gets the bounding rectangle of the current element at the given level.
        /// </summary>
        /// <param name="level"></param>
        /// <param name="bounds"></param>
        /// <returns></returns>
        public bool TryGetBoundingBox(PageIteratorLevel level, out Rect bounds)
        {
            int x1, y1, x2, y2;

            if (TessApi.Native.PageIteratorBoundingBox(this.handle, level, out x1, out y1, out x2, out y2) != 0)
            {
                bounds = Rect.FromCoords(x1, y1, x2, y2);
                return(true);
            }
            bounds = Rect.Empty;
            return(false);
        }
예제 #30
0
        public Pix GetImage(PageIteratorLevel level, int padding, out int x, out int y)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero) {
                x = 0;
                y = 0;

                return null;
            }

            return Pix.Create(Interop.TessApi.Native.PageIteratorGetImage(handle, level, padding, out x, out y));
        }
예제 #31
0
        /// <summary>
        ///     Moves the iterator to the next <paramref name="element" /> iff the iterator is not currently pointing to the last
        ///     <paramref name="element" /> in the specified <paramref name="level" /> (i.e. the last word in the paragraph).
        /// </summary>
        /// <param name="level">The iterator level.</param>
        /// <param name="element">The page level.</param>
        /// <returns>
        ///     <c>True</c> iff there is another <paramref name="element" /> to advance too and the current element is not the
        ///     last element at the given level; otherwise returns <c>False</c>.
        /// </returns>
        public bool Next(PageIteratorLevel level, PageIteratorLevel element)
        {
            VerifyNotDisposed();

            var isAtFinalElement = IsAtFinalOf(level, element);

            if (!isAtFinalElement)
            {
                return(Next(element));
            }
            return(false);
        }
예제 #32
0
        public Pix GetImage(PageIteratorLevel level, int padding, out int x, out int y)
        {
            VerifyNotDisposed();
            if (handle.Handle == IntPtr.Zero)
            {
                x = 0;
                y = 0;

                return(null);
            }

            return(Pix.Create(TessApi.Native.PageIteratorGetImage(handle, level, padding, page.Image.Handle, out x, out y)));
        }
예제 #33
0
      /// <summary>
      /// Returns the baseline of the current object at the given level. The baseline is the line that passes through (x1, y1) and (x2, y2). WARNING: with vertical text, baselines may be vertical! Returns null if there is no baseline at the current position.
      /// </summary>
      /// <param name="level">Page iterator level</param>
      /// <returns>The baseline of the current object at the given level</returns>
      public LineSegment2D? GetBaseLine(PageIteratorLevel level)
      {
         int x1 = 0;
         int y1 = 0;
         int x2 = 0;
         int y2 = 0;

         bool found = OcrInvoke.TessPageIteratorGetBaseLine(_ptr, level, ref x1, ref y1, ref x2, ref y2);
         if (!found)
            return null;
         else
            return new LineSegment2D(new Point(x1, y1), new Point(x2, y2) );
      }
예제 #34
0
        private List <string> run_tessract()
        {
            List <string>        re        = new List <string>();
            string               dataPath  = "./tessdata/";
            string               language  = 1 != 1 ? "eng" : "jpn";
            string               inputFile = "./_tmp.bmp";
            OcrEngineMode        oem       = OcrEngineMode.DEFAULT;
            PageSegmentationMode psm       = PageSegmentationMode.AUTO_OSD;

            TessBaseAPI tessBaseAPI = new TessBaseAPI();

            // Initialize tesseract-ocr
            if (!tessBaseAPI.Init(dataPath, language, oem))
            {
                throw new Exception("Could not initialize tesseract.");
            }

            // Set the Page Segmentation mode
            tessBaseAPI.SetPageSegMode(psm);

            // Set the input image
            Pix pix = tessBaseAPI.SetImage(inputFile);

            tessBaseAPI.SetVariable("number", "1234567890");

            // Recognize image
            tessBaseAPI.Recognize();

            ResultIterator resultIterator = tessBaseAPI.GetIterator();

            // extract text from result iterator
            StringBuilder     stringBuilder     = new StringBuilder();
            PageIteratorLevel pageIteratorLevel = PageIteratorLevel.RIL_PARA;

            do
            {
                string str = resultIterator.GetUTF8Text(pageIteratorLevel);


                if (str != null)
                {
                    str = Regex.Replace(str, @"\n", "\r\n");
                    re.Add(str);
                }
            } while (resultIterator.Next(pageIteratorLevel));

            tessBaseAPI.Dispose();
            pix.Dispose();
            return(re);
        }
        public List <Rectangle> GetSubtitleBoundingBoxes(IMagickImage mImage, Rectangle subtitleRegion,
                                                         PageIteratorLevel pageIteratorLevel, string cropRegionPath = "")
        {
            //Preprocess
            var imageBytes = PreprocessImage(mImage, subtitleRegion, _preprocessScale, cropRegionPath);

            List <Rectangle> boundingBoxes = new List <Rectangle>();

            try
            {
                _tessEngine.SetVariable("user_defined_dpi", 300);
                _tessEngine.DefaultPageSegMode = PageSegMode.Auto;

                using var img  = Pix.LoadFromMemory(imageBytes);
                using var page = _tessEngine.Process(img);

                //The Iterator way - Same results...
                using var iter = page.GetIterator();
                iter.Begin();

                do
                {
                    if (!iter.TryGetBoundingBox(pageIteratorLevel, out var boundingBoxRect))
                    {
                        continue;
                    }

                    var boundingBox = new Rectangle(
                        (int)(boundingBoxRect.X1 / _preprocessScale) + subtitleRegion.X,
                        (int)(boundingBoxRect.Y1 / _preprocessScale) + subtitleRegion.Y,
                        (int)(boundingBoxRect.Width / _preprocessScale),
                        (int)(boundingBoxRect.Height / _preprocessScale));

                    boundingBoxes.Add(boundingBox);

                    Console.WriteLine($"Text:{iter.GetText(pageIteratorLevel).Trim()} - Bounding Box:{boundingBox}");
                } while (iter.Next(pageIteratorLevel));

                return(boundingBoxes);
            }
            catch (Exception error)
            {
                Console.WriteLine("Tesseract Error: " + error.Message);
            }

            Console.WriteLine(boundingBoxes.Count);

            return(boundingBoxes);
        }
예제 #36
0
        public string GetUTF8Text(PageIteratorLevel level)
        {
            IntPtr pointer = Native.DllImports.TessResultIteratorGetUTF8Text(handleRef, level);

            if (IntPtr.Zero != pointer)
            {
                string returnObject = Marshaling.PtrToStringUTF8(pointer);
                Native.DllImports.TessDeleteText(pointer);
                return(returnObject);
            }
            else
            {
                return(null);
            }
        }
예제 #37
0
파일: BaseApi.cs 프로젝트: cormal/tesseract
        public static string ResultIteratorGetUTF8Text(IntPtr handle, PageIteratorLevel level)
        {
            IntPtr txtHandle = ResultIteratorGetUTF8TextInternal(handle, level);

            if (txtHandle != IntPtr.Zero)
            {
                var result = MarshalHelper.PtrToString(txtHandle, Encoding.UTF8);
                TessApi.DeleteText(txtHandle);
                return(result);
            }
            else
            {
                return(null);
            }
        }
예제 #38
0
 public string GetText(PageIteratorLevel level)
 {
     return Interop.TessApi.ResultIteratorGetUTF8Text(handle, level);
 }
예제 #39
0
 public float GetConfidence(PageIteratorLevel level)
 {
     return Interop.TessApi.Native.ResultIteratorGetConfidence(handle, level);
 }
예제 #40
0
 public static extern int PageIteratorNext(HandleRef handle, PageIteratorLevel level);
예제 #41
0
 public static extern int PageIteratorIsAtBeginningOf(IntPtr handle, PageIteratorLevel level);
예제 #42
0
 /// <summary>
 /// Moves to the start of the next element at the given level.
 /// </summary>
 /// <remarks>
 /// 
 /// </remarks>
 /// <param name="level"></param>
 /// <returns></returns>
 public bool Next(PageIteratorLevel level)
 {
     return Interop.TessApi.PageIteratorNext(handle, level) != 0;
 }
예제 #43
0
 internal static extern bool TessPageIteratorGetBaseLine(
    IntPtr iterator,
    PageIteratorLevel level,
    ref int x1, ref int y1, ref int x2, ref int y2);
예제 #44
0
 public static extern int PageIteratorNext(IntPtr handle, PageIteratorLevel level);
예제 #45
0
 /// <summary>
 /// Gets the bounding rectangle of the current element at the given level. 
 /// </summary>
 /// <param name="level"></param>
 /// <param name="bounds"></param>
 /// <returns></returns>
 public bool TryGetBoundingBox(PageIteratorLevel level, out Rect bounds)
 {
     int x1, y1, x2, y2;
     if (Interop.TessApi.PageIteratorBoundingBox(handle, level, out x1, out y1, out x2, out y2) != 0) {
         bounds = Rect.FromCoords(x1, y1, x2, y2);
         return true;
     } else {
         bounds = Rect.Empty;
         return false;
     }
 }
예제 #46
0
 public static extern IntPtr PageIteratorGetBinaryImage(IntPtr handle, PageIteratorLevel level);
예제 #47
0
 public static extern int PageIteratorBaseline(IntPtr handle, PageIteratorLevel level, out int x1, out int y1, out int x2, out int y2);
예제 #48
0
 public Pix GetImage(PageIteratorLevel level, int padding, out int x, out int y)
 {
     return Pix.Create(Interop.TessApi.PageIteratorGetImage(handle, level, padding, out x, out y));
 }
예제 #49
0
 /// <summary>
 /// Returns <c>True</c> if the iterator is at the first element at the given level.
 /// </summary>
 /// <remarks>
 /// A possible use is to determin if a call to next(word) moved to the start of a new paragraph.
 /// </remarks>
 /// <param name="level"></param>
 /// <returns></returns>
 public bool IsAtBeginningOf(PageIteratorLevel level)
 {
     return Interop.TessApi.PageIteratorIsAtBeginningOf(handle, level) != 0;
 }
예제 #50
0
 /// <summary>
 /// Returns <c>True</c> if the iterator is possitioned at the last element at the given level.
 /// </summary>
 /// <param name="level"></param>
 /// <param name="element"></param>
 /// <returns></returns>
 public bool IsAtFinalOf(PageIteratorLevel level, PageIteratorLevel element)
 {
     return Interop.TessApi.PageIteratorIsAtFinalElement(handle, level, element) != 0;
 }
예제 #51
0
 public static extern int PageIteratorBoundingBox(IntPtr handle, PageIteratorLevel level, out int left, out int top, out int right, out int bottom);
예제 #52
0
 public Pix GetBinaryImage(PageIteratorLevel level)
 {
     return Pix.Create(Interop.TessApi.PageIteratorGetBinaryImage(handle, level));
 }
예제 #53
0
 public static extern IntPtr PageIteratorGetImage(IntPtr handle, PageIteratorLevel level, int padding, out int left, out int top);
예제 #54
0
 public static string ResultIteratorGetUTF8Text(IntPtr handle, PageIteratorLevel level)
 {
     IntPtr txtHandle = ResultIteratorGetUTF8TextInternal(handle, level);
     if (txtHandle != IntPtr.Zero) {
         var result = MarshalHelper.PtrToString(txtHandle, Encoding.UTF8);
         TessApi.DeleteText(txtHandle);
         return result;
     } else {
         return null;
     }
 }
예제 #55
0
 public static extern int PageIteratorIsAtFinalElement(IntPtr handle, PageIteratorLevel level, PageIteratorLevel element);
예제 #56
0
        /// <summary>
        /// Returns <c>True</c> if the iterator is positioned at the last element at the given level.
        /// </summary>
        /// <param name="level"></param>
        /// <param name="element"></param>
        /// <returns></returns>
        public bool IsAtFinalOf(PageIteratorLevel level, PageIteratorLevel element)
        {
            VerifyNotDisposed();

            if (handle.Handle == IntPtr.Zero)
                return false;
            return Interop.TessApi.Native.PageIteratorIsAtFinalElement(handle, level, element) != 0;
        }
예제 #57
0
 public static extern float ResultIteratorGetConfidence(IntPtr handle, PageIteratorLevel level);
예제 #58
0
 /// <summary>
 /// Gets the bounding rectangle of the current element at the given level. 
 /// </summary>
 /// <param name="level"></param>
 /// <param name="bounds"></param>
 /// <returns></returns>
 public bool TryGetBoundingBox(PageIteratorLevel level, out Rect bounds)
 {
     VerifyNotDisposed();
     int x1, y1, x2, y2;
     if (handle.Handle != IntPtr.Zero && Interop.TessApi.Native.PageIteratorBoundingBox(handle, level, out x1, out y1, out x2, out y2) != 0)
     {
         bounds = Rect.FromCoords(x1, y1, x2, y2);
         return true;
     } else {
         bounds = Rect.Empty;
         return false;
     }
 }
예제 #59
0
 private static extern IntPtr ResultIteratorGetUTF8TextInternal(IntPtr handle, PageIteratorLevel level);
 private G8PageIteratorLevel GetPageIteratorLevel (PageIteratorLevel level)
 {
     switch (level) {
     case PageIteratorLevel.Block:
         return G8PageIteratorLevel.Block;
     case PageIteratorLevel.Paragraph:
         return G8PageIteratorLevel.Paragraph;
     case PageIteratorLevel.Symbol:
         return G8PageIteratorLevel.Symbol;
     case PageIteratorLevel.Textline:
         return G8PageIteratorLevel.Textline;
     case PageIteratorLevel.Word:
         return G8PageIteratorLevel.Word;
     default:
         return G8PageIteratorLevel.Word;
     }
 }