Bilder analysieren per VBA: Wie Access und Google Vision API zusammenarbeiten

Warum Google Vision?

Weil Du wissen willst, was auf dem Bild ist.
Ohne KI-Modelle selbst zu trainieren.
Google liefert Dir Labels, Texte, Gesichter, Logos – alles per API.
Und Access kann das anstoßen. Mit VBA.

Ich zeig Dir, wie Du ein Bild aus Access an Google schickst
und die Analyseergebnisse zurĂŒckbekommst.

Voraussetzungen

  • Google Cloud-Konto
  • Vision API aktivieren
  • API Key generieren
  • Bild als Base64 (lokale Datei oder URL)

Tabelle vorbereiten

TabelleZweck
tblBilderBildpfade, Status
tblErkennungLabels, Scores, Positionen

Schritt 1: Bild einlesen und kodieren

Function BildAlsBase64(pfad As String) As String
    Dim bytes() As Byte
    Dim xmlObj As Object

    Open pfad For Binary As #1
    ReDim bytes(LOF(1) - 1)
    Get #1, , bytes
    Close #1

    Set xmlObj = CreateObject("MSXML2.DOMDocument").createElement("b64")
    xmlObj.DataType = "bin.base64"
    xmlObj.nodeTypedValue = bytes
    BildAlsBase64 = Replace(xmlObj.Text, vbLf, "")
End Function

Schritt 2: Anfrage an Google Vision API senden

Function SendeBildanalyse(pfad As String) As String
    Dim base64 As String
    Dim json As String
    Dim http As Object
    Dim apiKey As String
    Dim endpoint As String

    base64 = BildAlsBase64(pfad)
    apiKey = "DEIN_API_KEY"
    endpoint = "https://vision.googleapis.com/v1/images:annotate?key=" & apiKey

    json = "{" & _
        """requests"": [{" & _
        """image"": {""content"": """ & base64 & """}," & _
        """features"": [{" & _
        """type"": ""LABEL_DETECTION""," & _
        """maxResults"": 5" & _
        "}]" & _
        "}]}"

    Set http = CreateObject("MSXML2.ServerXMLHTTP")
    http.Open "POST", endpoint, False
    http.setRequestHeader "Content-Type", "application/json"
    http.send json

    SendeBildanalyse = http.responseText
End Function

JSON-Ergebnis auslesen (Label Detection)

Function ParseLabels(json As String) As String
    Dim sc As Object
    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"

    sc.AddCode "function parse(j){" & _
        "var r='';" & _
        "var res=JSON.parse(j);" & _
        "var labels=res.responses[0].labelAnnotations;" & _
        "for(var i=0;i<labels.length;i++){" & _
        "r += labels[i].description + '|' + labels[i].score + '\n';}" & _
        "return r;}"

    ParseLabels = sc.Run("parse", json)
End Function

Ergebnisse speichern

Sub SpeichereLabels(bildID As Long, json As String)
    Dim daten As String
    Dim zeilen() As String
    Dim teile() As String
    Dim i As Long

    daten = ParseLabels(json)
    zeilen = Split(daten, vbLf)

    For i = 0 To UBound(zeilen)
        If Trim(zeilen(i)) <> "" Then
            teile = Split(zeilen(i), "|")
            If UBound(teile) = 1 Then
                CurrentDb.Execute "INSERT INTO tblErkennung (BildID, Label, Score) VALUES (" & _
                    bildID & ", '" & Replace(teile(0), "'", "''") & "', " & teile(1) & ")"
            End If
        End If
    Next i
End Sub

Beispiel: Analyse per Knopfdruck

Private Sub btnAnalysieren_Click()
    Dim bildID As Long
    Dim pfad As String
    Dim json As String

    bildID = Me.txtID
    pfad = Me.txtBildpfad

    json = SendeBildanalyse(pfad)
    SpeichereLabels bildID, json

    MsgBox "Bildanalyse abgeschlossen."
End Sub

Was Du analysieren kannst

TypBeschreibung
LABEL_DETECTIONObjekte und Konzepte erkennen
TEXT_DETECTIONTexterkennung im Bild (OCR)
LOGO_DETECTIONLogos erkennen
FACE_DETECTIONGesichter erkennen (nur Position)
OBJECT_LOCALIZATIONPositionen von Objekten im Bild

Ersetze im JSON "type"-Wert, je nachdem, was Du brauchst.

Was Du beachten musst

  • Max. GrĂ¶ĂŸe pro Bild: 4 MB
  • Nur Base64 oder öffentliche URLs zulĂ€ssig
  • Ergebnisse sind Wahrscheinlichkeiten – kein Fakt
  • Ergebnisstruktur bei OCR und Objekten komplexer (mehrdimensional)

„Was auf dem Bild ist, sagt Dir Access – wenn Google vorher draufgeschaut hat.“

Wenn Du das brauchst – ich zeig Dir, wie Du’s produktiv bekommst.
Auch mit mehreren Analysearten gleichzeitig.

Keine Antworten

Schreibe einen Kommentar

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