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
Tabelle | Zweck |
---|---|
tblBilder | Bildpfade, Status |
tblErkennung | Labels, 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
Typ | Beschreibung |
---|---|
LABEL_DETECTION | Objekte und Konzepte erkennen |
TEXT_DETECTION | Texterkennung im Bild (OCR) |
LOGO_DETECTION | Logos erkennen |
FACE_DETECTION | Gesichter erkennen (nur Position) |
OBJECT_LOCALIZATION | Positionen 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