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月21æ—„T19:05:53+02:00 License: CC By-SA Tags: web, application, galerie, mĂ©dias, photo, vidĂ©o et reconnaissance_faciale Score: 57 [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.

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /