Balise xmp [Python] pour les photos

introduction

Vous pouvez enregistrer la date, l'heure et l'emplacement de la prise de vue dans le fichier JPG de la photo. Les informations d'étiquette peuvent être écrites sur des photos prises avec un drone, etc. Ils semblent être enregistrés selon un format commun. Le but est de les lire et de les écrire.

Il existe de nombreuses descriptions sur GPS Exif. Alors, voici une note sur xmp, qui semble être moins informative. Je peux le lire, mais je ne suis pas doué pour l'écrire. (Larmes)

Préparation: installer xmp-toolkit

Qu'est-ce que XMP

Apparemment, il a été défini par Adobe et utilisé pour ajouter des informations à chaque fichier au format XML dans l'en-tête du fichier. Je ne connais pas les détails. ^^;)

Ainsi, par exemple, si vous le regardez avec la commande less, vous pouvez lire la partie XML du texte telle quelle. Mon oncle est dans un environnement Linux (WSL), --Ouvrez le fichier avec moins ―― On vous demandera "C'est binaire, mais allez-vous l'ouvrir?", Alors répondez Oui.


<x:xmpmeta xmlns:x="adobe:ns:meta/">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="DJI Meta Data"
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
    xmlns:exif="http://ns.adobe.com/exif/1.0/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/"
    xmlns:drone-dji="http://www.dji.com/drone-dji/1.0/"
   xmp:ModifyDate="2018-12-14"
   xmp:CreateDate="2018-12-14"
   tiff:Make="DJI"
   tiff:Model="FC6310R"
   dc:format="image/jpg"
   drone-dji:AbsoluteAltitude="+255.92"
   ...

Ressemble à. Le but est de lire et d'écrire ces informations.

En python

Bien sûr, il existe des outils utiles.

python3 -m pip install python-xmp-toolkit

Le XMP-Toolkit-SDK est également disponible auprès d'Adobe pour chaque source. Je me demande s'il peut être utilisé avec des applications intégrées ou pour smartphone. https://github.com/adobe/XMP-Toolkit-SDK

Lire la valeur de la balise xmp

L'utilisation est écrite dans Doc of python-xmp-toolkit, et je l'ai juste suivie et il n'y a pas eu de problème. .. Fait une note.

Lisez le dossier

read_xmp01.py


from libxmp import XMPFiles
xmpfile = XMPFiles( file_path="./100_0020_0001.JPG", open_forupdate=True )
xmp = xmpfile.get_xmp()

S'il n'y a pas d'erreur, vous pouvez le lire. ^^;) Vous pouvez vérifier le contenu de xmp de différentes manières.

Obtenez de la valeur

Dans l'exemple précédent

tiff:Make="DJI"

Il y avait une ligne appelée. Je veux obtenir la valeur "DJI" directement pour la clé "tiff: Make". Deux étapes sont nécessaires pour cela.

Obtenir un espace de noms

Tout d'abord, récupérez l'espace de noms (URI) du tiff.

In[]: xmp.get_namespace_for_prefix("tiff")
Out[]: 'http://ns.adobe.com/tiff/1.0/'

Il existe également un espace de noms dans lequel Adobe est défini à l'avance, qui peut également être référencé à partir de la bibliothèque.

In []: libxmp.consts.XMP_NS_EXIF
Out[]: 'http://ns.adobe.com/exif/1.0/'

Vous pouvez également trouver le nom de la variable directement en regardant "Espaces de noms communs" dans Source. ..

Obtenir la propriété

Pour lire la valeur de la balise tiff: Make, spécifiez l'espace de noms correspondant au tiff.

In []: xmp.get_property(xmp.get_namespace_for_prefix('tiff'),'Make')
Out[]: 'DJI'

En vérifiant à l'avance si le mot-clé se trouve dans l'espace de noms, vous pouvez éviter les erreurs.

In []: xmp.does_property_exist(xmp.get_namespace_for_prefix('tiff'),'TEST')
Out[]: False

écrire

Pour être précis, il devrait être possible de "réécrire", mais en réalité. .. ..

Tout d'abord, définissez la valeur de xmp.

In []: xmp.set_property(xmp.get_namespace_for_prefix('tiff'),'Make', 'some/makers')
In []: xmp.get_property(xmp.get_namespace_for_prefix('tiff'),'Make')
Out[]: 'some/makers'

Pour écrire dans un fichier, il semble que vous deviez mettre xmpfile et fermer le fichier.

In []: if xmpfile.can_put_xmp(xmp):
  ...:     xmpfile.put_xmp(xmp)
  ...:     xmpfile.close_file()

Ça devrait être bon. .. .. Le résultat n'a pas été réécrit correctement. Je ne sais pas si la procédure est différente ou si c'est un bug, mais je vais en prendre note pour l'instant. Aucune erreur ne se produit au moment de l'exécution.

Note

J'étais dans un état où je ne pouvais le lire que pour le moment. Voici ma tâche:

--Pouvez-vous obtenir toutes les balises de chaque espace de noms à l'avance? --Vérifier l'opération d'écriture

c'est tout. (08/08/2020)

Recommended Posts

Balise xmp [Python] pour les photos
30/10/2016 else pour Python3> pour:
À propos de Python for loop
Bases de Python ② pour déclaration
À propos de Python, pour ~ (plage)
Manuel python pour les débutants
Refactoring des outils utilisables avec Python
Toolchain pour Python pour Android
test de coopération de balises python
OpenCV pour les débutants en Python
Installez Python (pour Windows)
[Python] pour une erreur d'instruction
Maintenance de l'environnement Python pour les projets
Mémo Python (pour moi): Array
Prise en charge de Fabric pour Python 3
Liste Python, pour instruction, dictionnaire
Python pour l'analyse des données Chapitre 4
Flux d'apprentissage pour les débutants en Python
Procédure d'installation de Python 3.6 [pour Windows]
Intégration BigQuery pour les utilisateurs Python
Plan d'apprentissage Python pour l'apprentissage de l'IA
Configurer pour Mac (Python)
Mémo Python Tkinter (pour moi)
Installation d'OpenCV3 pour Python3 @macOS
Mémo de code personnel Python
Construction de l'environnement Python pour Mac
Techniques de tri en Python
pp4 (puissance python pour tout)
Construction de l'environnement Python3 (pour les débutants)
Feuille de route pour la publication de packages Python
Installation de la série Python 3 pour Mac
Python #function 2 pour les super débutants
Modèle Python pour Codeforces-test manuel-
Grammaire de base Python pour les débutants
Notes depuis 3 mois depuis que j'ai commencé Python
Mise à jour automatique de l'application Qt pour Python
Python pour l'analyse des données Chapitre 2
Pandas 100 coups pour les débutants en Python
La recommandation de Checkio pour apprendre Python
Arguments de mots-clés pour les fonctions Python
[Pour organiser] Environnement de développement Python
[Python] Exemple de code pour la grammaire Python
Python #function 1 pour les super débutants
[Python / PyQ] 4. liste, pour instruction
Serveur HTTP simple pour python
[Python + Selenium] Conseils pour le grattage
#List Python pour les super débutants
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Extraire uniquement Python pour le prétraitement
Mise en retrait des scripts python
Introduction à Python pour, pendant
À propos de "for _ in range ():" de python
tesseract-OCR pour Python [version japonaise]
[Python] Traitement itératif (for, while)
Python pour l'analyse des données Chapitre 3
Installer dlib pour Python (Windows)
Rechercher les fuites de mémoire dans Python
Orientation des objets Prolog pour les programmeurs Python