Cómo utilizar la visión por ordenador para encontrar texto

Chaknith Bin
Chaknith Bin
26 de septiembre, 2022
Actualizado 20 de octubre, 2024
Compartir:
This article was translated from English: Does it need improvement?
Translated
View the article in English

Introducción

IronOCR utiliza OpenCV para utilizar la visión por ordenador para detectar las áreas donde existe texto en una imagen. Esto es útil para imágenes que contienen mucho ruido, imágenes con texto en muchos lugares diferentes e imágenes en las que el texto está deformado. El uso de la visión por ordenador en IronOCR determinará dónde existen regiones de texto y luego utilizará Tesseract para intentar leer esas regiones.

Instalación de IronOCR.ComputerVision mediante el paquete NuGet

Los métodos OpenCV que realizan Visión por Computador en IronOCR son visibles en el paquete regular IronOCR NuGet.

El uso de estos métodos requiere la instalación de NuGet de IronOcr.ComputerVision en la solución; se le pedirá que lo descargue si no lo tiene instalado.

  • Windows: IronOcr.ComputerVision.Windows
  • Linux: IronOcr.ComputerVision.Linux
  • macOS: IronOcr.ComputerVision.MacOS
  • macOS ARM: IronOcr.ComputerVision.MacOS.ARM

    Instale utilizando el gestor de paquetes NuGet o pegue lo siguiente en la consola del gestor de paquetes:

PM> Install-Package IronOcr.ComputerVision.Windows


Esto proporcionará los ensamblajes necesarios para utilizar IronOCR Computer Vision con nuestro archivo de modelo.

## Funcionalidad y API

Más adelante se incluyen ejemplos de código. A continuación se ofrece una visión general de los métodos disponibles en la actualidad:
<table class="table table__configuration-variables">
    <tr>
        <th scope="col">Method</th>
        <th scope="col">Explanation</th>
    </tr>
    <tr>
        <td><a href="#anchor-findtextregion">FindTextRegion</a></td>
        <td class="word-break--break-word">Detect regions which contain text elements and instruct Tesseract to only search for text within the area in which text was detected.</td>
    </tr>
     <tr>
        <td><a href="#anchor-findmultipletextregions">FindMultipleTextRegions</a></td>
        <td class="word-break--break-word">Detect areas which contain text elements and divide the page into separate images based on text regions.</td>
    </tr>
    <tr>
        <td><a href="#anchor-gettextregions">GetTextRegions</a></td>
        <td class="word-break--break-word">Scans the image and returns a list of text regions as `List<CropRectangle>`.</td>
    </tr>
</table>

## BuscarRegiónDeTexto

El uso de `FindTextRegion` utilizará la visión por computadora para detectar regiones que contienen elementos de texto en cada página de un objeto OcrInput.

```cs
:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findtextregion-1.cs

Puede llamarse opcionalmente con parámetros personalizados:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findtextregion-2.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");

input.FindTextRegion(Scale: 2.0, DilationAmount: 20, Binarize: true, Invert: true);
OcrResult result = ocr.Read(input);
string resultText = result.Text;
Imports IronOcr

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("/path/file.png")

input.FindTextRegion(Scale:= 2.0, DilationAmount:= 20, Binarize:= True, Invert:= True)
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
$vbLabelText   $csharpLabel

En este ejemplo, utilizaré la siguiente imagen para un método que estoy escribiendo y que necesita recortar las áreas que contienen texto, pero las imágenes de entrada pueden variar en la ubicación del texto. En este caso puedo utilizar FindTextRegion para limitar el escaneo a un área en la que Computer Vision ha detectado texto. Esta es una imagen de ejemplo:

Imagen con texto
:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findtextregion-3.cs
using IronOcr;
using IronSoftware.Drawing;
using System;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("wh-words-sign.jpg");

// Find the text region using Computer Vision
Rectangle textCropArea = input.GetPages().First().FindTextRegion();

// For debugging and demonstration purposes, lets see what region it found:
input.StampCropRectangleAndSaveAs(textCropArea, Color.Red, "image_text_area", AnyBitmap.ImageFormat.Png);

// Looks good, so let us apply this region to hasten the read:
var ocrResult = ocr.Read("wh-words-sign.jpg", textCropArea);
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System
Imports System.Linq

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("wh-words-sign.jpg")

' Find the text region using Computer Vision
Dim textCropArea As Rectangle = input.GetPages().First().FindTextRegion()

' For debugging and demonstration purposes, lets see what region it found:
input.StampCropRectangleAndSaveAs(textCropArea, Color.Red, "image_text_area", AnyBitmap.ImageFormat.Png)

' Looks good, so let us apply this region to hasten the read:
Dim ocrResult = ocr.Read("wh-words-sign.jpg", textCropArea)
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

Ahora este código tiene dos salidas, la primera es un archivo .png guardado por StampCropRectangleAndSaveAs, que se utiliza para la depuración. Podemos ver dónde IronCV (Computer Vision) pensó que estaba el texto:

Imagen con área de texto resaltada

Se ve muy bien. Ahora la segunda salida es el propio Texto que es:

IRONSOFTWARE

50,000+

Developers in our active community

10,777,061 19,313
NuGet downloads Support tickets resolved
50%+ 80%+
Engineering Team growth Support Team growth
$25,000+

Raised with #TEAMSEAS to clean our beaches & waterways

BuscarRegionesDeTextoMúltiples

El uso de FindMultipleTextRegions toma todas las páginas de un objeto OcrInput y utiliza visión por computadora para detectar áreas que contienen elementos de texto y dividir la entrada en imágenes separadas basadas en las regiones de texto:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findmultipletextregions-1.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");

input.FindMultipleTextRegions();
OcrResult result = ocr.Read(input);
string resultText = result.Text;
Imports IronOcr

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("/path/file.png")

input.FindMultipleTextRegions()
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
$vbLabelText   $csharpLabel

Puede llamarse opcionalmente con parámetros personalizados:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findmultipletextregions-2.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");

input.FindMultipleTextRegions(Scale: 2.0, DilationAmount: -1, Binarize: true, Invert: false);
OcrResult result = ocr.Read(input);
string resultText = result.Text;
Imports IronOcr

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("/path/file.png")

input.FindMultipleTextRegions(Scale:= 2.0, DilationAmount:= -1, Binarize:= True, Invert:= False)
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
$vbLabelText   $csharpLabel

Otro método sobrecargado de FindMultipleTextRegions toma una Página de OCR y devuelve una lista de Páginas de OCR, una para cada región de texto en ella:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findmultipletextregions-3.cs
using IronOcr;
using System.Collections.Generic;
using System.Linq;

int pageIndex = 0;
using var input = new OcrInput();
input.LoadImage("/path/file.png");

var selectedPage = input.GetPages().ElementAt(pageIndex);
List<OcrInputPage> textRegionsOnPage = selectedPage.FindMultipleTextRegions();
Imports IronOcr
Imports System.Collections.Generic
Imports System.Linq

Private pageIndex As Integer = 0
Private input = New OcrInput()
input.LoadImage("/path/file.png")

Dim selectedPage = input.GetPages().ElementAt(pageIndex)
Dim textRegionsOnPage As List(Of OcrInputPage) = selectedPage.FindMultipleTextRegions()
$vbLabelText   $csharpLabel

GetTextRegions

El uso de GetTextRegions devuelve una lista de áreas recortadas donde se detectó texto en una página:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-gettextregions.cs
using IronOcr;
using IronSoftware.Drawing;
using System.Collections.Generic;
using System.Linq;

int pageIndex = 0;
using var input = new OcrInput();
input.LoadImage("/path/file.png");

var selectedPage = input.GetPages().ElementAt(pageIndex);
// List<Rectangle> regions = selectedPage.GetTextRegions();
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.Collections.Generic
Imports System.Linq

Private pageIndex As Integer = 0
Private input = New OcrInput()
input.LoadImage("/path/file.png")

Dim selectedPage = input.GetPages().ElementAt(pageIndex)
' List<Rectangle> regions = selectedPage.GetTextRegions();
$vbLabelText   $csharpLabel

Guías de casos de uso específicos

Con la configuración y los archivos de entrada adecuados, el OCR puede ser una herramienta muy potente. Puede imitar casi a la perfección la capacidad de lectura de un ser humano.

Chaknith Bin
Ingeniero de software
Chaknith trabaja en IronXL e IronBarcode. Tiene una gran experiencia en C# y .NET, ayudando a mejorar el software y a apoyar a los clientes. Sus conocimientos de las interacciones con los usuarios contribuyen a mejorar los productos, la documentación y la experiencia general.