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/) ----  # 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.  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Ă©.  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 :  * 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.