Bug 436286

Summary: Cannot embed face tags into JPG image with Exiv2 and "apple-fi" XMP namespace. Use ExifTool instead
Product: [Applications] digikam Reporter: trymeout
Component: Metadata-ExifToolAssignee: Digikam Developers <digikam-bugs-null>
Status: RESOLVED FIXED    
Severity: normal CC: caulier.gilles, iwannaberich, metzpinguin
Priority: NOR    
Version: 7.2.0   
Target Milestone: ---   
Platform: Mint (Ubuntu based)   
OS: Linux   
Latest Commit: Version Fixed In: 7.4.0
Sentry Crash Report:
Attachments: image in zip file
face tag wont remain image

Description trymeout 2021-04-28 00:15:10 UTC
Created attachment 137965 [details]
image in zip file

SUMMARY


STEPS TO REPRODUCE
1. Download Digikam 7.2.0 AppImage and launch app image
2. Check off writing to face tags in digikam settings
3. Create a face tag for a person in the image
4. Uninstall digikam
5. Reinstall digikam and see there is no face tags added to the picture

OBSERVED RESULT
Face tags are not embeded into image

EXPECTED RESULT
Face tags are not embeded into image with person tag

SOFTWARE/OS VERSIONS
Linux/KDE Plasma: Mint 20 Cinnamon

ADDITIONAL INFORMATION

Here is a link to a picture file which face tags cannot be added to at all with digikam. The image is inside the zip file to ensure when uploading the image it will not alter it in any way. I cannot embed a face tag into this image file with digikam.

https://ufile.io/9urlwmmj


or you can download the image file under the attachments
Comment 1 Maik Qualmann 2021-04-28 04:18:11 UTC
The problem is known, the image comes from an Apple device. Exiv2 has the following problem:

Cannot get Xmp metadata tag title using Exiv2   (Error # 35 :  "No namespace info available for XMP prefix `apple-fi'"

Maik
Comment 2 trymeout 2021-04-28 04:30:18 UTC
Is digikam successful in writing the metadata to the file but unable to read it?

And is there a workaround for the time being?
Comment 3 Maik Qualmann 2021-04-28 05:42:08 UTC
No, digiKam doesn't write the metadata.

Gimp has the same problem:

https://gitlab.gnome.org/GNOME/gimp/-/issues/6047

See also bug 434246.
The problem also belongs to Bug 432265.
One solution would be to write with ExifTool and that is exactly what we are currently working on. But that won't be done before digiKam-7.4.0. 

Maik
Comment 4 Maik Qualmann 2021-04-28 05:49:32 UTC
With this command you can repair the image:

exiftool facetagsdonotwork.jpg -xmp:all= -tagsfromfile @ -xmp:all -overwrite_original

Maik
Comment 5 trymeout 2021-04-28 15:59:37 UTC
(In reply to Maik Qualmann from comment #4)
> With this command you can repair the image:
> 
> exiftool facetagsdonotwork.jpg -xmp:all= -tagsfromfile @ -xmp:all
> -overwrite_original
> 
> Maik

This does work for each individual images. Is there a way to modify this command to have it do an entire directory but ingore the non apple images?

I tried this by replacing the file name with a dot but it also deletes the face tags on non-apple images.

exiftool . -xmp:all= -tagsfromfile @ -xmp:all -overwrite_original
Comment 6 trymeout 2021-04-28 16:00:04 UTC
I am using bash if that helps
Comment 7 caulier.gilles 2021-04-28 16:14:42 UTC
In ExifTool command line, you can use condition rules. Look in documentation :

https://exiftool.org/exiftool_pod.html#Advanced-formatting-feature

Just check the availability of apple-fi metadata group in image before to process.

You can also use digiKam Batch Queue Manager to call Exiftool with bach on preselected items from your collection. The tool is named "User Shell Script" from Custom Tools section.

Gilles Caulier
Comment 8 trymeout 2021-04-28 19:02:02 UTC
(In reply to caulier.gilles from comment #7)
> In ExifTool command line, you can use condition rules. Look in documentation
> :
> 
> https://exiftool.org/exiftool_pod.html#Advanced-formatting-feature
> 
> Just check the availability of apple-fi metadata group in image before to
> process.
> 
> You can also use digiKam Batch Queue Manager to call Exiftool with bach on
> preselected items from your collection. The tool is named "User Shell
> Script" from Custom Tools section.
> 
> Gilles Caulier

I am not good with using terminal application which is why I use digikam over exiftools. Could you please tell me what the terminal command will be to do this

exiftool . -xmp:all= -tagsfromfile @ -xmp:all -overwrite_original

but only to files with the apple-fi metadata in the current directory. I know how to change the directory with "cd" command.

Thanks in advanced.
Comment 9 trymeout 2021-04-30 22:44:10 UTC
I found a solution thanks to StarGeek on the exiftool forum. Maybe digikam can use this to fix this issue but this is a soltution for others who want to fix this with their iphone pictures until digikam fixes this.

https://exiftool.org/forum/index.php?topic=12432.0
Comment 10 trymeout 2021-05-04 01:45:34 UTC
Created attachment 138127 [details]
face tag wont remain image
Comment 11 Maik Qualmann 2021-05-04 05:35:50 UTC
The image from comment 10 shows no problems with writing or reading face regions and tags.

Maik
Comment 12 trymeout 2021-05-04 18:20:48 UTC
(In reply to Maik Qualmann from comment #11)
> The image from comment 10 shows no problems with writing or reading face
> regions and tags.
> 
> Maik

I am using DigiKam 7.2.0 AppImage on Linux Mint. When I add a face tag to the image from comment 10 with the face tags setting enabled to write to the file it will show it works. Then I uninstall DigiKam by deleting the 4 database files in my Pictures folder and deleting the /home/user/.local/share/digikam folder and delting the /home/user/.cache/digikam folder. When I relaunch the appimage and add the folder of the pictures to my collection it shows the image saves the people tag but the face tag is no present on the image, no box around the faces
Comment 13 Maik Qualmann 2021-05-04 19:18:07 UTC
Rereading the metadata doesn't solve the problem? Are the face metadata available in the XMP metadata viewer?

Maik
Comment 14 trymeout 2021-05-04 20:14:27 UTC
(In reply to Maik Qualmann from comment #13)
> Rereading the metadata doesn't solve the problem? Are the face metadata
> available in the XMP metadata viewer?
> 
> Maik

Where is the XMP metadata viewer?
Comment 15 trymeout 2021-05-05 03:33:53 UTC
I looked on the right panel Properties, right panel Metadata -> XMP and I added the Edit Metadata button to the top panel and looked in that under XMP and cannot find anything for face tags.
Comment 16 Maik Qualmann 2021-05-05 04:11:21 UTC
The metadata viewer has a filter button at the top left next to the search line, where "no filter" should be selected in order to see all XMP metadata. The image sample from Comment 10 does not contain any face regions. I can easily add some. If this was not the case with you, then you have not activated the writing of face metadata in the digiKam settings. In order for face metadata to be written, both tags and facial metadata must be activated.

Maik
Comment 17 caulier.gilles 2021-05-08 16:52:29 UTC
Git commit 434f065e74282cbb9335c2cc4db256007ca2ae5d by Gilles Caulier.
Committed on 08/05/2021 at 16:46.
Pushed by cgilles into branch 'master'.

ExifTool support: add new method to get list of changes operated on metadata. The goal is to make a temporary EXV file to pass later to ExifTool to patch target file.
Related: bug 134486, bug 170693, bug 219856, bug 237504, bug 264210, bug 309341, bug 325458, bug 326408, bug 377622, bug 384092, bug 406540, bug 416516, bug 421464

M  +162  -0    core/libs/metadataengine/engine/metaengine.cpp
M  +5    -0    core/libs/metadataengine/engine/metaengine.h
M  +0    -1    core/libs/metadataengine/engine/metaengine_p.cpp

https://invent.kde.org/graphics/digikam/commit/434f065e74282cbb9335c2cc4db256007ca2ae5d
Comment 18 caulier.gilles 2021-05-09 08:34:06 UTC
Git commit 2cb42fd246428932edd2049c59def826dcc9a420 by Gilles Caulier.
Committed on 09/05/2021 at 08:13.
Pushed by cgilles into branch 'master'.

ExifTool support: now export the list of tags changes from Exif, Iptc, and Xmp in a temporary EXV file.
We will pass later this file to ExifTool to patch target file.
Related: bug 134486, bug 170693, bug 219856, bug 237504, bug 264210, bug 309341, bug 325458, bug 326408, bug 377622, bug 384092, bug 406540, bug 416516, bug 421464

M  +0    -186  core/libs/metadataengine/engine/metaengine.cpp
M  +8    -5    core/libs/metadataengine/engine/metaengine.h
M  +196  -0    core/libs/metadataengine/engine/metaengine_fileio.cpp
M  +4    -4    core/tests/metadataengine/CMakeLists.txt
R  +5    -4    core/tests/metadataengine/exportchanges_cli.cpp [from: core/tests/metadataengine/dmetadatadiff_cli.cpp - 082% similarity]

https://invent.kde.org/graphics/digikam/commit/2cb42fd246428932edd2049c59def826dcc9a420
Comment 19 caulier.gilles 2021-05-09 13:18:33 UTC
Git commit 2ef074a3f5c239bf4674c4cdda5bf99f511d8ae0 by Gilles Caulier.
Committed on 09/05/2021 at 13:04.
Pushed by cgilles into branch 'master'.

ExifTool support: add new method to apply list of changes operated on metadata.
A temporary EXV file constainer is computed with the list of changes to operated on Exif, Iptc, and Xmp.
This EXV file is processed with ExifTool to patch metadata.
Add new CLI test tool to try apply changes with EXV constainer. Here the file is patched with DMetadata::setImageDateTime()
which change or add new tags in Exif, Iptc, and Xmp

Exemple of changes processed to a CR3 raw image:

CR3 ORIGINAL:

exiftool -G:0:1:2:4 -exif:all -xmp:all 2020-09-22_21-27-23_0C4A1060.CR3_original
[EXIF:IFD0:Image] Image Width                   : 8192
[EXIF:IFD0:Image] Image Height                  : 5464
[EXIF:IFD0:Image] Bits Per Sample               : 8 8 8
[EXIF:IFD0:Image] Compression                   : JPEG (old-style)
[EXIF:IFD0:Camera] Make                         : Canon
[EXIF:IFD0:Camera] Camera Model Name            : Canon EOS R5
[EXIF:IFD0:Image] Orientation                   : Rotate 90 CW
[EXIF:IFD0:Image] Resolution Unit               : inches
[EXIF:IFD0:Author] Artist                       : kdmurray
[EXIF:IFD0:Author] Copyright                    :
[EXIF:ExifIFD:Image] Exposure Time              : 1/200
[EXIF:ExifIFD:Image] F Number                   : 10.0
[EXIF:ExifIFD:Camera] Exposure Program          : Manual
[EXIF:ExifIFD:Image] ISO                        : 400
[EXIF:ExifIFD:Image] Sensitivity Type           : Recommended Exposure Index
[EXIF:ExifIFD:Image] Recommended Exposure Index : 400
[EXIF:ExifIFD:Image] Exif Version               : 0231
[EXIF:ExifIFD:Time] Date/Time Original          : 2020:09:22 21:27:23
[EXIF:ExifIFD:Time] Offset Time                 : +10:00
[EXIF:ExifIFD:Time] Offset Time Original        : +10:00
[EXIF:ExifIFD:Time] Offset Time Digitized       : +10:00
[EXIF:ExifIFD:Image] Components Configuration   : Y, Cb, Cr, -
[EXIF:ExifIFD:Image] Shutter Speed Value        : 1/197
[EXIF:ExifIFD:Image] Aperture Value             : 9.9
[EXIF:ExifIFD:Camera] Flash                     : On, Fired
[EXIF:ExifIFD:Camera] Focal Length              : 90.0 mm
[EXIF:ExifIFD:Image] User Comment               :
[EXIF:ExifIFD:Time] Sub Sec Time                : 59
[EXIF:ExifIFD:Time] Sub Sec Time Original       : 59
[EXIF:ExifIFD:Time] Sub Sec Time Digitized      : 59
[EXIF:ExifIFD:Image] Flashpix Version           : 0100
[EXIF:ExifIFD:Image] Exif Image Width           : 8192
[EXIF:ExifIFD:Image] Exif Image Height          : 5464
[EXIF:ExifIFD:Camera] Focal Plane X Resolution  : 5773.079634
[EXIF:ExifIFD:Camera] Focal Plane Y Resolution  : 5769.799366
[EXIF:ExifIFD:Camera] Focal Plane Resolution Unit: inches
[EXIF:ExifIFD:Image] Custom Rendered            : Normal
[EXIF:ExifIFD:Camera] Exposure Mode             : Manual
[EXIF:ExifIFD:Camera] Scene Capture Type        : Standard
[EXIF:ExifIFD:Image] Serial Number              : 035021000124
[EXIF:ExifIFD:Image] Lens Info                  : 90mm f/0
[EXIF:ExifIFD:Image] Lens Serial Number         : 0000000000
[EXIF:GPS:Location] GPS Version ID              : 2.3.0.0
[EXIF:GPS:Location] GPS Altitude Ref            : Above Sea Level
[EXIF:GPS:Location] GPS Satellites              :
[EXIF:GPS:Location] GPS Status                  : Unknown ()
[EXIF:GPS:Location] GPS Measure Mode            : Unknown ()
[XMP:XMP-xmp:Image] Rating                      : 0

*EXV constainer generated:

exiftool -G:0:1:2:4 -exif:all -xmp:all 2020-09-22_21-27-23_0C4A1060_changes.exv
[XMP:XMP-x:Document] XMP Toolkit                : XMP Core 4.4.0-Exiv2
[XMP:XMP-exif:Time] Date/Time Original          : 2021:05:09 15:02:43
[XMP:XMP-exif:Time] Date/Time Digitized         : 2021:05:09 15:02:43
[XMP:XMP-tiff:Time] Date/Time Modified          : 2021:05:09 15:02:43
[XMP:XMP-xmp:Time] Create Date                  : 2021:05:09 15:02:43
[XMP:XMP-xmp:Time] Metadata Date                : 2021:05:09 15:02:43
[XMP:XMP-xmp:Time] Modify Date                  : 2021:05:09 15:02:43

*CR3 PATCHED:

exiftool]$ exiftool -G:0:1:2:4 -exif:all -xmp:all 2020-09-22_21-27-23_0C4A1060.CR3
[EXIF:IFD0:Image] Image Width                   : 8192
[EXIF:IFD0:Image] Image Height                  : 5464
[EXIF:IFD0:Image] Bits Per Sample               : 8 8 8
[EXIF:IFD0:Image] Compression                   : JPEG (old-style)
[EXIF:IFD0:Camera] Make                         : Canon
[EXIF:IFD0:Camera] Camera Model Name            : Canon EOS R5
[EXIF:IFD0:Image] Orientation                   : Rotate 90 CW
[EXIF:IFD0:Image] Resolution Unit               : inches
[EXIF:IFD0:Author] Artist                       : kdmurray
[EXIF:IFD0:Author] Copyright                    :
[EXIF:ExifIFD:Image] Exposure Time              : 1/200
[EXIF:ExifIFD:Image] F Number                   : 10.0
[EXIF:ExifIFD:Camera] Exposure Program          : Manual
[EXIF:ExifIFD:Image] ISO                        : 400
[EXIF:ExifIFD:Image] Sensitivity Type           : Recommended Exposure Index
[EXIF:ExifIFD:Image] Recommended Exposure Index : 400
[EXIF:ExifIFD:Image] Exif Version               : 0231
[EXIF:ExifIFD:Time] Offset Time                 : +10:00
[EXIF:ExifIFD:Time] Offset Time Original        : +10:00
[EXIF:ExifIFD:Time] Offset Time Digitized       : +10:00
[EXIF:ExifIFD:Image] Components Configuration   : Y, Cb, Cr, -
[EXIF:ExifIFD:Image] Shutter Speed Value        : 1/197
[EXIF:ExifIFD:Image] Aperture Value             : 9.9
[EXIF:ExifIFD:Camera] Flash                     : On, Fired
[EXIF:ExifIFD:Camera] Focal Length              : 90.0 mm
[EXIF:ExifIFD:Image] User Comment               :
[EXIF:ExifIFD:Time] Sub Sec Time                : 59
[EXIF:ExifIFD:Time] Sub Sec Time Original       : 59
[EXIF:ExifIFD:Time] Sub Sec Time Digitized      : 59
[EXIF:ExifIFD:Image] Flashpix Version           : 0100
[EXIF:ExifIFD:Image] Exif Image Width           : 8192
[EXIF:ExifIFD:Image] Exif Image Height          : 5464
[EXIF:ExifIFD:Camera] Focal Plane X Resolution  : 5773.079634
[EXIF:ExifIFD:Camera] Focal Plane Y Resolution  : 5769.799366
[EXIF:ExifIFD:Camera] Focal Plane Resolution Unit: inches
[EXIF:ExifIFD:Image] Custom Rendered            : Normal
[EXIF:ExifIFD:Camera] Exposure Mode             : Manual
[EXIF:ExifIFD:Camera] Scene Capture Type        : Standard
[EXIF:ExifIFD:Image] Serial Number              : 035021000124
[EXIF:ExifIFD:Image] Lens Info                  : 90mm f/0
[EXIF:ExifIFD:Image] Lens Serial Number         : 0000000000
[EXIF:GPS:Location] GPS Version ID              : 2.3.0.0
[EXIF:GPS:Location] GPS Altitude Ref            : Above Sea Level
[EXIF:GPS:Location] GPS Satellites              :
[EXIF:GPS:Location] GPS Status                  : Unknown ()
[EXIF:GPS:Location] GPS Measure Mode            : Unknown ()
[XMP:XMP-x:Document] XMP Toolkit                : Image::ExifTool 12.00
[XMP:XMP-exif:Time] Date/Time Digitized         : 2021:05:09 15:02:43           <====!
[XMP:XMP-exif:Time] Date/Time Original          : 2021:05:09 15:02:43           <====!
[XMP:XMP-photoshop:Time] Date Created           : 2021:05:09 15:02:43           <====!
[XMP:XMP-tiff:Time] Date/Time Modified          : 2021:05:09 15:02:43           <====!
[XMP:XMP-xmp:Time] Create Date                  : 2021:05:09 15:02:43           <====!
[XMP:XMP-xmp:Time] Metadata Date                : 2021:05:09 15:02:43           <====!
[XMP:XMP-xmp:Time] Modify Date                  : 2021:05:09 15:02:43           <====!
[XMP:XMP-xmp:Image] Rating                      : 0
Related: bug 134486, bug 170693, bug 219856, bug 237504, bug 264210, bug 309341, bug 325458, bug 326408, bug 377622, bug 384092, bug 406540, bug 416516, bug 421464

M  +12   -2    core/libs/metadataengine/exiftool/exiftoolparser.h
M  +32   -0    core/libs/metadataengine/exiftool/exiftoolparser_command.cpp
M  +6    -0    core/libs/metadataengine/exiftool/exiftoolparser_output.cpp
M  +1    -0    core/libs/metadataengine/exiftool/exiftoolprocess.h
M  +2    -1    core/tests/metadataengine/exiftool/CMakeLists.txt
C  +20   -19   core/tests/metadataengine/exiftool/exiftoolapplychanges_cli.cpp [from: core/tests/metadataengine/exiftool/exiftoolwrite_cli.cpp - 059% similarity]
M  +1    -1    core/tests/metadataengine/exiftool/exiftoolwrite_cli.cpp

https://invent.kde.org/graphics/digikam/commit/2ef074a3f5c239bf4674c4cdda5bf99f511d8ae0
Comment 20 caulier.gilles 2021-05-15 15:19:52 UTC
Git commit 5507cb4c7779f42321d751d3788ee18562df6c9d by Gilles Caulier.
Committed on 15/05/2021 at 15:14.
Pushed by cgilles into branch 'master'.

ExifToolParser: new command to copy tags from source file to a destination file.
Related: bug 134486, bug 170693, bug 219856, bug 237504, bug 264210, bug 309341, bug 325458, bug 326408, bug 377622, bug 384092, bug 406540, bug 416516, bug 421464, bug 381967

M  +7    -0    core/libs/metadataengine/exiftool/exiftoolparser.h
M  +64   -0    core/libs/metadataengine/exiftool/exiftoolparser_command.cpp
M  +17   -1    core/libs/metadataengine/exiftool/exiftoolprocess.h

https://invent.kde.org/graphics/digikam/commit/5507cb4c7779f42321d751d3788ee18562df6c9d
Comment 21 caulier.gilles 2021-05-16 10:14:16 UTC
Git commit 8f332525788359d2c13c3e029bfb1b956dd5a4d2 by Gilles Caulier.
Committed on 16/05/2021 at 10:09.
Pushed by cgilles into branch 'master'.

DNGWriter : include ExifTool Error View in Settings Widget.
Fix API to check ExifTool program availability.
Factoring codes.
Related: bug 134486, bug 170693, bug 219856, bug 237504, bug 264210, bug 309341, bug 325458, bug 326408, bug 377622, bug 384092, bug 406540, bug 416516, bug 421464, bug 381967

M  +29   -5    core/libs/dngwriter/dngsettings.cpp
M  +6    -0    core/libs/dngwriter/dngsettings.h
M  +3    -10   core/libs/metadataengine/exiftool/exiftoolparser.cpp
M  +4    -1    core/libs/metadataengine/exiftool/exiftoolparser.h
M  +31   -21   core/libs/metadataengine/exiftool/exiftoolprocess.cpp
M  +2    -0    core/libs/metadataengine/exiftool/exiftoolprocess.h

https://invent.kde.org/graphics/digikam/commit/8f332525788359d2c13c3e029bfb1b956dd5a4d2
Comment 22 caulier.gilles 2021-05-17 04:02:18 UTC
Git commit 067a15c4ed14d75eb2ce3cc725fcba709131392e by Gilles Caulier.
Committed on 17/05/2021 at 03:57.
Pushed by cgilles into branch 'master'.

DPlugin interface; add new method to be able to open an host application setup dialog page from a plugin.
DNGWriter: add ExifTool error view to settings Widget. If ExifTool is not available, show error view and allow
Related: bug 134486, bug 170693, bug 219856, bug 237504, bug 264210, bug 309341, bug 325458, bug 326408, bug 377622, bug 384092, bug 406540, bug 416516, bug 421464, bug 381967
to customize installation from configuration panel.

M  +1    -1    core/app/main/digikamapp.cpp
M  +1    -0    core/app/main/digikamapp_p.h
M  +28   -0    core/dplugins/bqm/convert/converttodng/converttodng.cpp
M  +1    -1    core/dplugins/bqm/convert/converttodng/converttodng.h
M  +20   -1    core/libs/database/utils/ifaces/dbinfoiface.cpp
M  +2    -0    core/libs/database/utils/ifaces/dbinfoiface.h
M  +5    -1    core/libs/dngwriter/dngsettings.cpp
M  +4    -4    core/libs/dngwriter/dngwriter_postprocess.cpp
M  +4    -1    core/libs/dplugins/iface/dinfointerface.cpp
M  +13   -0    core/libs/dplugins/iface/dinfointerface.h
M  +1    -1    core/libs/metadataengine/exiftool/exiftoolparser.cpp
M  +6    -6    core/libs/widgets/metadata/exiftool/exiftoolconfpanel.cpp
M  +1    -1    core/libs/widgets/metadata/exiftool/exiftoollistview.cpp
M  +1    -0    core/showfoto/CMakeLists.txt
M  +1    -1    core/showfoto/main/showfoto.cpp
M  +2    -1    core/showfoto/main/showfoto_p.h
A  +66   -0    core/showfoto/main/showfotoinfoiface.cpp     [License: GPL (v2+)]
A  +51   -0    core/showfoto/main/showfotoinfoiface.h     [License: GPL (v2+)]
M  +2    -2    core/tests/metadataengine/exiftool/exiftoolmulticore_cli.cpp
M  +14   -1    core/utilities/queuemanager/dplugins/dpluginbqm.cpp
M  +7    -0    core/utilities/queuemanager/dplugins/dpluginbqm.h
M  +1    -0    core/utilities/queuemanager/main/queuemgrwindow.h
M  +10   -0    core/utilities/queuemanager/manager/batchtoolsfactory.cpp
M  +3    -0    core/utilities/queuemanager/manager/batchtoolsfactory.h

https://invent.kde.org/graphics/digikam/commit/067a15c4ed14d75eb2ce3cc725fcba709131392e
Comment 23 MarcP 2021-11-01 20:42:41 UTC
Hi,

I'm not sure of the status of this bug, or if it's the same thing I have experienced (I mentioned it in the mailing list about a month ago). Basically what I see is that some pictures taken from an iPhone have defective or corrupted metadata, which appears in digikam as a "flat" tag list, instead of seeing the keywords on a tree. On top of that, this issue seems to be limited to those pictures with people in it.

And I have observed that the same problematic pictures are displayed correctly (with a hierarchical tag tree) in Digikam 7.3, but the problem appears if you see them in Digikam 7.4. Could it be some change between these two versions that changed how metadata is interpreted? Some of the pictures I'm seeing with this problem now are some that I took years ago and worked fine until now.

For now on, the only solution I have for this problem is placing the problematic pictures in a folder and run the following to fix the metadata:
exiftool -XMP:All -TagsFromFile @ -XMP:all *.JPG
Comment 24 Maik Qualmann 2021-12-02 07:16:41 UTC
*** Bug 446350 has been marked as a duplicate of this bug. ***
Comment 25 Maik Qualmann 2021-12-02 07:51:16 UTC
I have registered the "apple-fi" namespace in the code as a test. Then everything works without any problems. I just don't know the correct namespace URI at the moment.

Maik
Comment 26 caulier.gilles 2021-12-02 09:02:41 UTC
Hi Maik,

Look in ExifTool source code from github :

https://github.com/exiftool/exiftool/blob/9ceb6432cb71f892bdd1073599f8dfb7f373537d/lib/Image/ExifTool/XMP.pm#L182

==> 'apple-fi' => 'http://ns.apple.com/faceinfo/1.0/'

Gilles
Comment 27 Maik Qualmann 2021-12-02 12:31:57 UTC
Thanks Gilles, I think I don't need to do unregister the namespace. I took a look at the Exiv2::terminate() code and all namespaces should be deleted.

Maik
Comment 28 caulier.gilles 2021-12-02 12:42:11 UTC
Maik,

if i remember, Exiv2 do it automatically at end :

https://invent.kde.org/graphics/digikam/-/blob/master/core/libs/metadataengine/engine/metaengine.cpp#L100

Gilles
Comment 29 Maik Qualmann 2021-12-02 19:53:15 UTC
Git commit 1c5575647139ee20665e8b15e00ba59455c04fad by Maik Qualmann.
Committed on 02/12/2021 at 19:51.
Pushed by mqualmann into branch 'master'.

register Apple face info (apple-fi) namespace
Related: bug 446350
FIXED-IN: 7.4.0

M  +2    -2    NEWS
M  +2    -0    core/libs/metadataengine/engine/metaengine.cpp

https://invent.kde.org/graphics/digikam/commit/1c5575647139ee20665e8b15e00ba59455c04fad
Comment 30 MarcP 2021-12-04 16:20:32 UTC
Hi, I think this bug is still present in Build date: 4/12/21 10:27 (target: Debug) Rev.: 2e6caaade79584a2df7c6839d2084c5bcbd35715. I cannot save keywords on XMP metadata for iPhone pictures if they already contain a face region.
Comment 31 Maik Qualmann 2021-12-04 17:01:12 UTC
The error message is now:

digikam.metaengine: Exiv2 ( 3 ) :  Fehler des XMP-Werkzeugsatzes 102: Requested and existing composite form mismatch
digikam.metaengine: Exiv2 ( 3 ) :  Failed to encode XMP metadata.

I am sure that I had tested it with a clean test sample image. I'm at a loss at the moment ...

Maik
Comment 32 caulier.gilles 2021-12-04 17:07:22 UTC
This message is printed while reading metadata from file ?

If yes, well the expected structure from XMP container is badly encoded or is not recognized by exiv2. Perhaps the XMP SDK included in Exiv2 is not enough up-to-date or not complete (as i know that not all SDK is included as well in the library). If i remember Exiv2 has a compilation option to use an external version of XMP SDK.

Gilles
Comment 33 Maik Qualmann 2021-12-04 17:19:36 UTC
This message comes when you write. When reading, there is no error message, the unknown namespace "apple-fi" error message is gone.

Maik
Comment 34 caulier.gilles 2021-12-04 17:27:56 UTC
Perhaps while writing, ExiV2 try to merge old values with new values. Try to remove old values before to update contents...

Gilles
Comment 35 Maik Qualmann 2021-12-04 17:45:33 UTC
Metadata outside of XMP-mwg-rs can be changed without problems. It is not possible to delete or change the face metadata.

I guess now that although we have registered the namespace "apple-fi", Exiv2 cannot do anything with the content and produces a wrong XML structure.

Maik
Comment 36 Maik Qualmann 2021-12-05 11:04:47 UTC
Git commit ef606592329b3b734c1f6c295b422239730c85cf by Maik Qualmann.
Committed on 05/12/2021 at 11:04.
Pushed by mqualmann into branch 'master'.

fix remove face metadata completely from image

M  +2    -29   core/libs/metadataengine/dmetadata/dmetadata_faces.cpp
M  +1    -1    core/libs/metadataengine/engine/metaengine.h
M  +9    -2    core/libs/metadataengine/engine/metaengine_xmp.cpp

https://invent.kde.org/graphics/digikam/commit/ef606592329b3b734c1f6c295b422239730c85cf
Comment 38 MarcP 2021-12-06 20:08:50 UTC
It seems to working fine now, thank you!