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.

J’ai installé digikam en utilisant le package standard de ma mageia 8, mais malheureusement quand on lance la détection de visages, ça plante avec une erreur de symbole indéfinie. Je ne m’attarde pas et je supprime illico le package et je pars dans la compilation de la dernière version 7.3.0 que je retrouve sur le site de digikam. Je décompresse l’archive en tapant :

tar xvf digikam-7.3.0.tar.xz

dans le répertoire digikam-7.3.0 ainsi obtenu, j’ai modifié le fichier bootstrap.linux pour rajouter ON aux lignes suivantes, sinon digikam restera désespérément en anglais.

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

Maintenant j’ai installé les packages suivants : marble, marble-data, sqlite3-tools, lib64kf5threadweaver-devel, marble-devel, lib64lensfun-devel et lib64kf5calendarcore-devel. Je n’ai pas installé lib64qtav-devel car j’ai une version tuné de ffmpeg et ça risquait de mettre le bazar sur mon système. De fait je ne dispose pas du player vidéo embarqué. On tape maintenant ./bootstrap.linux voilà le résultat :

Qt5     Install Path : /usr
digiKam Install Path : /usr
CMake binary         : cmake
Build Directory      : /usr/local/linux/photos/digikam-7.3.0/build
-- CMake version: cmake version 3.19.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

-- ----------------------------------------------------------------------------------
-- Starting CMake configuration for digikam
-- 
-- Found Ruby: /usr/bin/ruby (found suitable version "2.7.2", minimum required is "1.8.0") 
-- Found Subversion: /usr/bin/svn (found version "1.14.1") 
-- Extract application translation files from git repositories. Please wait, it can take a while...
af ar az be bg bn br bs ca cs csb cy da de el en_GB eo es et eu fa fi fo fr fy ga gl ha he hi hr hsb hu id is it ja ka kk km ko ku lb lo lt lv mi mk mn ms mt nb nds ne nl nn nso oc pa pl pt pt_BR ro ru rw se sk sl sq sr sr@Latn ss s
v ta te tg th tr tt uk uz uz@cyrillic ven vi wa xh zh_CN zh_HK zh_TW zu 
-- Application translation files extraction done.
-- Extract documentation translation files from git repositories. Please wait, it can take a while...
-- NOTE: (u) want mean uncomplete translations files, which will be removed from compilation.
The authenticity of host 'invent.kde.org (195.201.182.103)' can't be established.
ECDSA key fingerprint is SHA256:UutSIkXdSGgyxQxL35dDEEAD2Owel+zEdKZ5I/JMqrA.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
Host key verification failed.
fatal: L'hôte distant a fermé la connexion de manière inattendue
tar: Ceci ne ressemble pas à une archive de type « tar »
tar: Arrêt avec code d'échec à cause des erreurs précédentes
af ar az be bg bn br bs ca cs csb cy da de el en_GB eo es et eu fa fi fo fr fy ga gl ha he hi hr hsb hu id is it ja ka kk km ko ku lb lo lt lv mi mk mn ms mt nb nds ne nl nn nso oc pa pl pt pt_BR ro ru rw se sk sl sq sr sr@Latn ss s
v ta te tg th tr tt uk uz uz@cyrillic ven vi wa xh zh_CN zh_HK zh_TW zu 
The authenticity of host 'invent.kde.org (195.201.182.103)' can't be established.
ECDSA key fingerprint is SHA256:UutSIkXdSGgyxQxL35dDEEAD2Owel+zEdKZ5I/JMqrA.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
Host key verification failed.
fatal: L'hôte distant a fermé la connexion de manière inattendue
tar: Ceci ne ressemble pas à une archive de type « tar »
tar: Arrêt avec code d'échec à cause des erreurs précédentes
af ar az be bg bn br bs ca cs csb cy da de el en_GB eo es et eu fa fi fo fr fy ga gl ha he hi hr hsb hu id is it ja ka kk km ko ku lb lo lt lv mi mk mn ms mt nb nds ne nl nn nso oc pa pl pt pt_BR ro ru rw se sk sl sq sr sr@Latn ss s
v ta te tg th tr tt uk uz uz@cyrillic ven vi wa xh zh_CN zh_HK zh_TW zu 
-- Documentation translation files extraction done.
-- Main one documentation directory is missing. Compilation of documentation is disabled...
-- ----------------------------------------------------------------------------------
-- 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.3.0
-- 
-- Could NOT find Qt5XmlPatterns (missing: Qt5XmlPatterns_DIR)
CMake Warning at /usr/lib64/cmake/Qt5/Qt5Config.cmake:39 (message):
  Failed to find Qt5 component "XmlPatterns" config file at
  "/usr/lib64/cmake/Qt5XmlPatterns/Qt5XmlPatternsConfig.cmake"
Call Stack (most recent call first):
  core/CMakeLists.txt:73 (find_package)


-- Could NOT find KF5AkonadiContact: found neither KF5AkonadiContactConfig.cmake nor kf5akonadicontact-config.cmake 
-- Could NOT find KF5Contacts: found neither KF5ContactsConfig.cmake nor kf5contacts-config.cmake 
-- 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.10, /usr/lib64/liblcms2.so
-- 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/libavutil.so;/usr/local/lib/libswscale.so
-- FFMPEG_DEFINITIONS  = 
-- QtAV search path: /usr/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.5.2 (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.0.10-62
-- ImageMagick_EXECUTABLE_DIR:         	/usr/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
-- Looking for ccache...
-- ccache program found: CCACHE_FOUND-NOTFOUND...
-- libgphoto2 found    : TRUE
-- libgphoto2 version  : 2.5.26
-- 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.2.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.3.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............................ YES (optional)
--  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................... YES (optional)
--  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)
--  libx265 found............................ YES (optional)
--  OpenGL found............................. YES (optional)
--  libqtxmlpatterns found................... NO  (optional)
--  digiKam will be compiled without Rajce tool support.
--  Please install the libqtxmlpatterns (version >= 5.9.0) development package.
-- 
--  digiKam can be compiled.................. YES
-- ----------------------------------------------------------------------------------
-- 
-- Using ccache to speed-up compilations..... NO
-- Remove GCC compiler option -pedantic from /usr/local/linux/photos/digikam-7.3.0/core
-- Remove GCC compiler option -Wsuggest-override from /usr/local/linux/photos/digikam-7.3.0/core
-- Remove GCC compiler option -Wcast-align from /usr/local/linux/photos/digikam-7.3.0/core
-- Remove GCC compiler option -Wzero-as-null-pointer-constant from /usr/local/linux/photos/digikam-7.3.0/core
-- Disable GCC compiler option -Wno-deprecated-copy from /usr/local/linux/photos/digikam-7.3.0/core
-- Disable GCC compiler option -Wno-deprecated from /usr/local/linux/photos/digikam-7.3.0/core/libs/metadataengine
-- Remove GCC compiler option -Wcast-align from /usr/local/linux/photos/digikam-7.3.0/core/libs/pgfutils
-- Remove GCC compiler option -Wzero-as-null-pointer-constant from /usr/local/linux/photos/digikam-7.3.0/core/libs/pgfutils
-- Remove GCC compiler option -pedantic from /usr/local/linux/photos/digikam-7.3.0/core/libs/dplugins/webservices
-- Remove GCC compiler option -Wundef from /usr/local/linux/photos/digikam-7.3.0/core/libs/rawengine
-- Remove GCC compiler option -Werror=return-type from /usr/local/linux/photos/digikam-7.3.0/core/libs/rawengine
-- WallPaper plugin will be compiled......... YES
-- Doxygen is found.......................... TRUE
-- Graphviz Dot is found..................... YES
-- To build API documentation use 'make doc'
-- Configuring done
-- Generating done

-- Build files have been written to: /usr/local/linux/photos/digikam-7.3.0/build
Now run make in /usr/local/linux/photos/digikam-7.3.0/build.

on tape ensuite

cd build
make

et en tant que root make install. C’est terminé !

Rentrons maintenant dans le vif du sujet, je vous passe le détail de la configuration, il faut essentiellement pointer sur le ou les répertoires où se trouvent les photos, et un répertoire où on placera la base de données de digikam, pour le reste j’ai laissé tous les paramètres par défaut. Il existe un onglet vertical nommé Personnes, il faut sélectionner Détecter les visages et c’est parti en cliquant sur le bouton Analyser une collection pour chercher des visages. J’ai une collection de près de 9000 photos, donc autant dire que ça prend un certain, ça a tourné à peu près toute la nuit et un peu plus encore. Vous vous retrouvez ensuite avec une collection de visages dans la catégorie Inconnus, la détection marche remarquablement bien avec quelques rares faux positifs comme des statues (ci-dessous), des tableaux ou des animaux (des pandas !).

Digikam détection de visages

Commence alors une manip assez longue, il faut identifier les personnes et les nommer, on va créer ainsi toutes nos personnes qui apparaitront dans l’espace à gauche sous Inconnus. Pour chaque personne il faut au moins une quinzaine d’occurrences de la personne pour que digikam puisse le reconnaitre. Bien sûr, plus il y a d’occurrences meilleurs sont les résultats.

De fil en aiguille, on arrive avec une liste de personnes, avec un certain nombre d’occurrence du visage de chaque personne sélectionnée manuellement.

C’est là que ça va devenir intéressant, à partir de cette base, il va identifier comme un grand les personnes et compléter la reconnaissance faciale. Pour cela il suffit de sélectionner Reconnaitre les visages puis Analyser une collection pour chercher des visages. C’est beaucoup plus rapide que pour la détection des visages, ça prend à peine quelques minutes pour ma collection de quelques milliers de photos. Dans le cas ci-dessous il va détecter automatiquement les occurrences des visages des personnes qui apparaissent en gras avec le nombre de nouveaux en gras. Ça marche plutôt bien avec très peu de déchets, c’est vraiment bluffant.

Les visages à confirmer sont entourés de vert pour chaque personne, si c’est la bonne personne on valide, sinon on peut indiquer le bon nom (éventuellement en créant une personne) ou les ignorer purement et simplement en cliquant sur le -. On retrouvera les personnes ignorées dans la catégorie Ignoré et ne seront plus utilisées pour les recherches futures. Bien sûr le système est itératif, on peut recommencer autant de fois que désiré et au fur et à mesure l’algorithme de recherche s’affine et devient de plus en plus performant en fonction de la collection de visage confirmée.

A noter que dans la catégorie Inconnus on peut retrouver des étiquettes pour des visages qui ne correspondent pas à la personne, en fait au fil des itérations il va identifier des personnes sur la photo et rajouter leur étiquette dans la photo. On peut donc très bien avoir des étiquettes qui ne correspondent pas à la personne, en passant en mode Aperçu on visualise la photo en entier et on pourra voir que la personne de l’étiquette et bien sur la photo.

Digikam offre bien d’autres fonctionnalités comme la localisation, la détection de doublons ou les images similaires, j’y reviendrai dans des futurs posts.

Laisser un commentaire