URL: https://linuxfr.org/news/myphotoshare-une-galerie-de-medias-pour-le-web-pas-comme-les-autres Title: MyPhotoShare, une galerie de médias pour le Web pas comme les autres Authors: pmetras Ysabeau, Julien Jorge, Benoît Sibaud et palm123 Date: 2021-10-21T19:05:53+02:00 License: CC By-SA Tags: web, application, galerie, médias, photo et vidéo Score: 3 [MyPhotoShare](https://gitlab.com/paolobenve/myphotoshare) est un générateur de site Web statique de galerie de médias (licence GPLv3), à partir d’une arborescence de répertoires contenant des photos et des vidéos. Donc vous prenez ce gros répertoire où vous accumulez toutes ces photos ou vidéos depuis tant d’années, vous exécutez l’indexeur de MyPhotoShare en le pointant vers ce répertoire, et celui-ci vous construit un site Web statique avec lequel vous pouvez montrer vos photos au reste de l’univers… Mais attention, site Web statique ne signifie pas fonctions limitées ! En effet, MyPhotoShare propose plusieurs fonctions de navigation ou de recherche de vos médias, par mot clé ou par date, par localisation géographique sur une carte. Les métadonnées associées aux médias, soit dans les images JPEG soit dans des fichiers `album.ini` externes, facilitent la classification ou l’affichage de descriptions. Enfin, des extensions basées sur des réseaux neuronaux permettent d’ajouter l’identification automatique des personnes ou des scènes. De nouvelles fonctions sont ajoutées très fréquemment à MyPhotoShare qui en est rendu actuellement à la version [5.3.10](https://gitlab.com/paolobenve/myphotoshare/-/releases). Bien que MyPhotoShare soit peu connu, le principal développeur est très dynamique et fait évoluer rapidement l’application ou corrige les bogues qui lui sont remontés. Nous allons vous présenter ce qui différencie MyPhotoShare des autres applications de galerie. ---- [MyPhotoShare sur Gitlab](https://gitlab.com/paolobenve/myphotoshare) [Site de démonstration](https://myphotosharedemo.qumran2.net/) [Une présentation en français (par l'auteur de la dépêche)](https://www.alterna.tv/static/myphotoshare.html) [La galerie publique du développeur principal de MyPhotoShare](http://palmaro.qumran2.net) [Paquet Debian/Ubuntu d'installation de MyPhotoShare](https://gitlab.com/pmetras/mps_debian/-/releases) [Site de démonstration de l'auteur de la dépêche: en français, mais sur un serveur peu puissant](https://www.alterna.tv/myphotoshare_demo/) ---- ![La galerie de démonstration de MyPhotoShare](https://www.alterna.tv/static/img/MyPhotoShare_DEMO.jpg) # Comment ça fonctionne ? Probablement comme tout le monde qui possède un appareil photo numérique ou un téléphone intelligent, vous avez accumulé au fil du temps un nombre incommensurable de photos. Peut-être avez-vous fait le tri de ces photos qui reposent dans de nombreux répertoires, et maintenant vous souhaitez les partager, sur le Web, avec vos amis ou votre famille. Mais vous voulez garder le contrôle sur ces photos et éviter qu’elles soient utilisées par les géants du Web à des fins pas tout le temps humanitaires. Bref, vous voulez les présenter dans une galerie Web, peut-être sur votre petit serveur à la maison ou chez un hébergeur. Entre en scène MyPhotoShare… Cette application va vous permettre de parcourir l’arborescence des répertoires de photos pour générer un site Web de galerie média. La particularité de MyPhotoShare est que le site Web de la galerie est statique, c’est-à-dire que ce n’est pas une application qui s’exécute sur le serveur Web et qu’il n’utilise pas de base de données. Le programme d’indexation des médias (le `scanner` de MyPhotoShare) construit tous les fichiers pour l’affichage du site Web à l’avance, qui seront mis en page dans le navigateur Web du visiteur. Vous pouvez imaginer cette opération d’indexation des médias comme la préparation d’un gros cache sur le disque du serveur web. Le serveur web est donc réduit à récupérer et envoyer des fichiers, chose qu’il sait faire de façon efficace, plutôt que d’exécuter du code PHP ou autre pour retrouver l’image à afficher et à la dimensionner pour l’affichage… ## Les avantages d’un site Web statique Comme nous venons de le voir, le premier avantage se situe au niveau de la performance. Puisque tous les éléments constituants la page HTML qui sera affichée dans le navigateur Web sont déjà prêts, le travail du serveur Web se limite à les récupérer sur le disque et à les envoyer au navigateur du visiteur. À titre d’exemple, cette caractéristique me permet d’héberger MyPhotoShare sur un Chromebook qui ne brille pas par sa puissance. D’autre part, les médias, photos et vidéos, sont rarement modifiés. Donc si une photo est redimensionnée à l’avance pour un affichage sur un téléphone portable, le résultat pourra être réutilisé par tous les visiteurs utilisant leur téléphone intelligent. Il suffit de conserver ce fichier dans un cache. C’est ce dont se charge le `scanner` de MyPhotoShare. Il prépare tous les fichiers, pour tous les cas de figures. Et comme il y a généralement peu de changements d’une exécution à l’autre, peut-être l’ajout de quelques photos, cette opération s’effectue rapidement, car le `scanner` ne considère que les fichiers médias nouveaux ou modifiés. En effectuant cette opération de préparation du contenu à un moment où le serveur est moins sollicité, on réserve sa puissance pour les moments achalandés. Globalement, le serveur Web peut accepter plus de sessions simultanées, car il n’exécute pas de code dynamique, contrairement à une galerie écrite en PHP par exemple. Une autre conséquence de cette façon de procéder est d’améliorer la sécurité globale du serveur Web. En effet, le `scanner` peut effectuer son travail avec un compte utilisateur qui permet d’écrire sur le disque alors que le compte utilisateur du serveur Web peut être limité uniquement à de la lecture de ces fichiers. En réduisant le périmètre d’attaque du serveur Web et en limitant les tâches qu’il réalise, on s’assure d’une bonne sécurité. Il sera difficile pour un hacker de perturber le fonctionnement de la galerie média. ## Quelles sont alors les faiblesses d’un site Web statique ? Si un site Web statique est à la fois performant et sécurisé, quels sont ses désavantages ? Le principal est qu’il n’est pas _aussi dynamique_ qu’une application Web qui pourrait utiliser toutes les capacités du serveur, avec une base de données et des calculs dynamiques. On ne peut pas avoir le beurre et l’argent du beurre ! Mais dans le cas d’une galerie média, ces possibilités dynamiques ne sont pas nécessaires. D’ailleurs MyPhotoShare offre des fonctions de navigation ou de recherche évoluées sans nécessiter de calculs dynamiques du serveur Web. Un autre désavantage est que l’utilisateur du site Web ne peut pas pousser d’information vers le serveur. En effet, comme nous l’avons dit, celui-ci est en lecture seule. Il est donc impossible d’y conserver les résultats d’un formulaire Web, ni même de le traiter, car il n’utilise pas de langage tel que PHP ou Python, ou de conserver des informations de l’internaute. Vous cherchiez une galerie qui vous offre le contrôle de vos fichiers, et en plus vous garantissez à vos visiteurs qu’ils ne laisseront pas de traces ! ## Mais alors, comment ça marche ? Tout se passe dans le navigateur Web… Comme je l’ai déjà dit, le `scanner` est un programme d’indexation des fichiers photo et vidéo (les médias) contenus dans les répertoires (les albums). Il crée des fichiers JSON qui sont l’équivalent des fichiers d’index d’une base de données. Lorsqu’un internaute consulte un site MyPhotoShare, son navigateur va charger la page d’accueil de la galerie. Le JavaScript contenu dans cette page va charger, en fonction des actions de l’utilisateur, les fichiers JSON correspondants ainsi que les images nécessaires au rendu de la page. Pour que ça fonctionne, il faut que le `scanner` ait généré à l’avance tous les fichiers JSON pour toutes les actions possibles ! Et oui, on peut voir cette façon de procéder comme un avantage et un désavantage. Le site statique doit préparer le rendu des pages à l’avance, indépendamment des requêtes des différents visiteurs. C’est vrai qu’il est possible que certaines pages générées à l’avance ne soient jamais affichées et que l’indexeur ait travaillé inutilement, mais si le site est populaire la probabilité que ce travail soit inutile diminue. Au contraire, un serveur dynamique recréerait à chaque fois le contenu d’une page pour tout nouveau visiteur. Le site web statique optimise donc l’effort à court terme (répondre à une requête HTTP) et sur le long terme (préparer le travail et le garder dans un cache permanent). Et comme je l’ai dit précédemment, la fréquence de modification du contenu peut jouer également en faveur ou en défaveur d’un site Web statique, mais dans le cas d’une galerie média, c’est bien souvent un avantage, car les changements sont peu fréquents. ## Essayez un site de démonstration Si vous voulez voir à quoi MyPhotoShare ressemble, il y a quelques sites de démonstration dans les liens de la dépêche. Le [site principal de démonstration](https://myphotosharedemo.qumran2.net), _en anglais_, a été construit pour tester la version de développement et présenter certaines fonctions de MyPhotoShare. En particulier, vous pouvez utiliser le mot de passe **pwd** pour afficher et naviguer dans le contenu protégé. Une [version au contenu média identique, mais en français](https://www.alterna.tv/myphotoshare_demo/), est hébergée sur mon petit serveur à la maison. Tout comme pour le site principal, le mot de passe **pwd** dévoilera un album protégé. # Les principales fonctions MyPhotoShare possède les fonctions classiques auxquelles on pourrait s’attendre d’une galerie moderne, comme l’affichage des médias aussi bien sur un ordinateur qu’une tablette ou un téléphone mobile. Je vais plutôt présenter les fonctions qu’on ne s’attendrait pas à trouver sur un site Web statique. ## Pourquoi gérer des métadonnées ? Les métadonnées ajoutent de l’information aux photos et vidéos conservées. Certaines métadonnées **techniques** sont injectées automatiquement par l’appareil photo dans les zones EXIF, IPTC ou XMP des fichiers JPEG, telles que la résolution de l’image, l’ouverture de l’objectif, la date de la capture ou les coordonnées GPS de la prise de vue. L’utilisateur peut ajouter d’autres métadonnées **descriptives** en donnant un nom significatif au fichier JPEG, ou en éditant les zones EXIF. MyPhotoShare va extraire les métadonnées des fichiers médias, mais va également permettre à l’utilisateur de définir des métadonnées dans des fichiers `album.ini` qui sont placés dans les répertoires de photos et vidéos. Ces fichiers `album.ini` permettent d’y définir de nouvelles métadonnées descriptives ou techniques, sans toucher aux fichiers originaux. En effet, les métadonnées provenant de l’`album.ini` ont priorité sur celles présentes dans le JPEG. Si par exemple, je numérise en 2021 une diapositive prise en 1978, je peux préciser dans le fichier `album.ini` la véritable date de la prise de vue. Je peux également y ajouter une description avec une mise en forme HTML que MyPhotoShare peut ou non afficher, suivant les désirs du visiteur du site Web. En dehors de ne pas avoir à modifier les fichiers médias originaux, l’avantage des fichiers de métadonnées `album.ini` est qu’ils sont associés aux répertoires (les albums) et donc que l’on peut les transférer lorsqu’on recopie le répertoire. En plus, ils sont éditables avec un simple éditeur de texte et ils peuvent donc être enrichis facilement sans nécessiter d’autre logiciel ou d’éditeur d’image. Enfin, ils ouvrent la porte à l’ajout d’information automatique à partir d’autres outils, sans risquer de perdre les photos originales, ce dont je parlerai un peu plus loin. Dans le futur, j’espère que les fichiers `album.ini` permettront de changer le fonctionnement du `scanner` en fonction des informations qu’ils contiennent. Actuellement, les paramètres de l’indexeur sont définis dans le fichier de configuration, par défaut dans `/etc/myphotoshare/myphotoshare.conf` et ces paramètres s’appliquent pour l’ensemble de l’arborescence des albums. On peut imaginer qu’il sera possible de modifier localement ces paramètres, dans le cadre d’un répertoire contenant un fichier `album.ini`, afin d’avoir une couleur de page Web différente ou pour afficher automatiquement les descriptions… MyPhotoShare utilise les métadonnées dans de nombreuses fonctions : * navigation par type de métadonnée ; * recherche de contenu média ; * affichage ou non des métadonnées. ## Navigation dans les médias Les médias sont disposés dans des répertoires sur le disque du serveur. Naturellement, MyPhotoShare traduit ces répertoires en albums et en propose l’affichage. Mais il ajoute des répertoires virtuels qui enrichissent la navigation dans les photos. Ainsi, MyPhotoShare offre un affichage des médias dans des albums triés par date: année, mois et jour. Il est également possible d’afficher les médias par dans des albums répartis par emplacement géographique: pays, région ou province, ville. Sur ce dernier point, la navigation par carte, accessible en cliquant sur l’icône d’épingle, permet d’afficher les photos suivant les lieux. ![Affichage de la carte avec les photos](https://www.alterna.tv/static/img/MyPhotoShare_DEMO_carte.jpg) Les résultats de recherche sont également regroupés dans un album virtuel. Et il est aussi possible de combiner plusieurs albums. Par exemple, sélectionner une région sur la carte pour ensuite afficher les photos correspondant aux résultats d’une recherche par mot clé. ## La recherche de contenu média Retrouver une photo parmi toutes celles accumulées depuis des années s’avère souvent une tâche difficile. La navigation temporelle de MyPhotoShare va permettre de retrouver la photo du mariage du cousin Émile, mais encore faut-il se souvenir de la date du mariage ! Heureusement que les appareils photos numériques incluent automatiquement la date de prise de vue dans les fichiers JPEG… De même, on pourra essayer de retrouver la photo d’Émile en navigant par emplacement géographique, si le téléphone portable a consigné les coordonnées GPS dans les métadonnées, ou si celles-ci ont été ajoutées ultérieurement. Si le propriétaire a enrichi sa collection de médias de métadonnées descriptives, au minimum en nommant les fichiers médias ou les répertoires, idéalement en renseignant les champs de métadonnées EXIF ou ceux des `album.ini`, MyPhotoShare va utiliser ces informations pour permettre des recherches textuelles par mot clé. ![Les options de recherche texte](https://www.alterna.tv/static/img/MyPhotoShare_DEMO_recherche.jpg) Il peut paraître étonnant qu’un site Web statique propose des options de recherche telles que la recherche partielle dans les mots, ou sans tenir compte de l’accentuation. MyPhotoShare supporte également d’affiner les recherches en les combinant. Si avec ça on ne retrouve pas Émile dans son costume trois pièces ! ## Personnaliser l’affichage Chaque visiteur de la galerie peut personnaliser l’affichage suivant son goût. MyPhotoShare dispose d’options de base : ![Les options d’affichage de l’interface utilisateur](https://www.alterna.tv/static/img/MyPhotoShare_DEMO_affichage.jpg) * Présentation des albums et médias : * ordre de tri de l’affichage, par date ou par nom, en sens croissant ou décroissant ; * ordre de tri des médias, par date ou par nom, en sens croissant ou décroissant ; * offichage du titre et du chemin d’accès à l’album ; * nombre de médias dans l’album et les sous-albums ; * vignettes carrées ou dans la proportion originale ; * afficher le nom du fichier média ; * afficher les descriptions ; * afficher les étiquettes ; * encadrer les vignettes pour les présenter comme des diapositives ; * espacer l’affichage des vignettes. Les choix de l’utilisateur sont conservés dans un cookie qui lui permettra de retrouver ses préférences lors des visites ultérieures. Bien sûr, le propriétaire du site Web va définir des options d’affichage globales dans le fichier de configuration `myphotoshare.conf`, telles que la couleur de fond de page, la langue d’affichage par défaut ou la taille des vignettes, etc. Pour le moment, l’affichage est relativement figé: une galerie MyPhotoShare ne se distinguera pas tellement d’une autre galerie MyPhotoShare. On y trouve soit des albums, soit une planche contact de médias, soit une photo principale et un ruban. J’aimerais que MyPhotoShare évolue, dans le futur, pour pouvoir organiser l’affichage par album, pour que ceux-ci soient le support visuel d’une histoire… ## Partager des photos Vous avez enfin retrouvé les photos du cousin Émile ! Il ne reste plus qu’à effectuer une sélection où l’oncle Robert apparaît et les lui envoyer. MyPhotoShare vous permet de sélectionner des médias. Avez-vous remarqué la boite à cocher dans les vignettes de médias, au coin bas gauche, des captures d’écran précédentes ? Il suffit de cliquer sur cette boite pour ajouter le média correspondant à la sélection. Ou bien de sélectionner tous les médias affichés en utilisant le menu. Ou encore sélectionner tous les résultats d’une recherche… Une fois que tous les médias ont été ajoutés dans votre sélection, MyPhotoShare vous permet de les télécharger. L’application construit un fichier Zip que vous pouvez sauvegarder sur votre ordinateur. Avant de recevoir le fichier Zip, on peut sélectionner les types de fichiers (photos et/ou vidéos) et si la sélection doit intégrer les sous-albums. Mais peut-être préférez-vous partager un lien dans un courriel ou sur une plateforme sociale ? Les icônes de partage, affichés sur le bord gauche de la galerie, servent justement à ça. Si vous cliquez sur l’enveloppe, votre client de messagerie construit un courriel avec le lien de la page courante. De même, en cliquant sur le [f], vous pourrez partager les médias de la page courante sur Facebook. S’il s’agit d’un album, MyPhotoShare construit une vignette mosaïque avec le contenu. Ces fonctions de partage social ont donné à la galerie son nom **_…Share_**. Elles sont les seules requiérant l’utilisation de PHP par le serveur Web, et qui font que la page d’accueil soit `index.php`. Si ces fonctions ne vous sont pas utiles, vous pouvez utiliser la version statique `index.html`. Les sites de partage social, affichés par leur icône, sont paramétrables dans le fichier de configuration `myphotoshare.conf` du site. Ceux affichés dans les captures d’écrans sont ceux par défaut. Il faut parfois publier quelques photos sur les gros sites sociaux pour rappeler aux internautes que le Web existe en dehors de Facebook… ## Des fonctions avancées De base, si [OpenCV](https://opencv.org) est installé sur le serveur, alors le programme d’indexation `scanner` l’utilisera pour déterminer si un visage apparaît sur une photo et s’arrangera pour centrer le visage lors de la préparation de la vignette. C’est plus pratique d’avoir des vignettes où l’on reconnaît immédiatement qui s’y trouve! ### Reconnaissance des visages J’ai développé deux extensions pour ajouter des fonctions avancées à MyPhotoShare. La première est la [reconnaissance des visages](https://gitlab.com/pmetras/mps_autofaces). À partir de répertoires contenant des photos et des fichiers `album.ini` qui identifient des personnes sur ces photos, le script Python `mps_autofaces` va apprendre à reconnaître ces personnes à l’aide d’un réseau de neurones. Puis il va re-parcourir l’arborescence des albums et des photos, et modifier les métadonnées des fichiers `album.ini` pour y ajouter le nom des personnes qui apparaissent sur les photos. Les résultats produits par cette extension sont époustouflants. J’ai parfois du mal à reconnaître une personne sur une photo, mais `mps_autofaces` est capable de l’identifier s’il l’a déjà apprise. Comme expliqué sur la [page Gitlab](https://gitlab.com/pmetras/mps_autofaces) du projet _en anglais_, j’utilise un répertoire contenant des photos de portraits ou des photos d’identité, afin que l’apprentissage du réseau de neurone soit facilité. Mais même avec une seule photo d’un individu, cette extension est capable de reconnaître cette personne dans des contextes variables ou à des âges différents. Bien sûr, les grands sites d’hébergements de photos ou des réseaux sociaux ont des fonctions similaires, probablement plus performantes que `mps_autofaces` car celles-ci doivent pouvoir reconnaître des personnes que vous ne connaissez même pas! Mais je préfère garder le contrôle de mes photos et de l’utilisation de mon image personnelle. ### Reconnaissance de scènes La deuxième extension s’attaque à la [reconnaissance des scènes et des objets](https://gitlab.com/pmetras/mps_autoscenes) dans les photos. Le principe est le même que pour la reconnaissance des individus: le programme entraîne un réseau de neurones à reconnaître des objets et des situations à partir d’une base d’images d’apprentissage. J’utilise les collections d’images de [Visual Genome](https://visualgenome.org/) et [MS COCO](https://cocodataset.org/) pour cette opération. Ces bases d’images contiennent à elles deux plus de 400 000 images exemples annotées décrivant les scènes et les objets présents. Ce jeu d’apprentissage est amélioré par diverses techniques, par exemple, en appliquant un effet miroir aux images pour doubler le nombre d’exemples d’apprentissage. Comme la phase d’apprentissage est très longue, de multiples sauvegardes du réseau de neurones sont réalisées. Une fois que le réseau de neurones fournit de bons résultats de reconnaissance sur les images de test, il peut appliquer ses connaissances sur le contenu des albums de MyPhotoShare avec la commande `mps_autoscenes`. Ce script modifie également les fichiers `album.ini` pour y ajouter les étiquettes correspondantes aux objets ou scènes reconnues automatiquement. Comme MyPhotoShare propose une interface utilisateur dans plusieurs langues (actuellement le français, l’italien, l’anglais et l’espagnol), il était nécessaire que les étiquettes automatiques des objets et scènes soient dans la langue du site Web. Ceci est rendu possible par l’utilisation de la base lexicale [WordNet](https://wordnet.princeton.edu) qui permet une traduction des concepts, à partir de l’anglais qui a servi pour les annotations, vers la langue du site. Malheureusement, même avec des centaines de milliers d’exemples, et plusieurs jours d’apprentissage sur mes ordinateurs personnels, les résultats ne sont pas au même niveau que la reconnaissance des visages. `mps_autoscenes` est capable de reconnaître de nombreux objets (des fleurs, des animaux, des véhicules ou des personnes, etc.) dans mes photos. Il ne commet pas d’erreur d’interprétation dans environ 50% des cas, ce qui signifie que dans les 50% restants, il confondra le portrait du cousin Félicien avec une cafetière! Je ne dispose pas des moyens nécessaires pour améliorer ces résultats pour le moment. Et comme MyPhotoShare ne dispose pas _encore_ d’une fonction de recherche *avec pondération* dans les étiquettes, je suis obligé de réviser manuellement les étiquettes automatiques ajoutées par `mps_autoscenes`. ## Et des tas d’autres fonctions… MyPhotoShare possède de nombreuses autres fonctions sur lesquelles je ne m’étendrai pas. Regardez la liste complète sur le site [Gitlab du projet](https://gitlab.com/paolobenve/myphotoshare#a-long-list-of-features). On notera : * la navigation dans la galerie peut s’effectuer entièrement au clavier, mais une souris à roulette améliore l’expérience utilisateur ; * la galerie fonctionne aussi bien sur un grand écran d’ordinateur que sur celui d’un téléphone portable ; * la protection d’album ou de certaines photos par un mot de passe personnalisable. Deux visiteurs peuvent voir des contenus différents… ; * l’affichage en plein écran et l’agrandissement d’une photo sans limite ; * les images s’affichent à l’écran avec une animation fluide. Elles sont préchargées par le navigateur pour offrir une bonne réactivité, même avec de nombreuses images ; * les fichiers d’images sont redimensionnés dans le cache pour optimiser la résolution d’affichage en fonction de la plateforme, et, évidemment, améliorer la performance lors de l’affichage dans le navigateur ; * et, bien sûr un [générateur de paquet Debian/Ubuntu](https://gitlab.com/pmetras/mps_debian/) pour faciliter l’installation et les mises à jour du serveur ! # Techniquement Tout cela est bien beau, mais est-ce que ça va fonctionner sur ma machine ? ## Installation sur le serveur Web S’il s’agit d’un ordinateur qui roule Debian ou Ubuntu, le plus simple est d’utiliser un [paquet d’une livraison récente](https://gitlab.com/pmetras/mps_debian/-/releases) qui se chargera de vérifier les dépendances. Si la toute dernière version de MyPhotoShare n’est pas encore disponible empaquetée, [construisez vous-même le paquet](https://gitlab.com/pmetras/mps_debian) _en anglais_. Sinon si votre ordinateur carbure avec Linux ou un système assimilé, la [procédure d’installation](https://gitlab.com/paolobenve/myphotoshare/-/blob/master/doc/Install.md) _en anglais_ vous guidera pas-à-pas pour y installer les logiciels et modules nécessaires et vous indiquera même comment configurer votre serveur Web. Nous n’avons jamais essayé d’installer MyPhotoShare sur un ordinateur Windows. Si vous tentez l’expérience, partagez vos résultats ! MyPhotoShare est programmé principalement en Python, donc techniquement ce ne devrait pas être impossible… ## Performance MyPhotoShare a fait le choix de générer un site Web statique plutôt que d’utiliser du code serveur en PHP ou en Python. Cette décision, prise il y a de nombreuses années par l’auteur initial, s’est avérée un bon choix. Ainsi la galerie est capable de fonctionner même sur de très petits serveurs économes en puissance électrique. C’est à vous, propriétaires de Raspberry v1 ou Cubox-i qui dorment inutilisés sur des étagères, auxquels je parle ! Voici quelques chiffres tirés des tests de Paolo Benvenuto, le développeur principal qui maintient et améliore MyPhotoShare. ### Performance du scanner À titre de comparaison, sur un PC de bureau, avec les albums de médias sur une partition NAS : * indexer une arborescence de 692 photos, pour un total de 2,3 Go, en mettant en œuvre la détection de visages, prend environ 700 secondes (environ 1 s/média). La détection de visage dans la préparation des vignettes prend environ 267 ms/photo quant-à elle ; * la réindexation d’une collection de 36 000 fichiers médias pour un total de 87 Go dure environ 14 minutes (20 ms/média; 50 médias/s) lorsque les sommes de contrôle ne sont pas utilisées. Le temps d’exécution passe à 90 minutes (110 ms/média; 9 média/s) si les sommes de contrôle sont activées ; * scanner 40 000 photos et moins de 100 vidéos, pour la première fois, dure environ 5 heures avec les sommes de contrôle activées. La conversion des vidéos prend beaucoup plus de temps que celle des photos, d’autant plus que leur durée est grande. ### Consommation mémoire L’indexation de 45 000 médias nécessite 1,5 Go/2,1 Go de mémoire vive/virtuelle. ### Code JavaScript Le code JavaScript est optimisé et la galerie gère facilement 40 000 médias. Cependant, si un album contient plus de 1000 photos, il faut s’attendre à quelques lenteurs d’affichage. Malgré tout, la galerie reste utilisable. ### Taille du cache Bien sûr, la performance se paie au prix de l’espace disque utilisé par le cache. Nous avons essayé de le garder dans des limites raisonnables. Le ratio de la taille du cache par rapport à la taille des albums originaux dépend de nombreux facteurs tels que le nombre de tailles d’images intermédiaires que vous désirez (voir l’option `reduced_sizes` dans le fichier de configuration) et des options de transcodage vidéo (voir `video_preset` par exemple), ou bien sûr de la durée des vidéos. _Il faut noter que ces chiffres ont été obtenus alors que le `scanner` était configuré pour créer trois images de tailles différentes, alors que la configuration par défaut actuelle se limite à deux images_. Site | Nombre de médias | Taille des albums | Taille du cache | Ratio cache/albums ------+------------------+-------------------+-----------------+-------------------- Démo AlternaTV | 95 images | 675 Mo | 116 Mo | 17% Site de production #1 | 14k médias dont 20 vidéos | 95 Go | 25 Go | 26% Site de production #2 | 20k médias dont 439 vidéos | 92 Go | 66 Go | 77% Site de production #3 | 26k médias dont 430 vidéos | 232 Go | 82 Go | 35% # Une feuille de route pour le futur MyPhotoShare est une branche de [PhotoFloat](https://git.zx2c4.com/PhotoFloat/about/), galerie développée par Jason A. Donenfeld, vers 2016, lorsque son auteur a arrêté de le développer. La branche a été enrichie par Jerome Charaoui pour supporter les vidéos, avec les contributions de Paolo Benvenuto et de Pierre Métras. Paolo en est maintenant le développeur principal, l’enrichissant de nouvelles fonctions au fil des versions. Les idées ne manquent pas pour améliorer le logiciel. Ce sont plus les ressources et le temps de les mettre en œuvre qui font défaut. Si vous cherchez un projet en source ouvert pour occuper quelques soirées, n’hésitez pas à indiquer votre intérêt sur le Gitlab du projet ou dans les commentaires de la dépêche. Voici quelques sujets tirés de ma boite à idées : * [Permettre la recherche de photos similaires](https://gitlab.com/paolobenve/myphotoshare/-/issues/309) en effectuant du hachage perceptuel ([[en:Perceptual hashing]]). Le `scanner` calcule déjà un [[hachage]] pour détecter les modifications dans les albums entre deux exécutions; il suffirait d’ajouter au code Python celle pour le hachage perceptuel des images, et de conserver les résultats dans un fichier JSON. Ensuite, il faudrait un peu de code JavaScript pour ajouter l’option de menu correspondante. * Ajouter d’autres langues à l’interface utilisateur. Une traduction en bulgare est en cours, mais l’ajout de l’allemand ou du portugais, ou des langues asiatiques permettrait de toucher un public plus large. Le dictionnaire des messages se trouve dans un [fichier JavaScript](https://gitlab.com/paolobenve/myphotoshare/-/blob/master/web/js/031-translations.js) qu’il est facile d’enrichir avec de nouvelles traductions. Je peux vous indiquer comment procéder ; il suffit de savoir utiliser un éditeur de texte et de maîtriser une langue. * Peaufiner la feuille de style CSS pour moderniser l’affichage par défaut de la galerie. Offrir plus d’options au propriétaire du site de créer une présentation qui se démarque. * Idéalement, comme écrit ci-dessus, chaque album pourrait devenir le support d’une histoire en images, en sortant du modèle linéaire de la pellicule qui liste les médias au bas de l’écran. Mais on pourrait également imaginer des fichiers `story.ini` qui regroupent des médias tirés de plusieurs albums pour [construire une trame narrative](https://gitlab.com/paolobenve/myphotoshare/-/issues/213). Ce type d’affichage pourrait être utilisé pour présenter un voyage dont les photos sont réparties sur plusieurs albums, ou l’histoire d’une personne pour une page de généalogie… * Ajouter un [[tatouage numérique]] ou une signature [lors de l’indexation et de la création du cache d’images](https://gitlab.com/paolobenve/myphotoshare/-/issues/212). * Permettre aux visiteurs de la galerie d'[identifier les meilleures photos](https://gitlab.com/paolobenve/myphotoshare/-/issues/209). La qualité d’une photo est subjective et pas forcément partagée entre son auteur et celui qui la contemple, mais certains photos se démarquent et il faut pouvoir les mettre de l’avant dans l’accumulation des fichiers que nos gadgets numériques génèrent… L’avenir de MyPhotoShare est donc devant nous, tant qu’on ne se retourne pas comme disait Pierre Dac. Comme cette galerie est à code source ouvert sous licence GPLv3, vous aussi pouvez y contribuer. Une première étape serait de l’essayer et de partager vos photos sur le Web.