Cómo utilizar la visión por ordenador para encontrar texto
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.
- Cómo hacer OCR de matrículas en C# (Tutorial)
- Cómo obtener texto de una factura en C# Tutorial
- Cómo obtener texto de una captura de pantalla con OCR en C#
Cómo hacer OCR de subtítulos en C# (Tutorial)
Pasos para utilizar el OCR con visión por ordenador
- Descargar biblioteca C# para utilizar OCR con visión por ordenador
- Utilice
BuscarRegiónDeTexto
método para autodetectar regiones de texto - Compruebe qué región de texto se detecta con
StampCropRectangleAndSaveAs
método - Utilizar la visión por ordenador para separar la imagen original en imágenes basadas en regiones de texto con
BuscarRegionesDeTextoMúltiples
método - Utilice
GetTextRegions
método to get crop areas list where text was detected
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 NuGet de IronOcr.ComputerVision
a 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:
Método | Explicación |
---|---|
BuscarRegiónDeTexto | Detectar regiones que contengan elementos de texto y ordenar a Tesseract que sólo busque texto dentro del área en la que se haya detectado texto. |
BuscarRegionesDeTextoMúltiples | Detecta las áreas que contienen elementos de texto y divide la página en imágenes separadas en función de las regiones de texto. |
GetTextRegions | Escanea la imagen y devuelve una lista de regiones de texto como `List |
BuscarRegiónDeTexto
El uso de FindTextRegion
utilizará la visión artificial para detectar las regiones que contienen elementos de texto en cada página de un objeto OcrInput.
:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findtextregion-1.cs
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");
input.FindTextRegion();
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()
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
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
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](/static-assets/ocr/how-to/computer-vision/iron-2022.webp)
: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)
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 (Visión por ordenador) pensaba que era el texto:
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 la visión por ordenador para detectar las áreas que contienen elementos de texto y dividir la entrada en imágenes separadas basadas en 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
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
Otro método de sobrecarga de FindMultipleTextRegions
toma una Página OCR y devuelve una lista de Páginas OCR, una por 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()
GetTextRegions
El uso de GetTextRegions
devuelve una lista de áreas de recorte en las que se ha detectado 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();
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.