Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden

Ich möchte eine Anwendung erstellen, die Zeichen in einem Bild mit Java extrahiert. Ich habe versucht, die Cloud Vision-API von GCP zu verwenden.

Was ist die Google Cloud Vision-API?

Eine Art maschineller Lerndienst, der von der Google Cloud Platform bereitgestellt wird. Es führt verschiedene Arten der Bildanalyse durch.

Beispielcode ausführen

Verschieben wir es gemäß dem offiziellen Beispiel. (Stand 08. April 2019)

Voraussetzungen

Bibliothek hinzugefügt

Fügen Sie die VisionAPI-Bibliothek hinzu. Da diesmal Maven verwendet wird, fügen Sie pom.xml die folgende Beschreibung hinzu.

<dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-vision</artifactId>
   <version>1.49.0</version>
</dependency>

Anmeldeinformationseinstellungen

Bei Verwendung der GCP-API sind Anmeldeinformationen erforderlich. Erstellen Sie Anmeldeinformationen über die GCP-Konsole und laden Sie die JSON-Datei herunter

Es scheint, dass die heruntergeladene JSON-Datei in einem beliebigen Pfad abgelegt wird und der platzierte Pfad durch die Umgebungsvariable angegeben wird.

set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

Der Einstellungsbefehl unter Windows in der offiziellen Dokumentation lautet "set". Wenn mit set gesetzt, ist es nur innerhalb dieser Eingabeaufforderung gültig. Es kann nicht von einem anderen Prozess referenziert werden, und wenn cmd geschlossen wird, geht der festgelegte Inhalt verloren.

Wenn Sie den Inhalt dauerhaft beibehalten möchten Es ist erforderlich, es auf dem Windows-Systemeigenschaftsbildschirm oder "setx" anzugeben. Es scheint, dass Sie bash_profile hinzufügen müssen, auch wenn Sie auf dem Mac einstellen.

Ich kannte die Spezifikation dieser Umgebungsvariableneinstellung nicht und führte sie mit Eclipse aus, also war ich ein wenig süchtig danach.

Beispielcode ausführen

Führen Sie das Beispiel "Erkennen von Text in einem lokalen Bild" aus (https://cloud.google.com/vision/docs/detecting-text?hl=JA#vision-text-detection-java).

Es scheint, dass Sie den Dateipfad und das Ausgabeziel des Analyseergebnisses auf "detectText (String filePath, PrintStream out)" werfen sollten.

Versuchen Sie einmal, den Dateipfad im Code auszuführen.


public class ImgDetect {
    public static void main(String[] args) {
    	try {
    		//Geben Sie das gelesene Bild an
    		String inputImgPath = "{Absoluter Pfad}.jpeg ";

    		//Extrahieren Sie die Analyseergebnisse als Textdatei
    		PrintStream outputResultPath = new PrintStream(new FileOutputStream("{Absoluter Pfad}/Result.txt"), true);

    		detectText(inputImgPath, outputResultPath);
    	}
    	catch (FileNotFoundException e) {
    		e.printStackTrace();
    		}
    	catch (Exception e) {
    		e.printStackTrace();
    		}
    }

    //Zitiert aus Beispielcode
    public static void detectText(String filePath, PrintStream out) throws Exception, IOException {
    	  List<AnnotateImageRequest> requests = new ArrayList<>();

    	  ByteString imgBytes = ByteString.readFrom(new FileInputStream(filePath));

    	  Image img = Image.newBuilder().setContent(imgBytes).build();
    	  Feature feat = Feature.newBuilder().setType(Type.TEXT_DETECTION).build();
    	  AnnotateImageRequest request =
    	      AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
    	  requests.add(request);

    	  try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
    	    BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
    	    List<AnnotateImageResponse> responses = response.getResponsesList();

    	    for (AnnotateImageResponse res : responses) {
    	      if (res.hasError()) {
    	        out.printf("Error: %s\n", res.getError().getMessage());
    	        return;
    	      }

    	      // For full list of available annotations, see http://g.co/cloud/vision/docs
    	      for (EntityAnnotation annotation : res.getTextAnnotationsList()) {
    	        out.printf("Text: %s\n", annotation.getDescription());
    	        out.printf("Position : %s\n", annotation.getBoundingPoly());
    	      }
    	    }
    	  }
    	}
	}

Diesmal habe ich es mit dem folgenden Bild getestet.

Unten sind die Analyseergebnisse.

Text:Harumi Triton Laden
TEL 03-6221-0309
佲
Kassenbon# 16701
Geschäft#136 Terminals# 1
2019/04/08(Mond) 18:20
Handler# 230011 1
#330
#330
Zielbetrag ¥ 330 ¥ 26
#356
1, 056
¥700
M Cafe Latte
Zwischensumme
Ohne Steuern 2(8%)
gesamt(1 Punkt)
Sorgerecht
Veränderung
Vielen Dank
Die offizielle App von Saint Marc Cafe
Laden Sie es jetzt aus dem QR unten herunter
Punkte speichern und speichern
Holen Sie sich einen Gutschein!

Es kann fast richtig erkannt werden! Sind die folgenden Punkte von Belang?

Danach können Sie auch die Koordinateninformationen jedes Zeichens abrufen.

Position : vertices {
  x: 334
  y: 1100
}
vertices {
  x: 2624
  y: 1100
}
vertices {
  x: 2624
  y: 3877
}
vertices {
  x: 334
  y: 3877
}

Text:Harumi
Position : vertices {
  x: 994
  y: 1104
}
vertices {
  x: 1271
  y: 1104
}
vertices {
  x: 1271
  y: 1243
}
vertices {
  x: 994
  y: 1243
}

Text:Triton
Position : vertices {
  x: 1313
  y: 1112
}
vertices {
  x: 1834
  y: 1112
}
vertices {
  x: 1834
  y: 1243
}
vertices {
  x: 1313
  y: 1243
}

~Kürzung~

Diesmal habe ich es vor Ort gemacht, Bei der Remote-Ausführung wird das zu analysierende Bild anscheinend in den Cloud-Speicher gestellt und analysiert.

In Zukunft möchte ich eine einfache Bildanalyseanwendung mit der Vision-API erstellen.

Recommended Posts

Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Versuchen Sie es mit der Stream-API in Java
Versuchen Sie es mit der JSON-Format-API in Java
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
ChatWork4j für die Verwendung der ChatWork-API in Java
[Java] API-Erstellung mit Jerjey (Jax-rs) mit Eclipse
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Zabbix API in Java
Versuchen Sie es mit globalem Hooking in Java mithilfe der JNativeHook-Bibliothek
Versuchen Sie, mit Java zu kratzen [Hinweis]
Versuchen Sie, JavaScript in Java aufzurufen
Lassen Sie uns Spresense mit Java entwickeln (1)
Java Stream API in 5 Minuten
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
Elasticsearch-Vorgang über die REST-API mit Apache HttpClient in Java
Übersetzen mit der Microsoft Translator-Text-API in Java (Japanisch → Englisch)
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java
Versuchen Sie, Android Hilt in Java zu implementieren
Exportieren Sie ein Problem mithilfe der Java-API von JIRA
Verschlüsselung mit RSA-Verschlüsselung in Java
Versuchen Sie, Selenuim 3.141.59 mit Eclipse (Java) auszuführen.
Versuchen Sie es mit Redis mit Java (jar)
Generieren Sie die CloudStack-API-URL in Java
Versuchen Sie einen If-Ausdruck in Java
Treffen Sie Zaims API (OAuth 1.0) in Java
Ich habe versucht, die Java8 Stream API zu verwenden
Analysieren der COTOHA-API-Syntaxanalyse in Java
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
HTTPS-Verbindung mit tls1.2 in Java 6
Ich habe versucht, JWT in Java zu verwenden
Versuchen Sie, AWS X-Ray in Java auszuführen
Versuchen Sie, Yuma in Java zu implementieren
Versuchen Sie es mit der IBM Java-Methodenverfolgung
JPA (Java Persistence API) in Eclipse
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
[Java] Wo haben Sie versucht, Java zu verwenden?
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
Versuchen Sie, Project Euler in Java zu lösen
Datenverarbeitung mit der Stream-API von Java 8
Versuchen Sie, n-ary Addition in Java zu implementieren
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Map ohne Verwendung eines Arrays in Java
Java lernen Versuchen Sie es mit einem Scanner oder einer Karte
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
Versuchen Sie, den CORBA-Dienst unter Java 11+ aufzurufen
Probieren Sie verschiedene Java Stream API-Methoden aus (jetzt)
Lesen Sie Felica mit RC-S380 (PaSoRi) in Java
Lassen Sie uns eine Taschenrechner-App mit Java erstellen
Versuchen Sie es mit der REST-API von JobScheduler - Java RestClient-Implementierung -
Versuchen Sie es mit der Emotion API von Android
Versuchen Sie es mit der Wii-Fernbedienung in Java
Versuchen Sie, mit Scala mithilfe der Standardbibliothek von Java Text zu einem Bild hinzuzufügen
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung der Syntaxanalyse in Java