Warum werden meine Handybilder auf meinem Desktop gedreht?

Eines Tages schickte mir mein Freund ein paar Bilder, um meinen Algorithmus zu testen. Der Algorithmus hat gut funktioniert und ich habe alles durchgezogen. Bei der Analyse der Ergebnisse sah ich jedoch, dass einige Bilder gedreht wurden! 

Ich konnte den Grund wirklich nicht verstehen. Nichts in meinem Algorithmus hat irgendwelche Rotationen durchgeführt, und es war ein bisschen komisch. Ich habe zum Glück den Grund gefunden, warum dies geschah, und in diesem Beitrag werde ich Sie durch die Schritte führen, die Sie ausführen können, um Bilder zu analysieren, die mit Python seltsam gedreht werden.

Lass uns anfangen!

EXIF-Daten

Haben Sie jemals darüber nachgedacht, was passiert, wenn Sie mit Ihrer Handykamera ein Bild aufnehmen? In diesem Fall schreibt die Kamera das Bild in eine Bilddatei und enthält gleichzeitig andere Informationen im aufgerufenen Bild Metadaten; Kurz gesagt handelt es sich hierbei um Daten zu Daten. Unser Bild wird zum Beispiel als Daten betrachtet. Metadaten können der Zeitpunkt sein, zu dem das Bild aufgenommen wurde.

Metadaten werden mit dem Dateiformat für austauschbare Bilder (Exif) in die Bilddatei geschrieben. Viele interessante Metadaten-Tags werden in Ihr Bild eingefügt, z. B. das machen und Modell- des Telefons, mit dem das Foto aufgenommen wurde, sowie weitere interessante Tags! Daher können Metadaten wertvolle Informationen zu Ihrem Bild enthalten. 

Wenn Sie sich eingehender mit Exif-Daten befassen möchten, haben der Verband der Kameramaschinen und Imaging-Produkte (CIPA) und der Verband der Information Technology Industries (JEITA) gemeinsam den Standard formuliert: CIPA DC-008-Translation Austauschbares Bilddateiformat für digitale Fotokameras: Exif-Version 2.3.

Metadaten lesen

Nachdem wir nun wissen, was wir unter Metadaten verstehen, lesen wir einige Metadaten-Tags in unserem Bild. In diesem Tutorial verwende ich das Bild, das mit einer Handykamera aufgenommen wurde. Das Originalbild kann von toy.jpg heruntergeladen werden.

Wie oben erwähnt, werden unterschiedliche Metadaten-Tags in das Bild aufgenommen. Lassen Sie uns ein Python-Skript schreiben, das die Informationen einiger Metadaten-Tags aus dem obigen Bild extrahiert. Angenommen, wir möchten mehr über das erfahren machen und Modell- des Mobiltelefons, mit dem das Foto aufgenommen wurde, und der Blitz Status zum Zeitpunkt der Aufnahme des Fotos. Dafür verwenden wir das ExifTags-Modul, das Teil der Python Imaging Library (PIL) ist..

Ich werde zuerst das Python-Skript auflisten und dann den Code Schritt für Schritt durchgehen:

aus PIL import Bild aus PIL.ExifTags import TAGS image = Image.open ('toy.jpg') info = image._getexif () für Tag, Wert in info.items (): Schlüssel = TAGS.get (Tag), falls Schlüssel == 'Make': print (Taste + ':' + str (Wert)) Elif-Taste == 'Modell': Print (Taste + ':' + str (Wert)) Elif-Taste == 'Flash': Print ( Taste + ':' + str (Wert))

Als erstes haben wir das importiert Bild und STICHWORTE Klassen. Das Bild Klasse wird verwendet, um ein PIL-Bild darzustellen, während die STICHWORTE Klasse, wie in der Dokumentation erwähnt, ordnet 16-Bit-Integer-EXIF-Tag-Enumerationen beschreibenden String-Namen zu.

Dann lesen wir unser Bild weiter, toy.jpg, und mit der ._getexif () Funktion, die ein Wörterbuch von zurückgibt Stichworte und ihre Werte. Danach prüfen wir, bevor der Wert des Tags (Schlüssels) gedruckt wird, ob dieser Schlüssel im Bild als Tag überhaupt vorhanden ist oder nicht. 

Wenn Sie eine Liste der verfügbaren Tags im Bild haben möchten, können Sie die Anweisung einfach hinzufügen Drucktaste unter der Schlüsselvariablen in der for-Schleife. Welche anderen Tags könnten Sie nach der Ausführung dieser Anweisung sehen??

Wenn Sie die Ausgabe des obigen Skripts überprüfen, erhalten Sie dies, wenn Sie es verwenden toy.jpg:

Flash: 0 Marke: Samsung Modell: SAMSUNG-SM-N920A

Aus der Ausgabe wissen wir, dass das Mobiltelefon, mit dem das Foto, das wir gesehen haben, aufgenommen wurde, vom Typ war Samsung und Modell SAMSUNG-SM-N920A. Was ist mit dem Wert 0 für das Tag Blitz? Wenn wir auf das Standarddokument verweisen, das im Abschnitt Exif-Daten oben verlinkt ist, wird der Wert angezeigt 0 bedeutet, dass die Blitz hat nicht ausgelöst zum Zeitpunkt der Fotoaufnahme.

Warum wird das Bild auf meinem Desktop gedreht??

Kommen wir zu unserem Hauptthema: Der Grund, warum Sie das Bild, das Sie von einer Handykamera übertragen haben, manchmal gedreht oder mit einer falschen Ausrichtung finden. Wir können den Grund für dieses Problem ermitteln, indem wir die Exif-Daten des Bildes analysieren.

Ein Metadaten-Tag, das wir für diesen Zweck verwenden können, ist Orientierung, das auf der Grundlage des oben verlinkten Standarddokuments die Bildorientierung in Zeilen und Spalten. Um den Orientierungs-Tag-Wert für unser Bild zu überprüfen, können wir die folgenden Anweisungen am Ende des obigen Skripts hinzufügen:

elif-key == 'Orientierung': drucken (key + ':' + str (value))

Die obigen Aussagen würden zurückkehren Orientierung: 1. Bezugnehmend auf das Exif-Normdokument, den Wert 1 meint:

Die 0-te Zeile befindet sich am oberen Bildrand und die 0-te Spalte ist die visuelle linke Seite.

Um dies klarer zu machen, wie in Exif Orientation Tag beschrieben, kann die obige Beschreibung wie folgt gelesen werden: Die 0. Zeile des gespeicherten Bildes ist der Anfang der aufgenommenen Szene und die 0. Spalte des gespeicherten Bildes ist die linke Seite der erfassten Szene. Mit anderen Worten, das Bild wurde nicht im Wesentlichen gedreht, so dass wir keine Orientierungsprobleme haben würden, wenn wir das Bild von unserem Mobiltelefon auf den Desktop übertragen. Das Dokument "JPEG-Drehung" und "EXIF-Ausrichtung" enthält eine schöne Erklärung des Exif-Orientierungs-Tags und seiner verschiedenen Werte.

Wenn Sie also bemerken, dass ein von Ihrem Mobiltelefon übertragenes Bild eine unerwartete Rotation oder eine falsche Ausrichtung aufweist, müssen Sie lediglich zum Exif-Orientierungs-Tag zurückkehren und dessen Wert für ein bestimmtes Bild überprüfen, basierend auf dem Sie dies tun könnten Korrigieren Sie die Ausrichtung Ihres übertragenen Bildes oder eines anderen Bildes, das Sie von einer anderen Person erhalten haben.

Dies ist besonders nützlich, wenn Sie einen Algorithmus auf einen Stapel von Bildern anwenden, die von einer Mobiltelefonkamera abgerufen werden, und Sie möchten sicherstellen, dass jedes Bild in der richtigen Ausrichtung gespeichert wurde.