Archives par mot-clé : digikam

Partager des bases de données MySQL multimédia Digikam et Kodi

A l’occasion d’une reconfiguration totale de mon réseau que j’évoquerai dans un prochain post, j’ai été emmené à vouloir partager mes bases de donnée multimedia kodi et digikam d’un PC à un autre. Mes bases de donnée sont physiquement sur un PC de bureau Acer Predator doté d’une large capacité de stockage (22 To) mais particulièrement bruyant, pour cette raison sa place n’est pas vraiment dans le salon, j’ai donc fait l’acquisition d’un mini PC Dell optiplex 7040 silencieux branché à la TV avec l’objectif qu’il puisse accéder aux bases de données multimedia de mon PC Predator placé à une distance respectable dans une autre pièce.

Commençons par kodi qui, pour rappel est un mediacenter que j’utilise essentiellement pour visualiser mes films.

La première chose à faire est d’exporter la base de donnée de kodi vers un serveur MySQL, en l’occurrence vers mon serveur mini PC Lenovo Thinkcenter sur lequel tourne déjà un serveur MariaDB. On crée ensuite le fichier ./kodi/userdata/advancedsettings.xml contenant

<advancedsettings>
  <videodatabase>
     <type>mysql</type>
     <host>192.168.13.11</host>
     <port>3306</port>
     <user>kodi</user>
     <pass>kodi</pass>
  </videodatabase>
  <videolibrary>
    <importwatchedstate>true</importwatchedstate>
    <importresumepoint>true</importresumepoint>
  </videolibrary>
  <musicdatabase>
     <type>mysql</type>
     <host>192.168.13.11</host>
     <port>3306</port>
     <user>kodi</user>
     <pass>kodi</pass>
  </musicdatabase>
</advancedsettings>

Maintenant pour utiliser cette base de données sur d’autres machines avec d’autres utilisateurs, il suffit de copier  le fichier advancedsettings.xml dans le répertoire userdata de l’autre utilisateur d’une autre machine. Il faudra également copier le fichier Textures13.db sous userdata/Database et le répertoire complet userdata/Thumbnails. Ce n’est pas tout, si vos fichiers de votre PC initial se trouvent sur le disque /germaine/video/Films, sur les autres postes clients ce répertoire doit être partagé par montage NFS aux autres postes et doit être configuré tel quel en tant que source sur ces mêmes postes. Attention vous devez veiller à avoir la même version de kodi sur chacun des postes où la base est partagée pour éviter des conflits et des problèmes éventuels. La manipulation est décrite plus dans le détail sur cette page.

Passons à digikam maintenant qui est certainement le gestionnaire open source photos de référence (voir mes posts dans l’ordre chronologique , et ici).

Digikam

De la même manière, sur le PC de référence on exportera la base dans une base de données MySQL. Sur l’autre poste, on veillera à avoir exactement la même version de digikam et on configurera l’accès à la base de donnée qu’on a configuré préalablement sur le poste de référence.

Configuration de la base de données MySQL sous digikam

Dans Collections, comme pour kodi, le répertoire contenant les photos du PC de référence doit être identique et partagé par montage NFS et le chemin doit être identique. Ce n’est pas fini, car en consultant via phpMyAdmin l’entrée albumroots on voit que le répertoire contenant les photos est identifié par son uuid comme cela volumeid:?uuid=35f2d2e0-f3f0-4bc1-a045-b7eb45261962&fileuuid=f5da6cf3-983b-4c9e-bced-ba341864e317. Du coup sur l’autre poste les photos sont inaccessibles. Sous phpMyAdmin, on tapera la commande SQL suivante :

UPDATE AlbumRoots SET identifier='volumeid:?path=/germaine/sauvegarde-mana/photos', specificPath='/' WHERE id=1;

On mentionnera bien sûr le chemin commun du répertoire contenant les photos.

Passage à Digikam 7.10.0

Je suis passé à la dernière version 7.10.0 du gestionnaire de photos évolué digikam que j’avais déjà évoqué dans un précédent post. Mais auparavant j’ai upgradé ma Mageia 9 cauldron à la version de ce jour. Ça s’est fait sans trop de difficultés mis à part que mon répertoire /usr de 26Go devient trop petit, j’ai dû déplacer /usr/share sur une autre partition et créer un lien. Pour la mise à jour du noyau et du driver nvidia qui a toujours été une difficulté, ça s’est passé sans encombre, au reboot en mode normal, il a reconstruit le module et l’interface graphique s’est lancée dans la foulée sans erreur particulière.

Mais revenons à digikam, j’ai buté sur la compilation pour une sombre histoire de référence indéfinie avec cette erreur

/usr/lib64/libQt5WebEngineCore.so.5 : référence indéfinie vers « av_stream_get_first_dts@LIBAVFORMAT_59 »

Je me doutais qu’il pouvait y avoir un mélange entre mon FFMPEG perso compilé sous /usr/local/lib et celui par défaut de ma Mageia sous /usr/lib64, mais que ce soit l’un ou l’autre j’avais toujours la même erreur. Je me suis rabattu sur la version flatpak mais il manquait la clé GPG. Finalement j’ai installé la version appimage directement disponible sur le site de digikam.

Entre la dernière version 7.8.0 qui tournait sur ma mageia 8, il n’y a pas d’évolutions majeures, ça reste une version de maintenance en attendant la version 8. Voici une copie d’écran avec le tri par la position GPS contenue dans les informations exif.

J’en ai profité pour virer le cairo dock de mon environnement de bureau XFCE, j’ai opté pour deux tableaux de bord fixes à droite et à gauche, ça me permet de couvrir davantage l’écran de bas en haut et j’y gagne en confort de visualisation. On notera également le thème sombre de digikam plutôt sympa.

Mise à jour et migration de digikam

J’achève la migration de mon serveur Dell PowerEdge vers mon mini serveur Lenovo M92P avec la migration de Digikam. Pour mémoire j’avais fait un post pour présenter ce logiciel de gestion évoluée de photos.

digikam avec les photos géolocalisés

Jusqu’à présent mon serveur Dell stockait à la fois les photos mais également les bases de données sur lesquelles se repose digikam pour stocker toutes les informations, pour cela je me reposais sur MariaDB. J’ai choisi de déplacer mes photos sur un PC de mon réseau et les bases sur mon nouveau mini serveur, de fait digikam ne peut fonctionner que sur ce PC et je n’ai pas prévu pour l’instant de fonctionnement en réseau si tant est que ça soit possible.

Pour migrer mes bases, sur mon serveur Dell sous phpMyAdmin j’ai exporté mes bases digikam à savoir digikam, digikam_vignettes (qui fait presque 2Go), digikam_similarites et digikam_visages.
Sur le nouveau serveur, j’ai importé les bases en ligne de commande:

 mysql -u olivier -p digikam < 20221030-digikam.sql
 mysql -u olivier -p digikam_vignettes < 20221030-digikam_vignettes.sql
 mysql -u olivier -p digikam_similarites < 20221030-digikam_similarites.sql
 mysql -u olivier -p digikam_visages < 20221030-digikam_visages.sql

j’ai modifié sous phpMyAdmin les champs volumeid, specificPath de la table AlbumRoots et de la base digikam pour lui indiquer le nouveau chemin des photos. Le serveur Dell éteint, au premier lancement de digikam, il mouline en l’attendant indéfiniment, il suffit d’annuler et la fenêtre de connexion au serveur s’affiche, il suffit de rentrer simplement les paramètres de connexion du nouveau serveur. Et c’est tout.

A vrai dire je me suis compliqué la vie pour rien car digikam intègre une option de migration de base de données que j’ai découvert un peu tard ! Elle est accessible via le menu Configuration->Migration d’une base de donnée.

Migration de base de données sous digikam

Sinon je suis passé à la dernière version 7.8.0, comme d’habitude je l’ai installé à partir des sources. Dans le répertoire digikam-7.8.0, on édite d’abord le fichier bootstrap.linux et on modifie ainsi les lignes suivantes si on veut espérer avoir une version en français.

      -DDIGIKAMSC_CHECKOUT_PO=ON \
      -DDIGIKAMSC_CHECKOUT_DOC=ON \
      -DDIGIKAMSC_COMPILE_PO=ON \

Ensuite on tape

vi bootstrap.linux

voilà le résultat

-- Top level compilation configuration for digikam
-- 
-- digikam will be compiled....................... YES
-- Extract application translations files......... YES
-- Extract documentation translations files....... YES
-- Translations will be compiled.................. YES
-- Handbooks will be compiled..................... NO
-- Tests code will be compiled.................... YES
-- ----------------------------------------------------------------------------------
-- Check dependencies for digikam version 7.8.0
-- 
-- Could NOT find KF5Sane: found neither KF5SaneConfig.cmake nor kf5sane-config.cmake
-- KF5::KIOWidgets include dirs: /usr/include/KF5/KIOWidgets;/usr/include/KF5
-- Libjpeg version: 84
-- Using libjpeg sub-directory: libjpeg/84
-- Found lcms version 2.13, /usr/lib64/liblcms2.so
-- HEIF_FOUND        = TRUE
-- HEIF_INCLUDE_DIRS = /usr/include
-- HEIF_LIBRARIES    = /usr/lib64/libheif.so
-- HEIF_DEFINITIONS  =
-- HEIF_VERSION      = 1.12.0
-- X265_FOUND        = TRUE
-- X265_INCLUDE_DIRS = /usr/local/include
-- X265_LIBRARIES    = /usr/local/lib/libx265.so
-- X265_DEFINITIONS  =
-- FFMPEG_FOUND        = TRUE
-- FFMPEG_INCLUDE_DIRS = /usr/local/include
-- FFMPEG_LIBRARIES    = /usr/local/lib/libavcodec.so;/usr/local/lib/libavdevice.so;/usr/local/lib/libavfilter.so;/usr/local/lib/libavformat.so;/usr/local/lib/li
bavutil.so;/usr/local/lib/libswscale.so
-- FFMPEG_DEFINITIONS  =
-- QtAV search path: /lib64/cmake
-- Could NOT find QtAV (missing: QTAV_LIBRARIES QTAV_INCLUDE_DIRS)
-- QtAV_FOUND       = FALSE
-- QtAV_INCLUDE_DIR = QTAV_CORE_INCLUDE_DIR-NOTFOUND QTAV_WIDGETS_INCLUDE_DIR-NOTFOUND
-- QtAV_LIBRARIES   = QTAV_CORE_LIBRARY-NOTFOUND;QTAV_WIDGETS_LIBRARY-NOTFOUND
-- QtAV_VERSION     =
-- ENABLE_MEDIAPLAYER option is enabled but QtAV cannot be found. Media player support is disabled.
-- OpenCV Root directory is: /usr/local/lib64/cmake/opencv4
-- OpenCV: Found version 4.6.0 (required: 3.3.0)
-- OpenCV headers: /usr/local/include/opencv4
-- OpenCV libs   : opencv_core;opencv_objdetect;opencv_imgproc;opencv_imgcodecs;opencv_dnn;opencv_flann
-- Marble_FOUND       = TRUE
-- MARBLE_INCLUDE_DIR = /usr/include
-- MARBLE_LIBRARIES   = /usr/lib64/libmarblewidget-qt5.so
-- ASTRO_LIBRARIES    = /usr/lib64/libastro.so
-- FIND IMAGEMAGICK API Magick++
-- -DMAGICKCORE_HDRI_ENABLE=1
-- -DMAGICKCORE_QUANTUM_DEPTH=16
-- FIND IMAGEMAGICK API MagickCore
-- -DMAGICKCORE_HDRI_ENABLE=1
-- -DMAGICKCORE_QUANTUM_DEPTH=16
-- FIND IMAGEMAGICK API MagickWand
-- -DMAGICKCORE_HDRI_ENABLE=1
-- -DMAGICKCORE_QUANTUM_DEPTH=16
-- ImageMagick_FOUND:                      TRUE
-- ImageMagick_VERSION_STRING:             7.1.0-51
-- ImageMagick_EXECUTABLE_DIR:             /bin
-- ImageMagick_INCLUDE_DIRS:               /usr/include/ImageMagick-7
-- ImageMagick_LIBRARIES:                  /usr/lib64/libMagick++.so;/usr/lib64/libMagickCore.so;/usr/lib64/libMagickWand.so
-- ImageMagick_DEFINITIONS:                -DMAGICKCORE_HDRI_ENABLE=1;-DMAGICKCORE_QUANTUM_DEPTH=16
-- ImageMagick_Magick++_INCLUDE_DIRS:    /usr/include/ImageMagick-7
-- ImageMagick_Magick++_LIBRARY:         /usr/lib64/libMagick++.so
-- ImageMagick_Magick++_DEFINITIONS:     -DMAGICKCORE_HDRI_ENABLE=1;-DMAGICKCORE_QUANTUM_DEPTH=16
-- ImageMagick_MagickCore_INCLUDE_DIRS:    /usr/include/ImageMagick-7
-- ImageMagick_MagickCore_LIBRARY:         /usr/lib64/libMagickCore.so
-- ImageMagick_MagickCore_DEFINITIONS:     -DMAGICKCORE_HDRI_ENABLE=1;-DMAGICKCORE_QUANTUM_DEPTH=16
-- ImageMagick_MagickWand_INCLUDE_DIRS:    /usr/include/ImageMagick-7
-- ImageMagick_MagickWand_LIBRARY:         /usr/lib64/libMagickWand.so
-- ImageMagick_MagickWand_DEFINITIONS:     -DMAGICKCORE_HDRI_ENABLE=1;-DMAGICKCORE_QUANTUM_DEPTH=16
-- OpenGL found;               TRUE
-- OpenGL GLU extension found; YES
-- OpenGL Qt5 found;           1
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Looking for ccache...
-- ccache program found: CCACHE_FOUND-NOTFOUND...
-- libgphoto2 found    : TRUE
-- libgphoto2 version  : 2.5.29
-- libgphoto2 includes : /usr/include/gphoto2
-- libgphoto2 libraries: /usr/lib64/libgphoto2.so;/usr/lib64/libgphoto2_port.so;/usr/lib64/libusb-1.0.so
-- libgphoto2 API version >= 2.5
-- liblensfun: Found version 0.3.95.0 (required: 0.2.6.0)
-- 
-- --------------------------------------------------
-- digiKam RawEngine dependencies checks:
-- 
-- Looking for OpenMP
-- OpenMP found with CXX flags: -fopenmp
-- RawEngine will be compiled with OpenMP support
-- RawEngine will be compiled with RedCine codec
-- Looking for LibJpeg
-- RawEngine will be compiled with DNG lossy codec
-- Looking for PThreads
-- --------------------------------------------------
-- 
-- 
-- ----------------------------------------------------------------------------------
--  digiKam 7.8.0 dependencies results   <https://www.digikam.org>
-- 
--  MySQL Database Support will be compiled.. YES (optional)
--  MySQL Internal Support will be compiled.. YES (optional)
--  DBUS Support will be compiled............ YES (optional)
--  App. Style Support will be compiled...... YES (optional)
--  QWebEngine Support will be compiled...... YES (optional)
--  libboostgraph found...................... YES
--  libexiv2 found........................... YES
--  libexpat found........................... YES
--  libjpeg found............................ YES
--  libkde found............................. YES
--  liblcms found............................ YES
--  libopencv found.......................... YES
--  libpng found............................. YES
--  libpthread found......................... YES
--  libqt found.............................. YES
--  libtiff found............................ YES
--  bison found.............................. YES (optional)
--  doxygen found............................ NO  (optional)
--  digiKam will be compiled without API documentation building support.
--  Please install the doxygen (version >= 1.8.0) development package.
-- 
--  ccache found............................. NO  (optional)
--  digiKam will be compiled without CCACHE build support.
--  Please install the ccache (version >= 3.0.0) development package.
-- 
--  flex found............................... YES (optional)
--  libakonadicontact found.................. NO  (optional)
--  digiKam will be compiled without KDE desktop address book support.
--  Please install the libakonadicontact (version >= 4.89.0) development package.
-- 
--  libmagick++ found........................ YES (optional)
--  libeigen3 found.......................... YES (optional)
--  libgphoto2 found......................... YES (optional)
--  libjasper found.......................... YES (optional)
--  libkcalendarcore found................... YES (optional)
--  libkfilemetadata found................... NO  (optional)
--  digiKam will be compiled without KDE desktop file metadata support.
--  Please install the libkfilemetadata (version >= 5.5.0) development package.
-- 
--  libkiconthemes found..................... YES (optional)
--  libkio found............................. YES (optional)
--  libknotifications found.................. YES (optional)
--  libknotifyconfig found................... YES (optional)
--  libksane found........................... NO  (optional)
--  digiKam will be compiled without flat scanners support.
--  Please install the libksane (version >= 5.5.0) development package.
-- 
--  liblensfun found......................... YES (optional)
--  liblqr-1 found........................... YES (optional)
--  libmarble found.......................... YES (optional)
--  libqtav found............................ NO  (optional)
--  digiKam will be compiled without Media Player support.
--  Please install the libqtav (version >= 1.12.0) development package.
-- 
--  libthreadweaver found.................... YES (optional)
--  libxml2 found............................ YES (optional)
--  libxslt found............................ YES (optional)
--  libheif found............................ YES (optional)
--  libx265 found............................ YES (optional)
--  OpenGL found............................. YES (optional)
--  libqtxmlpatterns found................... YES (optional)
--  digiKam can be compiled.................. YES
-- ----------------------------------------------------------------------------------
-- 
-- Using ccache to speed-up compilations..... NO
-- Remove GCC compiler option -pedantic from /usr/local/linux/photos/digikam-7.8.0/core
-- Remove GCC compiler option -Wsuggest-override from /usr/local/linux/photos/digikam-7.8.0/core
-- Remove GCC compiler option -Wcast-align from /usr/local/linux/photos/digikam-7.8.0/core
-- Remove GCC compiler option -Wzero-as-null-pointer-constant from /usr/local/linux/photos/digikam-7.8.0/core
-- Disable GCC compiler option -Wno-deprecated-copy from /usr/local/linux/photos/digikam-7.8.0/core
-- Disable GCC compiler option -Wno-deprecated from /usr/local/linux/photos/digikam-7.8.0/core/libs/metadataengine
-- Remove GCC compiler option -Wcast-align from /usr/local/linux/photos/digikam-7.8.0/core/libs/pgfutils
-- Remove GCC compiler option -Wzero-as-null-pointer-constant from /usr/local/linux/photos/digikam-7.8.0/core/libs/pgfutils
-- Remove GCC compiler option -pedantic from /usr/local/linux/photos/digikam-7.8.0/core/libs/dplugins/webservices
-- Remove GCC compiler option -Wundef from /usr/local/linux/photos/digikam-7.8.0/core/libs/rawengine
-- Remove GCC compiler option -Werror=return-type from /usr/local/linux/photos/digikam-7.8.0/core/libs/rawengine
-- WallPaper plugin will be compiled......... YES
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/linux/photos/digikam-7.8.0
Now run make in /usr/local/linux/photos/digikam-7.8.0/build.

On peut déplorer que digikam intègre QtAV qui permet de visualiser les vidéos qui n’est plus maintenu, j’ai bien tenté de patcher le code, mais c’est très lourdingue et j’ai laissé tomber. On peut découvrir par ici que les développeurs ont choisi d’intégrer leur propre code à partir des versions 8.X, en attendant il faudra s’en passer ou rester aux versions 4.X de FFMPEG.

On termine ensuite par un classique make puis en tant que root make install

Cette version m’a permis de découvrir le format HEIF qui est le nouveau standard à la mode en passe de supplanter le format jpeg, il a été développé en parallèle du format HEVC pour la vidéo par le même groupe de travail ISO Moving Picture Experts Group (MPEG). Des constructeurs de renom ont maintenant choisi de l’adopter comme format d’enregistrement par défaut comme Apple, Canon ou Sony. Comme pour le HEVC le rapport taille/qualité est bien meilleur, vous trouverez par ici un exposé plus précis. Petit bémol il dépend de plusieurs brevets et n’est pas vraiment libre, ça n’empêche pas digikam de le prendre en compte, ne possédant pas d’appareil générant des HEIF je ne saurais dire quelles sont les limitations.

Digikam gestion de photos évoluée

L’autre jour j’étais avec un pote, Apple addicted, qui me disait qu’il gérait ses photos avec Photos iCloud et qu’avec cet outil il bénéficiait de la reconnaissance faciale et d’une manière générale de certaines fonctions avancées qui lui permettent de plus facilement indexer, classer et retrouver ses photos. Alors bien sûr j’ai été piqué au vif, comment ça, sous Linux je ne serais pas capable de faire la même chose !

Touché dans mon orgueil, ni une, ni deux, je me mets à chercher un équivalent sous linux, après une recherche rapide, il semblerait que digikam offre ce genre de fonctionnalités. En teaser voilà ce que ça donne quand on sélectionne quelques personnes dans le Filtre d’étiquettes de visage, il n’affichera que les photos de l’album où apparaissent les personnes sélectionnées.

Jusqu’à présent je me contentais de gérer ma photos sous forme d’arborescence par année avec un système de nommage du style année-mois-jour-libellé qui permet de faire des tris. Je trouvais les outils comme digikam usine à gaz et je me satisfaisais amplement d’un outil simple comme geeqie.

Continuer la lecture de Digikam gestion de photos évoluée