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.
Eine Art maschineller Lerndienst, der von der Google Cloud Platform bereitgestellt wird. Es führt verschiedene Arten der Bildanalyse durch.
Verschieben wir es gemäß dem offiziellen Beispiel. (Stand 08. April 2019)
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>
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.
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