Je souhaite créer une application qui extrait les caractères d'une image avec Java, J'ai essayé d'utiliser l'API Cloud Vision de GCP.
Type de service d'apprentissage automatique fourni par Google Cloud Platform. Il effectue différents types d'analyse d'image.
Déplaçons-le selon l 'exemple officiel. (Au 8 avril 2019)
Ajoutez la bibliothèque VisionAPI. Puisque Maven sera utilisé cette fois, ajoutez la description suivante à pom.xml.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-vision</artifactId>
<version>1.49.0</version>
</dependency>
Les informations d'identification sont requises lors de l'utilisation de l'API GCP. Créez des identifiants et téléchargez le fichier JSON depuis la console GCP
Il semble que le fichier JSON téléchargé soit placé dans un chemin arbitraire et que le chemin placé soit spécifié par la variable d'environnement.
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
La commande de paramétrage sous Windows dans la documentation officielle est set '', S'il est défini avec
set '', il ne sera valide que dans cette invite de commande.
Il ne peut pas être référencé à partir d'un autre processus, et lorsque cmd est fermé, le contenu défini sera perdu.
Si vous souhaitez conserver le contenu défini de manière permanente Il est nécessaire de le spécifier sur l'écran des propriétés du système Windows ou `` setx ''. Il semble que vous deviez ajouter à bash_profile même lors de la configuration sur mac.
Je ne connaissais pas la spécification de ce paramètre de variable d'environnement, et je l'exécutais avec eclipse, donc j'en étais un peu accro.
Exécutons l'exemple "Détection de texte dans l'image locale" (https://cloud.google.com/vision/docs/detecting-text?hl=JA#vision-text-detection-java).
Il semble que vous devriez jeter le chemin du fichier et la destination de sortie du résultat de l'analyse à `` detectText (String filePath, PrintStream out) ''.
Une fois, essayez d'exécuter le chemin du fichier sur le code.
public class ImgDetect {
public static void main(String[] args) {
try {
//Spécifiez l'image lue
String inputImgPath = "{Chemin absolu}.jpeg ";
//Extraire les résultats de l'analyse sous forme de fichier texte
PrintStream outputResultPath = new PrintStream(new FileOutputStream("{Chemin absolu}/Result.txt"), true);
detectText(inputImgPath, outputResultPath);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
//Cité à partir d'un exemple de code
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());
}
}
}
}
}
Cette fois, je l'ai testé avec l'image suivante.
Voici les résultats de l'analyse.
Text:Magasin Harumi Triton
TEL 03-6221-0309
佲
le reçu# 16701
Boutique#136 terminaux# 1
2019/04/08(Mois) 18:20
Gestionnaire# 230011 1
#330
#330
Montant cible 330 ¥ 26 ¥
#356
1, 056
¥700
M Cafe Latte
Total
Hors taxe 2(8%)
total(1 point)
Garde
Changement
Merci
L'application officielle de Saint Marc Cafe
Téléchargez maintenant à partir du QR ci-dessous
Enregistrez des points et économisez
Obtenez un coupon!
Il peut être détecté presque correctement! Est-ce le point suivant qui vous intéressait?
Après cela, vous pouvez également obtenir les informations de coordonnées de chaque caractère.
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
}
~réduction~
Cette fois je l'ai fait localement, Avec une exécution à distance, il semble que l'image à analyser soit placée dans le stockage cloud et analysée.
À l'avenir, j'aimerais créer une application d'analyse d'image simple à l'aide de l'API Vision.
Recommended Posts