Essayez d'utiliser l'API Cloud Vision de GCP en Java

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.

Qu'est-ce que l'API Google Cloud Vision?

Type de service d'apprentissage automatique fourni par Google Cloud Platform. Il effectue différents types d'analyse d'image.

Exécution d'un exemple de code

Déplaçons-le selon l 'exemple officiel. (Au 8 avril 2019)

Conditions préalables

Bibliothèque ajoutée

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>

Paramètres d'identification

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écution d'un exemple de code

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

Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser l'API Stream en Java
Essayez d'utiliser l'API au format JSON en Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
J'ai essayé d'utiliser l'API Elasticsearch en Java
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
ChatWork4j pour l'utilisation de l'API ChatWork en Java
[Java] Création d'API à l'aide de Jerjey (Jax-rs) avec eclipse
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
API Zabbix en Java
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Essayez de gratter en utilisant Java [Note]
Essayez d'appeler JavaScript en Java
Essayez de développer Spresense avec Java (1)
API Java Stream en 5 minutes
Implémentez Thread en Java et essayez d'utiliser la classe anonyme Lambda
Opération Elasticsearch via l'API REST à l'aide d'Apache HttpClient en Java
Traduire à l'aide de l'API de texte Microsoft Translator en Java (japonais → anglais)
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java
Essayez d'implémenter Android Hilt en Java
Exporter un problème à l'aide de l'API Java de JIRA
Chiffrer à l'aide du chiffrement RSA en Java
Essayez d'exécuter Selenuim 3.141.59 avec eclipse (java)
Essayez d'utiliser Redis avec Java (jar)
Générer l'URL de l'API CloudStack en Java
Essayez une expression If en Java
Hit l'API de Zaim (OAuth 1.0) en Java
J'ai essayé d'utiliser l'API Java8 Stream
Analyser l'analyse syntaxique de l'API COTOHA en Java
[Java] Essayez de mettre en œuvre à l'aide de génériques
Connexion HTTPS utilisant tls1.2 dans Java 6
J'ai essayé d'utiliser JWT en Java
Essayez d'exécuter AWS X-Ray en Java
Essayez d'implémenter Yuma en Java
Essayez d'utiliser le traçage de méthode IBM Java
JPA (API de persistance Java) dans Eclipse
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
[Java] Où avez-vous essayé d'utiliser java
Essayez d'utiliser le framework Java Nablarch [Application Web]
Essayez de résoudre Project Euler en Java
Traitement des données à l'aide de l'API de flux de Java 8
Essayez d'implémenter l'ajout n-aire en Java
Appelez l'API de notification Windows en Java
Mapper sans utiliser de tableau en java
Étude de Java Essayez d'utiliser un scanner ou une carte
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
Essayez d'appeler le service CORBA sur Java 11+
Essayez différentes méthodes d'API Java Stream (maintenant)
Lire Felica en utilisant RC-S380 (PaSoRi) en Java
Créons une application de calcul avec Java
Essayez d'utiliser l'API REST de JobScheduler - implémentation Java RestClient--
Essayez d'utiliser l'API Emotion d'Android
Essayez d'utiliser la télécommande Wii en Java
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de Java
NLP4J [004] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique de l'analyse syntaxique en Java