Haven OnDemand : les API d’analyses d’images

Les technologies d’analyses d’images se multiplient. Il s’agit de pouvoir analyser, interpréter des images fixes ou animées. Ce domaine couvre de nombreux types d’images : textes (documents scannés ou codes-barres), visages (identification ou reconnaissance faciale) ou objets (détection, identification ou classification).

Quand on parle d’analyse d’images, on distingue la détection de l’identification, que ça soit pour le texte, les objets ou les visages. La détection correspond à la reconnaissance de la présence de l’élément (l’image contient-elle des visages ? du texte ? des codes- barres ? etc). Tandis que l’identification d’un élément est le fait de pouvoir le nommer (un élément a été détecté, et je peux le nommer : il s’agit de tel objet, ou de telle personne).

Pour bien comprendre le rôle de ces API, prenons quelques exemples :

- type d’images à analyser : Codes-barres, Visages, Objets

- exemple d’usage : détecter, et lire, un code à barres 2D, détection des visages sur des images, reconnaître des logos, des objets dans une image, extraire le texte d’un document scanné

Haven OnDemand répond à ces défis par 4 principales API :

- Barcode Recognition

- Face Detection
- Image Recognition

- OCRDocument

1 - Les API

Face Recognition

L’API de reconnaissance de visages (Face Recognition) a pour but de détecter sur des images la présence de visages et de les isoler en les encadrant. Par exemple, sur les apps photos des smartphones, vous pouvez détecter des visages à la volée. L’API supporte les principaux formats d’images fixes (jpeg, png, bmp, tiff,...) et vidéos (mpeg, windows media, mp4,...). Vous pouvez coupler cette API à l’API de reconnaissance vocale. Cette API supporte de nombreux codecs (mpeg audio, wav, AC3,...).

Image Recognition

L’API de reconnaissance d’image se focalise sur une partie spécifique d’une image. Typiquement, vous pouvez identifier et isoler un logo dans un visuel. L’API produira en résultat le nom du logo tel qu’il est indiqué dans la base de données d’Haven OnDemand. La localisation du logo au sein de l’image sera aussi précisée. Bien entendu, l’usage de cette API ne s’arrête pas uniquement aux logos. Vous pouvez l’utiliser pour d’autres types de reconnaissances, tel que l’identification ou la classification d’objets, à condition de disposer des jeux de données adéquats pour procéder à l'apprentissage.

OCR Document

Comme le nom de l’API l’indique, OCR Document (Optical Character Recognition) permet la reconnaissances optique de caractère au sein d'un document, c’est-à-dire l’extraction de texte présent dans une image. L’API supporte différents alphabets (latin, cyrillique, arabe, ...) et langues (anglais, français, grec, italien, russe, etc.) ce qui rend l’API très pertinente dans un contexte Big Data multilingue. En entrée, l’API nécessite les fichiers et images que vous souhaitez analyser. En sortie, l’API produit le texte extrait et la localisation de celui-ci dans l’image. Vous pouvez alors appliquer une indexation et une recherche full text. L’image que vous envoyez à l’API peut être de différente nature : photo, document scanné ou scène complexe (par exemple un paysage, une scène dans un magasin ou des sous-titres d’une vidéo). Pour optimiser la reconnaissance de caractères, vous pouvez préciser la nature de l’image dans les paramètres de la requête.

Barcode Recognition

Plus « classique », la reconnaissance des codes-barres. L’API permet de les détecter et de les identifier. Il existe plusieurs types de codes-barres : EAN-13, EAN-8, Matrix 2/5, QR Code, etc.

2 - Exemples d’utilisation des API

Vous pouvez appeler les API d’Haven OnDemand pour une utilisation de manière synchrone ou asynchrone :

- Dans l'API synchrone, Haven OnDemand traite la requête immédiatement, et renvoie une réponse unique, contenant vos résultats.

- Dans l'API asynchrone, Haven OnDemand reçoit la requête, et retourne un identifiant de l’opération qui vous permet de suivre le traitement de la requête. Lorsque la requête est terminée, le message d'état renvoie également la réponse et les résultats.

L'API synchrone est idéale pour obtenir des résultats rapides. Vous pouvez l'utiliser pour les petites demandes. Et donc, dans le cas d'une perte de connexion, vous devrez soumettre à nouveau la demande pour obtenir les résultats. L'API asynchrone, quant à elle, est préférable pour les actions qui pourraient prendre beaucoup de temps, ou si vous n’avez pas besoin du résultat immédiatement. Vous pouvez également l'utiliser pour soumettre plusieurs opérations dans une requête. Pour plus d’information : https://dev.havenondemand.com/docs/AsynchronousAPI.htm

Barcode Recognition

URL de l’API = https://api.havenondemand.com/1/api/sync/recognizebarcodes/v1

Paramètre d’authentification = apikey
Paramètre obligatoire = fichier à traiter / référence d’un document indexé / URL d’une image

Paramètre optionnel = orientation du code-barre / type du code barre

Ce qui donne pour une image de code barre :

https://www.havenondemand.com/sample-content/barcode/bc9.jpg https://api.havenondemand.com/1/api/sync/recognizebarcodes/v1?url=

https://www.havenondemand.com/sample-content/barcode/bc9.jpg &apikey=votre_apikey

Face Recognition

https://dev.havenondemand.com/apis/detectfaces#overview

Image Recognition

https://dev.havenondemand.com/apis/recognizeimages#overview

EXTRAIRE DU TEXTE D’UNE IMAGE AVEC L’OCR

Appel de l’API “OCR document” depuis Android

Dans cet exemple, nous allons décrire la mise en œuvre de l’API « OCR Document », c’est-à-dire, l’extraction du texte à partir d’une image. Cette API est identifiée par une application nommée ocrdocument".

L'API nécessite une requête POST HTTP au serveur avec l'URL complète qui se compose de 4 parties:

- Le domaine : https://api.idolondemand.com/1/api

- Le mode : /async or /sync
- L’application : /ocrdocument
- La version de l’API : /v1

L’URL complète ressemblerait à ceci :

"https://api.idolondemand.com/1/api/async/ocrdocument/v1"
Les paramètres à passer dans la requête POST sont les suivants :
- L’apikey : Votre clé API
- Le fichier : Un fichier contenant l’image à traiter.
- Le mode (optionnel): scene_photo | document_photo | document_scan | subtitle

Nous allons créer une requête POST avec ces paramètres dans notre code Android :

String idol_ocr_service = "https://api.idolondemand.com/1/api/async/ocrdocument/v1"; URI uri = new URI(idol_ocr_service);
HttpPost httpPost = new HttpPost();
httpPost.setURI(uri);

MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create();

reqEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

reqEntity.addPart("apikey", new StringBody(apikey, ContentType.TEXT_PLAIN));

reqEntity.addBinaryBody("file", new File(mImageFullPathAndName);

reqEntity.addPart("mode", new StringBody("document_photo", ContentType.TEXT_PLAIN));

httpPost.setEntity(reqEntity.build());

HTTPClient httpclient = new DefaultHttpClient();

HttpResponse response = httpClient.execute(httpPost);

Après l'envoi de la demande asynchrone POST ci-dessus, nous nous attendons à recevoir une réponse de texte JSON formatée à partir du serveur. La réponse contient un identifiant nommé "jobID". Nous allons utiliser la valeur du JobID plus tard dans une requête GET pour aller chercher le résultat réel.

Voici une réponse typique avec un jobID du serveur:

Nous avons juste besoin d'analyser la chaîne JSON pour obtenir la valeur du jobID puis l'utiliser pour aller chercher le résultat réel :

String response = {"jobID":"usw3p_89f2563e-8742-4def-ae25-9162a6a35c9a"}

JSONObject mainObject = new JSONObject(response);

String jobID = mainObject.getString("jobID");

L'URL pour récupérer le résultat réel identifié par un jobID est définie comme suit : https : //api.idolondemand.com/1/job/result/[jobID]

Nous allons créer une requête GET avec un jobID dans notre code Android :
String idol_job_result = "https : //api.idolondemand.com/1/job/result/";
String url = idol_job_result + jobID + "?";
url += "apikey=" + apikey;
URI uri = new URI(url);
HttpGet httpGet = new HttpGet();
httpGet.setURI(uri);
HTTPClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpGet); 

Si la requête GET a réussi, la réponse du serveur est une chaîne de texte JSON formatée. Voici une réponse typique :

Nous allons utiliser Android JSONObject à nouveau pour analyser la réponse et extraire le texte que nous voulons afficher.

String foundText = "";
JSONObject mainObject = new JSONObject(response);
JSONArray textBlockArray = mainObject.getJSONArray("actions");
if (textBlockArray.length() > 0) {
  for (int i = 0; i < textBlockArray.length(); i++) {
   JSONObject actions = textBlockArray.getJSONObject(i);
   JSONObject result = actions.getJSONObject("result");
   JSONArray textArray = result.getJSONArray("text_block");
   int count = textArray.length();
   if (count > 0) {
    for (int n = 0; n < count; n++) {
     JSONObject texts = textArray.getJSONObject(n);
     foundText += texts.getString("text");
   }
  }
 }

Voilà tout ce dont vous avez besoin pour mettre en oeuvre l'API OCR dans votre application. La valeur de la variable foundText est le texte reconnu de l'image.

3 - Ressources

Face Recognition : https://dev.havenondemand.com/apis/detectfaces#overview
Image Recognition : https://dev.havenondemand.com/apis/recognizeimages#overview
OCR Document : https://dev.havenondemand.com/apis/ocrdocument#overview
Barcode Recognition : https://dev.havenondemand.com/apis/recognizebarcodes#overview 

Les vidéos autour d'Haven OnDemand

  • Ayni (startup) : Haven onDemand Speech-to-text API pour l’apprentissage d’une nouvelle langue.
  • Blink (startup) : Haven onDemand Facial Recognition API pour le speed dating.
  • SocialCapital (startup) : Haven onDemand Concept Extraction API pour le recrutement.
  • Transparent (application) : Haven onDemand Image Recognition API pour le recrutement.
  • Haven onDemand : présentation de l’API reconnaissance faciale
  • CollabNotes : présentation des APIs Concept & Entity Extraction

Les liens essentiels d’Haven OnDemand