es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reconocer texto de una imagen (Emgu) problema

Estoy usando Emgu para extraer un texto de una imagen, pero me estoy enfrentando a un problema en el último paso (Reconocimiento), por favor, ayúdenme chicos ..

HE ESCRITO EL MENSAJE DEL PROBLEMA EN EL CÓDIGO COMO UN COMENTARIO

código:

Imports Emgu.CV
Imports Emgu.Util
Imports Emgu.CV.OCR
Imports Emgu.CV.Structure

Public Class Form1
    Dim OCRz As Tesseract = New Tesseract("tessdata", "eng", OcrEngineMode.Default)
    Dim pic As Bitmap = New Bitmap(270, 100)
    Dim gfx As Graphics = Graphics.FromImage(pic)

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    gfx.CopyFromScreen(New Point(Me.Location.X + PictureBox1.Location.X + 4, Me.Location.Y + PictureBox1.Location.Y + 30), New Point(0, 0), pic.Size)
    PictureBox1.Image = pic
    PictureBox1.Image = Nothing
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim img As New Image(Of Bgr, Byte)(pic)   'probar otra forma de resolver el problema

    OCRz.Recognize(pic)   'no funciona: Demasiados argumentos para 'Public Function Recognize() As Integer.
    OCRz.Recognize(img)   'no funciona: Demasiados argumentos para 'Public Function Recognize() As Integer.
    OCRz.Recognize(New Image(Of Bgr, Byte)(pic))   'no funciona: La resolución de sobrecarga falló debido a que no hay _
    'accesible 'New' que se pueda llamar con estos argumentos.

    ' 'Public Sub New(channels() As Emgu.CV.Image(Of Emgu.CV.Structure.Gray, Byte))' El valor del tipo Bitmap no puede_ 
    'convertirse en un array unidimensional de Emgu.CV.Image(Of Emgu.CV.Structure.Gray, Byte.

    RichTextBox1.Text = OCRz.GetBoxText
End Sub
End Class
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para la Extracción de OCR de Emgu

    En el código proporcionado, hay algunos errores al utilizar el motor OCR Tesseract de Emgu. El error “Demasiados argumentos para ‘Public Function Recognize() As Integer” ocurre porque el método Recognize del motor OCR no toma ningún parámetro. Por lo tanto, hay dos formas de pasar la imagen al motor OCR.

    Solución uno

    La primera manera es utilizar el método Recognize sin ningún parámetro y establecer la imagen en el motor OCR. Puedes eliminar la línea Dim img As New Image(Of Bgr, Byte)(pic) y reemplazar todos los demás métodos Recognize con el siguiente código.

    OCRz.SetImage(pic)
    OCRz.Recognize()
    

    Solución dos

    La segunda solución es convertir la imagen Bitmap en una Emgu.CV.Image. Casi estabas utilizando correctamente la segunda solución. Sin embargo, el problema ocurrió en el parámetro incorrecto en el método Recognize. Puedes reemplazar la siguiente línea

    OCRz.Recognize(New Image(Of Bgr, Byte)(pic))
    

    con el siguiente código

    OCRz.Recognize(New Image(Of Bgr, Byte)(pic), Nothing)
    

    Al pasar Nothing como un parámetro adicional, puedes resolver el error “Resolución de sobrecarga fallida porque no se puede llamar a ningún ‘Nuevo’ accesible con estos argumentos.”

    Espero que esta solución te ayude a extraer texto de una imagen utilizando Emgu OCR sin ningún problema.

Comments are closed.