Warum Azure OCR?

Weil Tesseract manchmal zu viel rÀt.
Und weil Du PDF, JPG oder PNGs sauber analysieren willst – mit Zeilen, Spalten und PrĂ€zision.
Azure Computer Vision bietet Dir genau das – als API.

Access ĂŒbernimmt das Steuern.
Die Cloud liest. Du speicherst.

Ich zeig Dir den Ablauf: Datei senden, Text abholen, Ergebnis weiterverarbeiten.

Was Du brauchst

  • Azure-Konto
  • Ressource „Computer Vision“
  • API-Key und Endpoint
  • Tabelle fĂŒr Dokumente + Texte
  • Etwas Geduld bei asynchronen Calls

Tabellenstruktur (Beispiel)

TabelleZweck
tblDokumentePfade, Status, OCR-Text
tblOCRFehlerFehler und Logs

Azure vorbereiten

  • Gehe zu https://portal.azure.com
  • „Computer Vision“ Ressource anlegen
  • Key und Endpoint notieren
  • Pricing-Tier: „Free“ reicht zum Testen

Beispiel-Endpoint:

https://westeurope.api.cognitive.microsoft.com/

Schritt 1: Bild als Bytearray laden

Function LadeDateiAlsBytes(pfad As String) As Byte()
    Dim bytes() As Byte
    Open pfad For Binary As #1
    ReDim bytes(LOF(1) - 1)
    Get #1, , bytes
    Close #1
    LadeDateiAlsBytes = bytes
End Function

Schritt 2: OCR-Analyse starten (async)

Function StarteAzureOCR(pfad As String) As String
    Dim http As Object
    Dim apiKey As String
    Dim endpoint As String
    Dim imgData() As Byte

    apiKey = "DEIN_API_KEY"
    endpoint = "https://westeurope.api.cognitive.microsoft.com/vision/v3.2/read/analyze"

    imgData = LadeDateiAlsBytes(pfad)

    Set http = CreateObject("MSXML2.ServerXMLHTTP")
    http.Open "POST", endpoint, False
    http.setRequestHeader "Content-Type", "application/octet-stream"
    http.setRequestHeader "Ocp-Apim-Subscription-Key", apiKey
    http.Send imgData

    ' Azure liefert nur den Status-Link in Response-Header
    If http.Status = 202 Then
        StarteAzureOCR = http.getResponseHeader("Operation-Location")
    Else
        Call LogFehler(pfad, http.responseText)
        StarteAzureOCR = ""
    End If
End Function

Schritt 3: OCR-Ergebnis abfragen

OCR braucht 1–5 Sekunden – wir rufen es zyklisch ab.

Function HoleOCRResult(operationUrl As String, apiKey As String) As String
    Dim http As Object
    Dim status As String
    Dim response As String

    Set http = CreateObject("MSXML2.ServerXMLHTTP")

    Do
        http.Open "GET", operationUrl, False
        http.setRequestHeader "Ocp-Apim-Subscription-Key", apiKey
        http.Send

        response = http.responseText
        status = Mid(response, InStr(response, """status"":""") + 10, 10)

        DoEvents
        If status Like "*succeeded*" Then Exit Do
        If status Like "*failed*" Then Exit Do

        Application.Wait Now + TimeValue("00:00:02")
    Loop

    HoleOCRResult = response
End Function

Schritt 4: Text extrahieren und speichern

Function ExtrahiereOCRText(json As String) As String
    Dim sc As Object
    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"
    sc.AddCode "function parse(j){ var l = JSON.parse(j).analyzeResult.readResults; var t = ''; for(var i=0;i<l.length;i++){ for(var j=0;j<l[i].lines.length;j++){ t += l[i].lines[j].text + '\n'; } } return t; }"
    ExtrahiereOCRText = sc.Run("parse", json)
End Function

Ablauf in Access

Sub StarteOCRImport(pfad As String)
    Dim opURL As String
    Dim json As String
    Dim ergebnis As String
    Dim apiKey As String

    apiKey = "DEIN_API_KEY"
    opURL = StarteAzureOCR(pfad)

    If opURL <> "" Then
        json = HoleOCRResult(opURL, apiKey)
        ergebnis = ExtrahiereOCRText(json)

        Call SpeichereOCR(pfad, ergebnis)
    End If
End Sub

Ergebnis speichern

Sub SpeichereOCR(pfad As String, text As String)
    CurrentDb.Execute "INSERT INTO tblDokumente (Dateipfad, OCRText, Zeitstempel) VALUES ('" & _
                      Replace(pfad, "'", "''") & "', '" & Replace(text, "'", "''") & "', Now())"
End Sub

Fehlerlog

Sub LogFehler(pfad As String, meldung As String)
    CurrentDb.Execute "INSERT INTO tblOCRFehler (Dateipfad, Fehlertext, Zeitstempel) VALUES ('" & _
                      Replace(pfad, "'", "''") & "', '" & Replace(meldung, "'", "''") & "', Now())"
End Sub

Formulareingriff

Private Sub btnOCR_Click()
    Call StarteOCRImport(Me.txtPfad)
    MsgBox "OCR gestartet. Text ist gleich verfĂŒgbar."
End Sub

Was Du damit machen kannst

AnwendungNutzen
Rechnungstexte extrahierenWeiterverarbeitung mit GPT
Lieferscheine einlesenAutomatische PositionsvorschlÀge
PrĂŒfberichte digitalisierenArchiv und Volltextsuche

Was Du beachten musst

  • PDF geht nur, wenn es als Bild vorliegt – kein „echter“ Text
  • Achtung bei Handschrift → keine Wunder erwarten
  • Der API-Call ist asynchron – Geduld einbauen
  • Du kannst bis zu 20 Calls/Minute im Free-Tier senden

„Access kann nicht lesen – aber er weiß, wen er fragen muss.“

Wenn Du Azure OCR einbauen willst – ich helf Dir beim Aufsetzen.
Schnell. Ohne Gefrickel. Direkt aus dem Formular.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert