Amazon Rekognition et Nuxeo Vision


Thu 19 January 2017 Par Rémi Cattiau

C'est chaque année un immense plaisir d'assister à la conférence re:Invent et de rencontrer de nouvelles personnes, de discuter de leur travail sur le Cloud et de découvrir les nouvelles technologies.

Les nouvelles technologies qui m'ont le plus intéressé cette année ont été Alexa (spoiler : ça sera le sujet de mon prochain article) et le machine learning. L'une des applications du machine learning est la reconnaissance d'images et AWS vient de publier un service dédié nommé Amazon Rekognition.

Nous avons lancé Nuxeo Vision il y a peu de temps. Il s'agit d'un plug-in qui s'appuie sur l'API Google Cloud Vision pour réaliser des opérations de détection d'image, telles que la recherche sécurisée d'images, l'étiquetage d'objets communs au sein d'une image, la détection et l'extraction de texte dans une image et bien plus. Pour aller encore plus loin, j'ai décidé d'ajouter le service Rekognition à Nuxeo Vision afin de vous permettre de choisir le service que vous utilisez : Amazon Rekognition ou Google Cloud Vision. Cette intégration sera disponible dans quelques jours, mais nous pouvons déjà jeter un œil à la configuration et au résultat pour patienter.

Provider Rekognition

Après un léger remaniement de nuxeo-vision, j'ai extrait une interface de configuration afin d'ajouter un « provider » Amazon Rekognition :

public interface VisionProvider {

  List<VisionResponse> execute(List<Blob> blobs, List<VisionFeature> features, i nt maxResults) throws IOException, GeneralSecurityException, IllegalStateException;

}

Amazon Rekognition peut réaliser des actions de détection et de marquage, tout comme Google Vision peut réaliser des actions de marquage, d'OCR et d'analyse d'images. Nous allons pour l'instant nous concentrer sur la fonctionnalité de marquage de Rekognition au sein de Nuxeo Vision.

Voici notre configuration Amazon :

public class AmazonProvider implements VisionProvider {
  ...
  @Override

  public List<VisionResponse> execute(List<Blob> blobs, List<VisionFeature> features, int maxResults) throws IOException, GeneralSecurityException, IllegalStateException {
    ArrayList<VisionResponse> result = new ArrayList<>();
    for (Blob blob : blobs) {
      result.add(new AmazonRekognitionResponse(client.detectLabels(new DetectLabelsRequest().withImage(
        new com.amazonaws.services.rekognition.model.Image()
          .withBytes(ByteBuffer.wrap(blob.getByteArray())))
          .withMaxLabels(maxResults).withMinConfidence(0.9f))));
    }
  return result;
  }
}

La configuration

Une fois notre code ajouté et installé sur notre serveur Nuxeo, il faut encore le configurer en ajoutant les variables suivantes à notre fichier nuxeo.conf.

org.nuxeo.vision.provider=amazon
org.nuxeo.vision.amazon.access_key=AKIA...UA
org.nuxeo.vision.amazon.secret_key=F0..../e

Et c'est tout !

Le résultat

Maintenant, lorsque nous ajoutons une image sur notre serveur Nuxeo, les étiquettes correspondantes sont automatiquement ajoutées à partir d'Amazon Rekognition :

Image tags added by Amazon Rekognition


Tagged: AWS, Nuxeo Plugin, Nuxeo Vision