Bug 386299 - Add ExifTool based metadata viewer as XnView
Summary: Add ExifTool based metadata viewer as XnView
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Metadata-ExifTool (show other bugs)
Version: 5.8.0
Platform: Other All
: NOR wishlist
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-10-28 21:37 UTC by stefan.mueller.83
Modified: 2021-04-21 21:25 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 7.3.0


Attachments
Metadata sidebar (171.62 KB, image/png)
2017-10-28 21:42 UTC, stefan.mueller.83
Details
XnView ExifTool Sidebar (78.57 KB, image/png)
2017-10-28 21:42 UTC, stefan.mueller.83
Details

Note You need to log in before you can comment on or make changes to this bug.
Description stefan.mueller.83 2017-10-28 21:37:52 UTC
The reason why I come up with that digiKam doesn't show the in the jpeg stored face tag related tags in metadata sidebar although face tag frame is shown and XnView shows all related metadata. 
In addition it would be helpful to verify the tag write process with a third party tool.
Comment 1 stefan.mueller.83 2017-10-28 21:42:01 UTC
Created attachment 108613 [details]
Metadata sidebar
Comment 2 stefan.mueller.83 2017-10-28 21:42:11 UTC
Created attachment 108614 [details]
XnView ExifTool Sidebar
Comment 3 Maik Qualmann 2017-10-29 08:52:25 UTC
DigiKam also displays this information. In the metadata sidebar, click the filter icon in front of the search field and select no filter.

Maik
Comment 4 caulier.gilles 2017-10-29 09:21:31 UTC
Maik,

If i understand, Xnview has a metadata viewer as digiKam (Exiv2) and a special view using ExifTool in background, in goal to compare tags i think...

If i'm right, the way to control Exiftools through C++ exist but it will not easy to wrap with digiKam classes.

Gilles
Comment 5 stefan.mueller.83 2017-10-29 14:11:51 UTC
@Maik
thx for the hint but that another setting if you have to be aware of.
Digikam highly configurable what is very good on the one hand but makes it difficult to get familiar with it on the other hand.

@Gilles
I've got the same impression.
That it is an excellent approach to double check writing/reading metadata. If you follow the digikam user mailing list you get the impression that every second to third topic is about lost/incomplete metadata processing. Exiftools would be a great enhancement to cross check all metadata related operations. 
In addition you see all metadata in a single sidebar, so you don't have to browse through 4 different sidebars.
Comment 6 stefan.mueller.83 2018-02-28 10:05:59 UTC
any chance that this feature will be implemented in Digikam 6.0
Comment 7 caulier.gilles 2021-04-11 09:08:47 UTC
Hi Stefan,

I start to implement a wrapper based on ExifTool to help Exiv2 based metadata parser with non support image format.

For the moment code is in construction as CLI test tool but advance well.

https://invent.kde.org/graphics/digikam/-/tree/master/core/tests/metadataengine/exiftool

If results are positive, we plan to integrate this wrapper in 7.3.0 to read metadata with ExifTool if necessary.

ExifTool will not become the main metadat parser for digiKam, but an alternative to use in specific cases.

Gilles Caulier
Comment 8 caulier.gilles 2021-04-17 09:30:22 UTC
Hi Maik,

* I experimented and review code from 2 ExifTool parser:

- the official C++ version from ExifTool author:

https://exiftool.org/cpp_exiftool/

This one use a low level C ANSI call internally and capture meta information using a PHP compliant container. It's limited to capture non binary tags values. So typically to get and set preview, markernote, icc profile, xmp packet, it's not possible. To evolve the C ANSI code is a puzzle. I tried, and after to reformat all source code to understand the structure, i admit this wrapper is not adapted for DK. Also this code do not compile under Windows with MSVC, only MinGW. The advantage to this wrapper is the speed and the capability to chain requests with a pending instance of ExifTool in memory.

- this recent Qt wrapper from Github :

https://github.com/philvl/ZExifTool

Compatible with Qt5 and Qt6, this one use a json container to handle ExifTool information. This code is more simple as all the json parsing is delegate to Qt. It's definitively the best way to do, event if code is a little bit slower the official C++ wrapper. It can also chain request to ExifTool, but it use Qt signal slot mechanism with QProcess, which is less adapted to DMetadata integration. So is write a parser class to delegate and capture signal event from the core class with a dedicated event loop and now the code can be streamlined in DMetadata in a synchronous run-time. This code is fully portable.

* I write 2 unit tests : one to display the ExifTool parsing results with Exiv2 tags conversion, and another one to backport ExifTool tags to Exiv2 with DMetadata container. Both work as expected, even if improvements still in my TODO list.

* I write a ExifTool to Exiv2 tags converter (and vis-versa). Basically, one main hash table need to be populated to know the correspondence. I started to write the tags map one by one, and it really a huge task to achieve. It work but it's not the right way to do, as typically, the main tag "name" is at 80% the same between ExifTool and Exiv2:

ExifTool tag naming scheme : group0:group1:group2:name
Exiv2 tag naming scheme    : family.group.name

Take a look to the current hard-coded Exif tags list for ex :

https://invent.kde.org/graphics/digikam/-/blob/c761d5550dc02edefbf003f8e9deabba1196021e/core/tests/metadataengine/exiftool/common/exiftooltranslator_exif.cpp

A better way is to write generic rules to populate the hash table automatically which will support 80% of ExifTool tags compatible with Exiv2. For the 20% left, custom rules must be written to handle exceptions. A unit test to validate conversion and to found new exception must be written.

Voilà, i continue to work on this ExifTool wrapper to at least provide a read metadata mechanism for 7.3.0 or 7.4.0

My best

Gilles
Comment 9 caulier.gilles 2021-04-18 19:29:16 UTC
Git commit c9dc01b30ced031242b98a87271183fe56784442 by Gilles Caulier.
Committed on 18/04/2021 at 19:26.
Pushed by cgilles into branch 'master'.

Move ExifTool wrapper to digiKam core for a future use as simple extra info viewer in metadata sidebar
Exiv2 translator is not yet used, and no DMetadata integration is done.
We will do it step by step as ExifTool to Exiv2 tags name conversion is a big puzzle.

M  +9    -0    core/libs/metadataengine/CMakeLists.txt
M  +1    -0    core/libs/metadataengine/README
R  +9    -0    core/libs/metadataengine/exiftool/exiftoolparser.cpp [from: core/tests/metadataengine/exiftool/qt/exiftoolparser.cpp - 098% similarity]
R  +5    -1    core/libs/metadataengine/exiftool/exiftoolparser.h [from: core/tests/metadataengine/exiftool/qt/exiftoolparser.h - 096% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftoolprocess.cpp [from: core/tests/metadataengine/exiftool/qt/exiftoolprocess.cpp - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftoolprocess.h [from: core/tests/metadataengine/exiftool/qt/exiftoolprocess.h - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator.cpp [from: core/tests/metadataengine/exiftool/common/exiftooltranslator.cpp - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator.h [from: core/tests/metadataengine/exiftool/common/exiftooltranslator.h - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator_exif.cpp [from: core/tests/metadataengine/exiftool/common/exiftooltranslator_exif.cpp - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator_ignoredgroups.cpp [from: core/tests/metadataengine/exiftool/common/exiftooltranslator_ignoredgroups.cpp - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator_iptc.cpp [from: core/tests/metadataengine/exiftool/common/exiftooltranslator_iptc.cpp - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator_p.cpp [from: core/tests/metadataengine/exiftool/common/exiftooltranslator_p.cpp - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator_p.h [from: core/tests/metadataengine/exiftool/common/exiftooltranslator_p.h - 100% similarity]
R  +0    -0    core/libs/metadataengine/exiftool/exiftooltranslator_xmp.cpp [from: core/tests/metadataengine/exiftool/common/exiftooltranslator_xmp.cpp - 100% similarity]
M  +41   -9    core/tests/metadataengine/exiftool/CMakeLists.txt
D  +0    -36   core/tests/metadataengine/exiftool/cpp/CMakeLists.txt
D  +0    -3    core/tests/metadataengine/exiftool/cpp/README
D  +0    -1421 core/tests/metadataengine/exiftool/cpp/exiftoolcore.cpp
D  +0    -129  core/tests/metadataengine/exiftool/cpp/exiftoolcore.h
D  +0    -175  core/tests/metadataengine/exiftool/cpp/exiftoolloader_cli.cpp
D  +0    -305  core/tests/metadataengine/exiftool/cpp/exiftoolpipe.cpp
D  +0    -64   core/tests/metadataengine/exiftool/cpp/exiftoolpipe.h
D  +0    -80   core/tests/metadataengine/exiftool/cpp/exiftooltaginfo.cpp
D  +0    -58   core/tests/metadataengine/exiftool/cpp/exiftooltaginfo.h
R  +0    -0    core/tests/metadataengine/exiftool/qexiftoolexport_cli.cpp [from: core/tests/metadataengine/exiftool/qt/qexiftoolexport_cli.cpp - 100% similarity]
R  +0    -0    core/tests/metadataengine/exiftool/qexiftoolloader_cli.cpp [from: core/tests/metadataengine/exiftool/qt/qexiftoolloader_cli.cpp - 100% similarity]
R  +0    -0    core/tests/metadataengine/exiftool/qexiftooloutput_cli.cpp [from: core/tests/metadataengine/exiftool/qt/qexiftooloutput_cli.cpp - 100% similarity]
R  +0    -0    core/tests/metadataengine/exiftool/qexiftoolxmldb_cli.cpp [from: core/tests/metadataengine/exiftool/qt/qexiftoolxmldb_cli.cpp - 100% similarity]
D  +0    -78   core/tests/metadataengine/exiftool/qt/CMakeLists.txt

https://invent.kde.org/graphics/digikam/commit/c9dc01b30ced031242b98a87271183fe56784442
Comment 10 caulier.gilles 2021-04-18 21:17:43 UTC
Git commit 15bce2a888a41d1ca08b3fe28d1a5caa6294ba7d by Gilles Caulier.
Committed on 18/04/2021 at 21:15.
Pushed by cgilles into branch 'master'.

Introduce the new ExifTool information viewer from Metadata sidebar tab.

M  +4    -0    core/libs/metadataengine/exiftool/exiftoolparser.cpp
M  +1    -1    core/libs/properties/import/importitempropertiessidebar.cpp
M  +39   -18   core/libs/properties/itempropertiesmetadatatab.cpp
M  +1    -1    core/libs/properties/itempropertiesmetadatatab.h
M  +1    -1    core/libs/properties/itempropertiessidebardb.cpp
M  +1    -0    core/libs/widgets/CMakeLists.txt
A  +151  -0    core/libs/widgets/metadata/exiftoolwidget.cpp     [License: GPL (v2+)]
A  +96   -0    core/libs/widgets/metadata/exiftoolwidget.h     [License: GPL (v2+)]

https://invent.kde.org/graphics/digikam/commit/15bce2a888a41d1ca08b3fe28d1a5caa6294ba7d
Comment 11 caulier.gilles 2021-04-18 21:24:57 UTC
Screenshot of ExifTool metatada viewer playing with a video file:

 https://imgur.com/FJvCAzX 

Gilles Caulier
Comment 12 caulier.gilles 2021-04-19 08:37:12 UTC
Git commit cc2a9d2a5981537a6df099c765d244dcb8656dac by Gilles Caulier.
Committed on 19/04/2021 at 08:36.
Pushed by cgilles into branch 'master'.

Add new widget to auto-detect ExifTool binary program and version

M  +2    -1    core/libs/widgets/CMakeLists.txt
R  +0    -0    core/libs/widgets/metadata/exiftool/exiftoolwidget.cpp [from: core/libs/widgets/metadata/exiftoolwidget.cpp - 100% similarity]
R  +2    -1    core/libs/widgets/metadata/exiftool/exiftoolwidget.h [from: core/libs/widgets/metadata/exiftoolwidget.h - 096% similarity]

https://invent.kde.org/graphics/digikam/commit/cc2a9d2a5981537a6df099c765d244dcb8656dac
Comment 13 caulier.gilles 2021-04-19 08:37:54 UTC
Git commit c86e2844bc4730b91a91458f9bc307863ed617c8 by Gilles Caulier.
Committed on 19/04/2021 at 08:37.
Pushed by cgilles into branch 'master'.

files missing

A  +48   -0    core/libs/widgets/metadata/exiftool/exiftoolbinary.cpp     [License: GPL (v2+)]
A  +48   -0    core/libs/widgets/metadata/exiftool/exiftoolbinary.h     [License: GPL (v2+)]

https://invent.kde.org/graphics/digikam/commit/c86e2844bc4730b91a91458f9bc307863ed617c8
Comment 14 caulier.gilles 2021-04-19 11:18:49 UTC
Git commit 78bbca7948fc348d9813adf0b220c19d3caf508b by Gilles Caulier.
Committed on 19/04/2021 at 11:20.
Pushed by cgilles into branch 'master'.

Use stackedWidget to show error message from ExifTool at run-time.

M  +6    -6    core/libs/properties/itempropertiesmetadatatab.cpp
M  +66   -0    core/libs/widgets/metadata/exiftool/exiftoolwidget.cpp
M  +21   -1    core/libs/widgets/metadata/exiftool/exiftoolwidget.h

https://invent.kde.org/graphics/digikam/commit/78bbca7948fc348d9813adf0b220c19d3caf508b
Comment 15 caulier.gilles 2021-04-19 15:47:20 UTC
Git commit fc2e13dccdc8c923838d203699bfb61a95a7d473 by Gilles Caulier.
Committed on 19/04/2021 at 15:47.
Pushed by cgilles into branch 'master'.

Add digiKam setup ExifTool tab in Setup Metadata to customize binary path.
Use MetaEngineSettings container to store and retreive ExifTool path from application configuration file.
TODO: patch Showfoto

M  +34   -0    core/libs/metadataengine/engine/metaenginesettingscontainer.cpp
M  +5    -1    core/libs/metadataengine/engine/metaenginesettingscontainer.h
M  +25   -11   core/libs/metadataengine/exiftool/exiftoolparser.cpp
M  +2    -0    core/libs/metadataengine/exiftool/exiftoolparser.h
M  +5    -0    core/libs/metadataengine/exiftool/exiftoolprocess.cpp
M  +2    -0    core/libs/metadataengine/exiftool/exiftoolprocess.h
M  +2    -1    core/libs/widgets/metadata/exiftool/exiftoolbinary.cpp
M  +37   -1    core/utilities/setup/metadata/setupmetadata.cpp
M  +1    -0    core/utilities/setup/metadata/setupmetadata.h

https://invent.kde.org/graphics/digikam/commit/fc2e13dccdc8c923838d203699bfb61a95a7d473
Comment 16 caulier.gilles 2021-04-19 17:59:19 UTC
Git commit 27ba22ba8f9055545ddcb3c07f822211c40245eb by Gilles Caulier.
Committed on 19/04/2021 at 17:57.
Pushed by cgilles into branch 'master'.

Add button to open ExifTool configuration tab.

M  +3    -0    core/app/views/stack/itemiconview.cpp
M  +1    -0    core/app/views/stack/itemiconview.h
M  +5    -0    core/app/views/stack/itemiconview_views.cpp
M  +3    -0    core/libs/properties/itempropertiesmetadatatab.cpp
M  +1    -0    core/libs/properties/itempropertiesmetadatatab.h
M  +3    -0    core/libs/properties/itempropertiessidebar.cpp
M  +1    -0    core/libs/properties/itempropertiessidebar.h
M  +23   -5    core/libs/widgets/metadata/exiftool/exiftoolwidget.cpp
M  +4    -0    core/libs/widgets/metadata/exiftool/exiftoolwidget.h
M  +32   -4    core/utilities/setup/setup.cpp
M  +1    -0    core/utilities/setup/setup.h

https://invent.kde.org/graphics/digikam/commit/27ba22ba8f9055545ddcb3c07f822211c40245eb
Comment 17 caulier.gilles 2021-04-19 21:15:18 UTC
Git commit 0187bef07e024540cf99fbedee987a389f0f27d5 by Gilles Caulier.
Committed on 19/04/2021 at 21:06.
Pushed by cgilles into branch 'master'.

Add ExifTool config view in Showfoto setup dialog.
Add button to open ExifTool configuration tab in ExifTool error view.

M  +5    -0    core/showfoto/main/showfoto.cpp
M  +1    -0    core/showfoto/main/showfoto.h
M  +3    -0    core/showfoto/main/showfoto_setup.cpp
M  +28   -0    core/showfoto/setup/showfotosetup.cpp
M  +1    -0    core/showfoto/setup/showfotosetup.h
M  +39   -5    core/showfoto/setup/showfotosetupmetadata.cpp
M  +2    -1    core/showfoto/setup/showfotosetupmetadata.h
M  +2    -2    core/utilities/setup/metadata/setupmetadata.cpp

https://invent.kde.org/graphics/digikam/commit/0187bef07e024540cf99fbedee987a389f0f27d5
Comment 18 caulier.gilles 2021-04-20 09:07:15 UTC
Git commit 98e0208de3a28d5a5efa5d35633a686e4d09f749 by Gilles Caulier.
Committed on 20/04/2021 at 09:08.
Pushed by cgilles into branch 'master'.

Add serach text bar in ExifToll list view to show only desired tags

M  +47   -0    core/libs/widgets/metadata/exiftool/exiftoollistview.cpp
M  +9    -0    core/libs/widgets/metadata/exiftool/exiftoollistview.h
M  +31   -8    core/libs/widgets/metadata/exiftool/exiftoolwidget.cpp

https://invent.kde.org/graphics/digikam/commit/98e0208de3a28d5a5efa5d35633a686e4d09f749
Comment 19 caulier.gilles 2021-04-20 12:56:19 UTC
Git commit 5f9bbe697f25710013cb07eca726d83b507e7292 by Gilles Caulier.
Committed on 20/04/2021 at 12:57.
Pushed by cgilles into branch 'master'.

Add ExifTool information action to save in text file, print, and copy to clipboard

M  +231  -11   core/libs/widgets/metadata/exiftool/exiftoolwidget.cpp
M  +11   -0    core/libs/widgets/metadata/exiftool/exiftoolwidget.h

https://invent.kde.org/graphics/digikam/commit/5f9bbe697f25710013cb07eca726d83b507e7292
Comment 20 caulier.gilles 2021-04-20 13:36:14 UTC
Git commit a928b12583326706cf063608238f0709d7d1021e by Gilles Caulier.
Committed on 20/04/2021 at 13:23.
Pushed by cgilles into branch 'master'.

Install exiftool windows binary in the bundle

M  +10   -0    project/bundles/mxe/04-build-installer.sh

https://invent.kde.org/graphics/digikam/commit/a928b12583326706cf063608238f0709d7d1021e
Comment 21 caulier.gilles 2021-04-20 14:31:24 UTC
For 7.3.0, the metadata viewer based on ExifTool is done.

For the ExifTool metadata wrapper for DMetadata, code is under construction and not yet finalized. See bug#416516 to continue the story.

I close this file now.

Gilles Caulier