ExifTool Forum

ExifTool => The "exiftool" Application => Topic started by: trymeout on April 28, 2021, 11:43:50 PM

Title: exiftool - repair "apple-fi" XMP namespace
Post by: trymeout on April 28, 2021, 11:43:50 PM
I want to repair the "apple-fi" XMP namespace for all the pictures in a directory. I know by using the dot you can run an exif command on all the files inside a directory but is there a way to only run this command on the jpg files with the "apple-fi" XMP namespace?

I tried this command which someone has posted on reddit but it does not work and suggested I come to this forum for a solution.

Thanks in advanced

Reddit post
https://www.reddit.com/r/linux4noobs/comments/n0r0jq/exiftool_repair_applefi_xmp_namespace/

exiftool -if '$XMP-apple-fi:All' -xmp:all= -tagsfromfile @ -xmp:all -overwrite_original .
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: StarGeek on April 29, 2021, 12:41:57 AM
In what way did it not work?  What was the output from exiftool? Also, what are you trying to fix?

The one thing I didn't add to that command was the -ext (-extension) option (https://exiftool.org/exiftool_pod.html#ext-EXT---ext-EXT--extension) to limit processing to jpgs.  To do that you would add -ext jpg to the command.

That command should re-write the XMP on any file that has XMP-apple-fi tags in it.
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: trymeout on April 29, 2021, 11:25:33 AM
Quote from: StarGeek on April 29, 2021, 12:41:57 AM
In what way did it not work?  What was the output from exiftool? Also, what are you trying to fix?

The one thing I didn't add to that command was the -ext (-extension) option (https://exiftool.org/exiftool_pod.html#ext-EXT---ext-EXT--extension) to limit processing to jpgs.  To do that you would add -ext jpg to the command.

That command should re-write the XMP on any file that has XMP-apple-fi tags in it.

This is the terminal output when running the command in a directory with only two JPG files. One from an apple iphone camera and the other one from a non-iphone camera. It does not fix the iphone JPG file.

$ exiftool -if '$XMP-apple-fi:All' -xmp:all= -tagsfromfile @ -xmp:all -overwrite_original .
    1 directories scanned
    2 files failed condition
    0 image files read
$

Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: StarGeek on April 29, 2021, 11:41:58 AM
Are you sure those files contain XMP-apple-fi tags?  Can you share a sample image?
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: trymeout on April 30, 2021, 04:29:36 PM
Quote from: StarGeek on April 29, 2021, 11:41:58 AM
Are you sure those files contain XMP-apple-fi tags?  Can you share a sample image?

Here is a download link and an attachment

https://ufile.io/9urlwmmj
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: StarGeek on April 30, 2021, 05:13:16 PM
Ah, I see now.  The XMP-apple-fi (https://exiftool.org/TagNames/XMP.html#apple_fi) do not exists in a separate namespace and aren't extracted or copied with XMP-apple-fi:All.  They are part of the the MWG region data, using the MWG Extensions Struct (https://exiftool.org/TagNames/MWG.html#Extensions).

You can use
-if '$XMP-mwg-rs:All'
to re-write all files that contain the MWG region. Or use something like
-if '$RegionExtensionsAngleInfoRoll'
to target the files that will include the Apple-fi in the extension space.

Looking at the raw XMP, the original file uses the more compact XMP format, while the re-written XMP is more expansive.  For example, the original writes
<mwg-rs:Extensions apple-fi:AngleInfoYaw="0" apple-fi:AngleInfoRoll="0" apple-fi:ConfidenceLevel="693" apple-fi:FaceID="56"/>
while exiftool is writing
      <mwg-rs:Extensions rdf:parseType='Resource'>
       <apple-fi:AngleInfoRoll>0</apple-fi:AngleInfoRoll>
       <apple-fi:AngleInfoYaw>0</apple-fi:AngleInfoYaw>
       <apple-fi:ConfidenceLevel>693</apple-fi:ConfidenceLevel>
       <apple-fi:FaceID>56</apple-fi:FaceID>
      </mwg-rs:Extensions>
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: trymeout on April 30, 2021, 05:58:59 PM
I tried this command and it seems to work but how do I view the raw XMP of a image?

exiftool -if '$RegionExtensionsAngleInfoRoll' -xmp:all= -tagsfromfile @ -xmp:all -overwrite_original .
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: StarGeek on April 30, 2021, 06:12:03 PM
Like this
exiftool -XMP -b file.jpg

This uses the -b (-binary) option (https://exiftool.org/exiftool_pod.html#b---b--binary---binary) to extract the data in the XMP tag (see the XMP entry on the Extra tags page (https://exiftool.org/TagNames/Extra.html)).
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: trymeout on April 30, 2021, 06:42:34 PM
This is the output before

$exiftool -XMP -b facetagsdonotwork.jpg
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:mwg-rs="http://www.metadataworkinggroup.com/schemas/regions/" xmlns:stArea="http://ns.adobe.com/xmp/sType/Area#" xmlns:apple-fi="http://ns.apple.com/faceinfo/1.0/" xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" xmp:CreatorTool="Photos 3.0"> <mwg-rs:Regions rdf:parseType="Resource"> <mwg-rs:RegionList> <rdf:Seq> <rdf:li> <rdf:Description mwg-rs:Type="Face"> <mwg-rs:Area stArea:y="0.90195837897042697" stArea:w="0.038147783251231526" stArea:x="0.28845320197044333" stArea:h="0.052048192771084301" stArea:unit="normalized"/> <mwg-rs:Extensions apple-fi:AngleInfoYaw="0" apple-fi:AngleInfoRoll="0" apple-fi:ConfidenceLevel="693" apple-fi:FaceID="56"/> </rdf:Description> </rdf:li> <rdf:li> <rdf:Description mwg-rs:Type="Face"> <mwg-rs:Area stArea:y="0.28778970427163186" stArea:w="0.067625615763546781" stArea:x="0.21996059113300498" stArea:h="0.090216867469879503" stArea:unit="normalized"/> <mwg-rs:Extensions apple-fi:AngleInfoYaw="0" apple-fi:AngleInfoRoll="270" apple-fi:ConfidenceLevel="80" apple-fi:FaceID="55"/> </rdf:Description> </rdf:li> <rdf:li> <rdf:Description mwg-rs:Type="Face"> <mwg-rs:Area stArea:y="0.44740416210295725" stArea:w="0.043349753694581272" stArea:x="0.27371428571428569" stArea:h="0.058987951807228933" stArea:unit="normalized"/> <mwg-rs:Extensions apple-fi:AngleInfoYaw="0" apple-fi:AngleInfoRoll="270" apple-fi:ConfidenceLevel="385" apple-fi:FaceID="49"/> </rdf:Description> </rdf:li> </rdf:Seq> </mwg-rs:RegionList> <mwg-rs:AppliedToDimensions stDim:h="3024" stDim:w="4032" stDim:unit="pixel"/> </mwg-rs:Regions> </rdf:Description> </rdf:RDF> </x:xmpmeta>


and this is the output after

$exiftool -XMP -b facetagsdonotwork.jpg
<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 11.88'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

<rdf:Description rdf:about=''
  xmlns:apple-fi='http://ns.apple.com/faceinfo/1.0/'
  xmlns:mwg-rs='http://www.metadataworkinggroup.com/schemas/regions/'
  xmlns:stArea='http://ns.adobe.com/xmp/sType/Area#'
  xmlns:stDim='http://ns.adobe.com/xap/1.0/sType/Dimensions#'>
  <mwg-rs:Regions rdf:parseType='Resource'>
   <mwg-rs:AppliedToDimensions rdf:parseType='Resource'>
    <stDim:h>3024</stDim:h>
    <stDim:unit>pixel</stDim:unit>
    <stDim:w>4032</stDim:w>
   </mwg-rs:AppliedToDimensions>
   <mwg-rs:RegionList>
    <rdf:Bag>
     <rdf:li rdf:parseType='Resource'>
      <mwg-rs:Area rdf:parseType='Resource'>
       <stArea:h>0.052048192771084301</stArea:h>
       <stArea:unit>normalized</stArea:unit>
       <stArea:w>0.038147783251231526</stArea:w>
       <stArea:x>0.28845320197044333</stArea:x>
       <stArea:y>0.90195837897042697</stArea:y>
      </mwg-rs:Area>
      <mwg-rs:Extensions rdf:parseType='Resource'>
       <apple-fi:AngleInfoRoll>0</apple-fi:AngleInfoRoll>
       <apple-fi:AngleInfoYaw>0</apple-fi:AngleInfoYaw>
       <apple-fi:ConfidenceLevel>693</apple-fi:ConfidenceLevel>
       <apple-fi:FaceID>56</apple-fi:FaceID>
      </mwg-rs:Extensions>
      <mwg-rs:Type>Face</mwg-rs:Type>
     </rdf:li>
     <rdf:li rdf:parseType='Resource'>
      <mwg-rs:Area rdf:parseType='Resource'>
       <stArea:h>0.090216867469879503</stArea:h>
       <stArea:unit>normalized</stArea:unit>
       <stArea:w>0.067625615763546781</stArea:w>
       <stArea:x>0.21996059113300498</stArea:x>
       <stArea:y>0.28778970427163186</stArea:y>
      </mwg-rs:Area>
      <mwg-rs:Extensions rdf:parseType='Resource'>
       <apple-fi:AngleInfoRoll>270</apple-fi:AngleInfoRoll>
       <apple-fi:AngleInfoYaw>0</apple-fi:AngleInfoYaw>
       <apple-fi:ConfidenceLevel>80</apple-fi:ConfidenceLevel>
       <apple-fi:FaceID>55</apple-fi:FaceID>
      </mwg-rs:Extensions>
      <mwg-rs:Type>Face</mwg-rs:Type>
     </rdf:li>
     <rdf:li rdf:parseType='Resource'>
      <mwg-rs:Area rdf:parseType='Resource'>
       <stArea:h>0.058987951807228933</stArea:h>
       <stArea:unit>normalized</stArea:unit>
       <stArea:w>0.043349753694581272</stArea:w>
       <stArea:x>0.27371428571428569</stArea:x>
       <stArea:y>0.44740416210295725</stArea:y>
      </mwg-rs:Area>
      <mwg-rs:Extensions rdf:parseType='Resource'>
       <apple-fi:AngleInfoRoll>270</apple-fi:AngleInfoRoll>
       <apple-fi:AngleInfoYaw>0</apple-fi:AngleInfoYaw>
       <apple-fi:ConfidenceLevel>385</apple-fi:ConfidenceLevel>
       <apple-fi:FaceID>49</apple-fi:FaceID>
      </mwg-rs:Extensions>
      <mwg-rs:Type>Face</mwg-rs:Type>
     </rdf:li>
    </rdf:Bag>
   </mwg-rs:RegionList>
  </mwg-rs:Regions>
</rdf:Description>

<rdf:Description rdf:about=''
  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>
  <xmp:CreatorTool>Photos 3.0</xmp:CreatorTool>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>


Looks like it works to me and now when I add face tags to these pictures in digikam, the face tags do remain. Thank you for your help, this is going to save me hours of work.
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: trymeout on May 03, 2021, 04:13:45 PM
It will seem this command is not enough as some face tags will not stay. Here is a sample picture and I did use this command on the image itself and it does not work

exiftool -if '$RegionExtensionsAngleInfoRoll' -xmp:all= -tagsfromfile @ -xmp:all -overwrite_original .
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: StarGeek on May 03, 2021, 05:23:16 PM
Is that the before or after?  There's no regions in that file at all.  Can't keep what isn't there.
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: trymeout on May 03, 2021, 09:29:41 PM
I tried to use that image file and add a face tag in it using Digikam 7.2.0 and when I delete the digikam database and readd the directory the image was in, the face tags did not save. I do have the settings enabled to save face tags into the file and not only into the digikam database.
Title: Re: exiftool - repair "apple-fi" XMP namespace
Post by: StarGeek on May 03, 2021, 09:34:39 PM
That would be a Digikam question.  I have no idea.