Wenn Sie eine GPU verwenden möchten, ändern Sie "Runtime" in "GPU". Wenn Sie bestätigen können, dass dies der Fall ist, klicken Sie auf "OK". Es kann von der GPU verarbeitet werden. Python, PyTorch, Colaboratory [Python] xmp-Tag für Fotos Einführung Sie können das Aufnahmedatum sowie die Uhrzeit und den Ort in der JPG-Datei des Fotos aufzeichnen. Tag-Informationen können auf Fotos geschrieben werden, die mit einer Drohne usw. aufgenommen wurden. Sie scheinen in einem gemeinsamen Format aufgezeichnet zu sein. Der Zweck ist, sie zu lesen und zu schreiben.

Es gibt viele Beschreibungen zu GPS Exif. Hier ist ein Hinweis zu xmp, der weniger informativ zu sein scheint. Ich kann es lesen, aber ich kann es nicht gut schreiben. (Tränen)

Vorbereitung: Installieren Sie das xmp-Toolkit

Was ist XMP?

Anscheinend wurde es von Adobe definiert und verwendet, um jeder Datei Informationen im XML-Format zum Header der Datei hinzuzufügen. Ich kenne die Details nicht. ^^;)

Wenn Sie es beispielsweise mit dem Befehl less betrachten, können Sie den XML-Teil des Textes so lesen, wie er ist. Mein Onkel ist in einer Linux-Umgebung (WSL), --Öffnen Sie die Datei mit weniger ――Sie werden gefragt: "Es ist binär, aber öffnen Sie es?". Antworten Sie also mit Ja. --Suche nach der Zeichenfolge xml (Schrägstrich xml return),


<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"
   ...

Sieht aus wie. Der Zweck besteht darin, diese Informationen zu lesen und zu schreiben.

In Python

Natürlich gibt es nützliche Werkzeuge.

python3 -m pip install python-xmp-toolkit

Das XMP-Toolkit-SDK ist für jede Quelle auch bei Adobe erhältlich. Ich frage mich, ob es mit integrierten oder Smartphone-Apps verwendet werden kann. https://github.com/adobe/XMP-Toolkit-SDK

Lesen Sie den Wert des xmp-Tags

Die Verwendung ist in Doc of python-xmp-toolkit geschrieben, und ich habe sie einfach befolgt und es gab kein Problem. .. Eine Notiz machen.

Lesen Sie die Datei

read_xmp01.py


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

Wenn es keinen Fehler gibt, können Sie ihn lesen. ^^;) Sie können den Inhalt von xmp auf verschiedene Arten überprüfen.

Wert erhalten

Im vorherigen Beispiel

tiff:Make="DJI"

Es gab eine Leitung namens. Ich möchte den Wert "DJI" direkt für den Schlüssel "tiff: Make" erhalten. Dafür sind zwei Schritte erforderlich.

Namespace abrufen

Holen Sie sich zuerst den Namespace (URI) des Tiffs.

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

Es gibt auch einen Namespace, in dem Adobe im Voraus definiert wird, auf den auch aus der Bibliothek verwiesen werden kann.

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

Sie finden den Variablennamen auch direkt unter "Common Namespaces" in Source. ..

Holen Sie sich Eigentum

So lesen Sie den Wert des Tags tiff: Make: Geben Sie den Namespace an, der dem tiff entspricht.

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

Sie können Fehler vermeiden, indem Sie im Voraus prüfen, ob sich das Schlüsselwort im Namespace befindet.

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

schreiben

Um genau zu sein, sollte es möglich sein, "umzuschreiben", aber in Wirklichkeit. .. ..

Stellen Sie zuerst den Wert von xmp ein.

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'

Um in eine Datei zu schreiben, müssen Sie anscheinend xmpfile erstellen und die Datei schließen.

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

Es sollte okay sein. .. .. Das Ergebnis wurde nicht korrekt umgeschrieben. Ich weiß nicht, ob das Verfahren anders ist oder ein Fehler vorliegt, aber ich werde es vorerst notieren. Zur Laufzeit tritt kein Fehler auf.

Memo

Ich war in einem Zustand, in dem ich es vorerst nur lesen konnte. Unten ist meine Aufgabe:

das ist alles. (2020/08/08)

Recommended Posts