Access

Realización de reconocimiento óptico de caracteres (OCR) con VBA

¿Alguna vez quisiste realizar el reconocimiento de caracteres ópticos (OCR) a través de VBA (Access, Excel, Word, …)?

Bueno, ¡es sorprendentemente fácil de hacer!

Hay una variedad de bibliotecas/aplicaciones que uno puede usar para esto, pero para la discusión de hoy usaré Tesseract OCR (consulte el enlace a continuación):

Una cosa importante a tener en cuenta es que Tesseract está actualmente en la versión 5.5.1, sin embargo, quería usar una versión que no requiriera instalación, una versión portátil, y para eso realmente usé la versión 3.02.

La elección es suya, obviamente, la versión más nueva ofrece algunas opciones y capacidades nuevas. Si tiene permisos de instalación en su PC, entonces usar la última versión es probablemente mejor, pero si está en un entorno más bloqueado, entonces usar la versión 3.02 es el camino a seguir.

Así que descargué Tesseract 3.02 y lo extragué para, en mi caso, una subcarpeta llamada ‘Tesseract-Ocr’.

Luego, creé un formulario muy simple para permitir que el usuario seleccione un archivo a OCR, visitelo y también tome algunas elecciones funcionales de OCR (si se quiere) y un botón para ejecutar el OCR y un cuadro de texto para mostrar el texto OCR resultante.

El código del botón de comando es realmente simple, solo una cuestión de construir la línea de comando Tesseract y usar Shell para ejecutarlo:

Private Sub cmd_RunOCR_Click()
    On Error GoTo Error_Handler
    Dim sImageToOCR           As String
    Dim sOCROutputPath        As String
    Dim sOCROutputFile        As String
    Dim sTesseractEXELocation As String
    Dim sCmd                  As String
    Dim iFileNum              As Integer
    Dim bytes()               As Byte
    Dim lFileLen              As Long
    Dim sOCRText              As String
    Dim lCounter              As Long
    Dim iResponse             As Integer

    If IsNull(Me.txt_ImgToOCR) = False And Dir(Me.txt_ImgToOCR) = "" Then

    End If

    Me.txt_ImageOCR = Null

    sImageToOCR = Me.txt_ImgToOCR
    sOCROutputPath = Application.CurrentProject.Path & "\OCR-Results\Output"
    sOCROutputFile = sOCROutputPath & ".txt"
    sTesseractEXELocation = """" & Application.CurrentProject.Path & "\Tesseract-OCR\tesseract.exe"""

    If Dir(sOCROutputFile) <> "" Then Kill sOCROutputFile

    'sCmd = sTesseractEXELocation & " """ & sImageToOCR & """ """ & sOCROutputPath & """ -l eng"
    'sCmd = sTesseractEXELocation & " """ & sImageToOCR & """ """ & sOCROutputPath & """ -psm " & Me.lst_psm & " -l eng -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    sCmd = sTesseractEXELocation & " """ & sImageToOCR & """ """ & sOCROutputPath & """ -psm " & Me.lst_OCR_psm & " -l " & Me.lst_OCR_Language
    Debug.Print sCmd
    Shell sCmd, vbHide

    Do While Dir(sOCROutputFile) = ""
        lCounter = lCounter + 1
        Debug.Print lCounter 'ProgressBar!!!
        Sleep 200
        DoEvents
        If lCounter > 99 Then
            iResponse = MsgBox("The process may be stalled.  Would you like to Cancel the process?", vbQuestion Or vbYesNo)
            If iResponse = vbYes Then GoTo Error_Handler_Exit
            If iResponse = vbNo Then lCounter = 0    'Reset the counter
        End If
    Loop

    Sleep 200
    DoEvents

    iFileNum = FreeFile
    Open sOCROutputFile For Binary Access Read As #iFileNum
    lFileLen = LOF(iFileNum)

    If lFileLen > 0 Then
        ReDim bytes(0 To lFileLen - 1)
        Get #iFileNum, , bytes
        sOCRText = UTF8ToString(bytes)
        sOCRText = Replace(sOCRText, vbLf, vbCrLf)
    End If

    Close #iFileNum


    Me.txt_ImageOCR = IIf(sOCRText = "", "No OCR Results.", sOCRText)

Error_Handler_Exit:
    On Error Resume Next
    'If Not oOS Is Nothing Then Set oOS = Nothing
    Exit Sub

Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Source: cmd_RunOCR_Click" & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Sub

Descargo de responsabilidad/Notas:

Si no tiene Microsoft Access, simplemente descargue e instale la versión de tiempo de ejecución disponible libremente (esto permite ejecutar bases de datos de MS Access, pero no modificar su diseño):

Tiempo de ejecución de Microsoft Access 2010
Tiempo de ejecución de Microsoft Access 2013
Tiempo de ejecución de Microsoft Access 2016
Microsoft 365 Access Runtime

Todas las muestras de código, descargar muestras, enlaces, … en este sitio se proporcionan ‘Como es‘.

En ningún caso, Devhut.net o Carda Consultants Inc. serán responsables ante el cliente/usuario final o cualquier tercero por ningún daños, incluidas las ganancias perdidas, los ahorros perdidos u otros daños incidentales, consecuentes o especiales que surgen de la operación o incapacidad de operar el software que Carda Consultants Inc. ha proporcionado, incluso si Carda Consultants Inc. ha sido asesorado de la posibilidad de la posibilidad de la posibilidad.

Descargar una base de datos de demostración

Siéntase libre de descargar una copia de demostración 100% desbloqueada utilizando el enlace proporcionado a continuación:

Descargue «Realización de reconocimiento de caracteres ópticos (OCR) con VBA» Tesseract-oCr_v1.000.zip-descargado 2 veces-44.66 kb

Tenga en cuenta que la descarga anterior no incluye una copia de Tesseract. Por lo tanto, debe descargar eso por separado y ajustar el código VBA para reflejar la ruta de tesseract.exe.

Demo Databasae Historial de versiones

VersiónFechaCambios
V1.0002025-06-16Lanzamiento inicial

Historial de la página

FechaResumen de cambios
2025-06-16Lanzamiento inicial

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba