Optimiser la conversion des images dans Nuxeo Platform


Thu 08 December 2016 Par Michael Vachette

Optimiser la conversion des images est un défi auquel les organisations médiatiques et de publication d'images d'envergure internationale doivent souvent répondre. Nous avons travaillé ces dernières semaines sur un cas d'utilisation pour une de ces organisations qui attendait principalement de Nuxeo Platform de pouvoir importer jusqu'à 15 000 images haute résolution au format JPEG par heure avec une indexation et des conversions en temps quasi réel pour qu'il soit possible de chercher et de prévisualiser quasi instantanément les ressources après leur import. Même s'il ne faisait aucun doute que Nuxeo Platform pouvait répondre à ce défi (grâce à son architecture hyper évolutive), la vraie question a été de déterminer l'infrastructure minimum requise pour y parvenir.

Nuxeo Platform intègre ImageMagick, un outil de conversion d'image incroyablement polyvalent. Nous allons nous concentrer ici sur sa fonctionnalité de redimensionnement. Lorsqu'une image est importée dans la plateforme, plusieurs opérations de conversion sont réalisées pour obtenir différentes résolutions de l'image originale : miniature, prévisualisation, etc. La commande ImageMagick par défaut utilisée par la plateforme est très générique et fonctionne dans quasi toutes les situations. C'est pratique pour les débutants, mais vous pouvez l'optimiser pour répondre à vos besoins spécifiques lorsque vous commencer à bien maîtriser la plateforme.

Pour contourner le convertisseur par défaut, il suffit de le redéfinir dans Nuxeo Studio. Vous trouverez ci-dessous d'une commande moins exigeante pour le CPU que la commande par défaut :

<extension point="command" target="org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent">
    <command enabled="true" name="jpegResizer">
      <commandLine>convert</commandLine>
      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -depth #{targetDepth} -scale #{targetWidth}x#{targetHeight} #{inputFilePath} #{outputFilePath}</parameterString>
      <installationDirective>You need to install ImageMagick.</installationDirective>
    </command>
</extension>

Nous avons réalisé des tests avec le convertisseur par défaut et le convertisseur optimisé sur une instance AWS c3.xlarge (4CPU/8Go RAM) sur un échantillon de 150 images avec une taille moyenne de 5 Mo et une résolution de 18 Mpx. Voici le résultat :

Comparison-resize
Convertisseur par défaut vs convertisseur de redimensionnement JPEG optimisé

Quelques lignes de configuration nous ont déjà permis d'obtenir une amélioration du débit de 100 %, ce qui est assez incroyable. Mais ce n'est pas tout. ImageMagick propose de nombreux algorithmes permettant de redimensionner les images. En voici trois, du plus rapide au plus lent : sample, scale, et resize.

Algorithm comparison
Comparaison des algorithmes de redimensionnement

Le graphique ci-dessus montre que le débit double lorsqu'on passe de resize à scale et est encore encore plus important avec le sample. Mais ça n'est intéressant que si l'image générée est d'assez bonne qualité pour être utilisée.

Results
Images générées

L'algorithme sample n'offre visiblement pas de très bons résultats. Mais il est en revanche difficile de faire la différence entre les images redimensionnées avec les algorithmes scale et resize, ce qui est intéressant car cela nous permet de profiter sans efforts d'un débit 4x plus rapide que le débit par défaut !

Enfin, on peut améliorer légèrement la vitesse de traitement en utilisant GraphicsMagick à la place d'ImageMagick. L'outil n'est pas aussi polyvalent (fichiers Photoshop non supportés), mais il est légèrement plus rapide avec les images JPEG.

comparaison entre graphicsmagick et imagemagick

En fin de compte, tout dépend de votre utilisation et des conversions dont vous avez besoin. Gardez en tête que vous pouvez utiliser une commande différente pour chaque conversion, ce qui vous laisse le champ libre pour procéder à d'autres opérations d'optimisation.


Tagged: Nuxeo Platform, Nuxeo Integration, Digital Asset Management, How to