Hallo, Ich bin Michael Hecht,
Und Ich bin Hier Heute Zu sprechen Zu Du um Importieren binär Daten In JMP mit JSL.
Ich bin An Die Team Das entwickelt Die Software für JMP, Und lasst uns erhalten gestartet.
JMP dürfen Import viele von anders Dateiformate,
alles aus Klartext Zu Excel Tabellenkalkulationen.
Wann diese Sind importiert hinein JMP, sie sind gezeigt Zu Du als a Daten Tisch
Das Du dürfen Dann verwenden für weitere Analyse mit alle von JMPs Fähigkeiten.
Aber Was Wenn es gibt a Daten Typ Das Du kippen Import?
JMP nicht wissen Wie Zu Tun Es.
In Das Fall Studie, Krank Sei suchen bei Die JPEG Bild Format
Das Ist hübsch gemeinsam unter alle digital Kameras Und Smartphones.
Ich bin Sicher jedermanns vertraut mit Es.
In Tatsache, Du könnte Sei sagen,
Warten a Minute, I Gedanke JMP dürfen offen JPEGs,
Und In Tatsache, Es dürfen offen a JPEG.
Aber Wann Es tut, Du erhalten ein Bild wie Das.
Aber es gibt mehr In Das JPEG als Nur Die Bild.
Für Beispiel, Wenn I erhalten Information An Dieses hier,
I sehen Was Art von Gerät Die Bild War genommen mit, Was Linsen war gebraucht,
Und sogar Die GPS Koordinaten von Wo I War Stehen Wann I nahm Die Foto.
Jetzt, Wie dürfen Wir erhalten Das Daten importiert hinein JMP?
Also, Wir dürfen Tun Es durch JSL,
welche Krank erhalten Zu In Nur a Minute.
Aber Wenn Wir offen Das Datei In a Text Editor, Wir sehen Das es ist nicht menschlich lesbar Text.
Es ist a Serie von Bytes Das Sind gezeigt als diese nicht druckbar Charaktere,
Und Wir Anruf Das binär Daten.
Es ist Daten das ist draußen Die Reichweite
von Normal alphabetisch Text.
Es hat a Struktur, obwohl, Und Die Daten Ist gesperrt innen Dort.
Wenn nur Wir dürfen bestimmen Wie Zu entwirren Es.
Zu Tun Das, Wir brauchen Zu wissen
Die Spezifikation wie dieses Daten Ist gelegt aus.
In Die Fall von JPEG, das ist definiert von a Spezifikation
genannt Exif oder Austauschbar Bild Datei Format,
Und Wir dürfen herunterladen Die Spezifikation für Es.
Es ist a dokumentieren das ist gewesen seit etwa 20 Jahren,
Und es ist In verwenden von alle Die Geräte Das produzieren JPEGs.
Nicht nur Hardware Geräte wie Kameras,
Aber sogar Photoshop setzt Metadaten In a JPEG In Das Exif Format.
Zu Zugang Es aus JMP,
Wir brauchen Zu verwenden a JSL Objekt bekannt als Die KLECKS oder Binär Groß Objekt.
Das Ist Nur a JSL Objekt Das hält a Sequenz von Bytes.
Wie Die Name sagt, Das Sequenz von Bytes dürfen Sei groß.
Wir dürfen Genau genommen erstellen a KLECKS durch Laden der Inhalt
von beliebig Datei An dein hart Festplatte hinein mit Das Last T ext Datei Funktion.
Normalerweise, Das würde zurückkehren Die Inhalt von a Datei als Text,
Aber Wenn Wir hinzufügen Das KLECKS Stichwort als a zweite Parameter,
Dann Die Funktion Rücksendungen a KLECKS.
Wir dürfen nehmen eins KLECKS Und Teilmenge a ein Teil davon
hinein ein anderer KLECKS mit BLOB-Vorschau wie Du sehen Hier.
Das Ist Einnahme 50 Bytes aus B, Start bei Versatz 100.
Jetzt Die Versatz für BLOBs Ist immer bei Null beginnend,
Also Die Erste Byte In Die KLECKS Ist ein Versatz null.
Jetzt Wir könnte Tun beide von diese Operation in einem einzigen Funktionsaufruf
von vorbei Die Versatz Und Länge als Parameter
Zu Die KLECKS Stichwort Wann Wir Anruf niedrig Text Datei.
Wenn Du sehen Hier Das sagt, offen Die Datei unter diesem Pfad,
überspringen 100 Bytes In Und dann 50 Bytes lesen, Und zurückkehren Das als a KLECKS.
Einmal Wir haben a KLECKS,
Wir dürfen konvertieren Es Zu a Charakter Schnur mit Die Klecks Zu Verkohlen Funktion.
Hier war Einnahme b2 Und Konvertieren seine Bytes hinein a Charakter Schnur,
vorausgesetzt Das diese Bytes Sind In Die " us-ascii"-Zeichensatz.
Wenn Wir nicht angeben a Zeichensatz, JMP geht davon aus es ist UTF-8 .
Wir könnte Auch halten Das KLECKS
Zu enthalten a Serie von numerisch Werte, alle von Die Dasselbe Typ Und Größe.
Verwenden Klecks Zu Matrix Hier, war Einnahme b2,
welche Wir lesen In Und Satz eine Länge von 50 Bytes,
Und Dolmetschen Es als ein Array von ohne Vorzeichen ganze Zahlen,
jede von welche Ist zwei Bytes lang.
Wir sollen erhalten zurück a Matrix mit 25 Zahlen In Es.
Jetzt Das vierte Parameter, Die Schnur "groß,"
sagt Das diese ohne Vorzeichen Ganzzahlen sind in groß Endian Format,
Bedeutung Die Erste Byte Ist Die am meisten bedeutsam,
Ist Die höchster Teil des Endes,
Und Dann gefolgt von Die niedrigste Teil von Die Ende.
Wir könnte Auch angeben Die Schnur wenig Zu angeben Little-Endian Format.
Binär Dateien haben
beide von diese Arten von Darstellung von Ganzzahlen Und andere Zahlen.
In Tatsache, Die Exif Format verwendet beide Big-Endian Und kleines-e intensiv.
Lasst uns nehmen a sehen bei diese Operationen In Aktion.
Ich bin gehen Zu schalten über Zu JMP,
und ich bin gehen Zu offen Das Demo Skript hier, D Emo Nummer 1.
Jetzt Wir sehen manche von Die Code Wir Nur sah bei.
Hier Wir Sind Laden a Text Datei, Das Datei namens Strand.j Pflock.
Das Ist Die Dasselbe Datei Das I gebraucht In Mein gleiten.
Es ist Rechts Hier Und Du dürfen sehen Es.
Du dürfen Auch sehen Das es hat eine Größe von um 3.4 Mich.
Wann I laufen Das eins Linie von Code
Und Protokoll, Es erzählt Mich Das
b war zugewiesen a KLECKS von 3.45.000, Und und so weiter Bytes, oder 3.4 Mich.
Es nicht zeigen Mich alle diese Bytes, Aber I dürfen sehen Wie groß Es Ist.
I dürfen erhalten Das Länge mit Die Längenfunktion,
Nur wie Du verwenden für Charakter Saiten.
Aber Wann I verwenden Länge An a KLECKS, Es gibt Mich zurück Die Nummer von Bytes.
I dürfen
erhalten a Unter- KLECKS von Die Erste sechs Bytes
In b mit BLOB-Vorschau.
Also Tun Das Hier,
Und I sehen a KLECKS von sechs Bytes War zugewiesen.
I dürfen Genau genommen sehen bei Die Wert Wenn I wollen von Nur
Absenden Die Name von Die Variable.
I dürfen sehen Hier Sind diese sechs Bytes In Das "ASCII-Hex"-Format
FF-D8-FF-E1, Und und so weiter.
I dürfen nehmen diese sechs Bytes Und konvertieren ihnen Zu a Matrix,
Und Ich bin gehen Zu konvertieren ihnen Zu a Matrix von zwei Bytes vorzeichenlose Ganzzahl
oder Shorts In großes E intensiv Format.
Gegeben Das Dort Sind sechs Bytes Hier,
I sollen Ende hoch mit a Matrix von drei Zahlen.
Wann I laufen Das, Sicher genug, es gibt Mein drei Zahlen.
Wir dürfen sehen diese drei Zahlen In Verhexen
nur um verifizieren mit Das wenig vier Schleife Das I schrieb, Also lasst uns Tun Das.
Dort Sie Sind, Nur Dasselbe als vor, FFD8, FFE1, 0982.
Also Jetzt, lasst uns sehen bei Die nächste vier Bytes folgende diese sechs In Die Datei,
Und Also erhalten ihnen In a Unter- KLECKS alle von selbst
Also Das Wir dürfen Dann konvertieren th In Zu a Charakter Schnur mit KLECKS Zu Verkohlen.
Wann I laufen Das, Ich bekomme Die Charakter Zeichenfolge " Exif."
Du Mai haben bemerkt In die Folie
zeigt Die binär Datei Inhalt
Das Das wenig Schnur War hoch Dort in der Nähe der Spitze,
Und es ist Teil von Die Exif Datei Spezifikation und identifiziert Es als solch.
Lasst uns gehen zurück Zu die Folien.
Diese Funktionen Sind leistungsstark.
Sie lassen uns Tun Was Wir brauchen Zu Tun Zu manipulieren Und lesen Daten aus a KLECKS,
Aber sie sind a wenig schwerfällig Zu verwenden.
Lasst uns schreiben unser eigen Versorgungsunternehmen Zu machen ihnen a bisschen mehr überschaubar.
Ich bin gehen Zu Start mit a Funktion, die ich Read Value genannt habe
Und Es dauert a KLECKS Und Dann manche Versatz innerhalb dieses BLOBs,
Und Dann Die numerisch Typ Ich möchte lesen Und Die Größe von Das Typ.
Es ist gehen Zu lesen eins Wert aus von Die KLECKS.
I bestanden Mein KLECKS Und Versatz Und Größe hinein BLOB-Spähen,
erhalten zurück a Unter- KLECKS von Nur diese Bytes, Und Dann Anruf Klecks Zu Matrix
vorbei In Die Typ.
I verwenden Die Dasselbe Größe,
Also Die Größe von Die KLECKS Und Die Größe von ein Element Sind Die Dasselbe.
I sollen erhalten zurück a Matrix von ein Wert
Und I passieren In "groß" Weil Ich bin Nur stets gehen Zu verwenden Big-Endian Format.
Aber I nicht wollen Zu zurückgeben Matrix.
I wollen Zu zurückkehren Das eins Wert, Also I ziehen Es aus von Die Matrix Und zurückkehren Das.
Das Ist angerufen wie Also. I Anruf Wert lesen, I passieren In B.
I lesen eins vorzeichenlose Ganzzahl Start bei Offset Null
Und es ist zwei Bytes lang Und I erhalten zurück Das Wert FFD8.
Es gibt a Problem mit Das Code jedoch, Und das ist In Das Parameter B.
B Ist Das KLECKS das ist 3.4 Zu In Größe.
Der Problem Ist Das JSL, Wann vorbei a KLECKS Zu a Funktion,
stets geht Es von Wert, Bedeutung Es macht a Kopie von Es.
Für jeder einzel Nummer I wollen Zu herausziehen von Mein KLECKS mit Das Funktion,
Es Wille machen a Kopie von Das 3.4 Zu
nur um ziehen aus zwei Bytes, oder vier Bytes oder was auch immer, Und Dann werfen Es weg
wenn die Funktion kehrt zurück.
Das ist ineffizient, verschwenderisch, Und wahrscheinlich Wirklich langsam,
Also Wir nicht wollen Zu Tun Das.
Wie dürfen Wir erhalten um Das?
Also, stattdessen von vorbei Es als a Parameter, lasst uns setzen Es In a global.
Also machen a global Das Wir laden mit unserem BLOB,
Und Dann Wir dürfen Anruf Die Funktion
Und es wird Nur verweisen Zu Die global stattdessen von a Parameter.
In Tatsache, Wir dürfen machen a Bündel von Globale.
Wir dürfen aufzeichnen Die Länge von Die KLECKS Zu Versatz
Zu Wo Wir Sind momentan Verarbeitung Daten In Die KLECKS,
Und Vielleicht sogar für Die Byte-Reihenfolge.
Der Problem mit Globale, obwohl,
Ist Das Sie Sind In Die global Symboltabelle,
Und Sie könnte stören mit andere Code Das Du haben.
In Tatsache, heiraten wie Zu schreiben unser Importieren Code als etwas Das dürfen Sei gebraucht
von andere Kunden,
Und diese Kunden könnte haben ihre eigen Variablen von diese Namen,
oder Sie könnte Sei mit andere Code Bibliotheken Das würde stören.
Wie Tun Wir erhalten um Das?
Also, Ich habe Erledigt Es von Erstellen a Namespace.
I Anruf Mein Namespace " EXIF-Parser"
Jetzt, stattdessen von Globale, I setzen ihnen alle als Variablen in meinem Namespace,
Und Jetzt sie sind N amespace Globale mit Das Präfix.
Vor I Anruf Mein Funktion, I brauchen Zu initialisieren ihnen.
Krank laden Die "Strand.jpeg" Datei hinein Die EXIF P Arsch KLECKS,
Krank aufzeichnen es ist Link.
Krank Start aus Mein Versatz bei Die sehr Anfang bei null,
Und Krank Satz Die Byte-Reihenfolge Zu "groß,"
Und Dann I dürfen ändern Mein Funktion, Vereinfachung Es a bisschen wie Das.
Jetzt, Ich habe Genau genommen setzen Mein Funktion im gleichen Namespace „Wert lesen“
als Teil von Die EXIF Parser Namespace.
Jetzt, alle I brauchen Zu Tun Ist passieren a Typ und Größe.
BLOB-Vorschau Jetzt verwendet Die globales BLOB das ist gelagert In Die Namensraum,
Die globaler Strom Versatz aus der wir lesen,
Und KLECKS Die Matrix sogar verwendet die Byte-Reihenfolge,
Also Wir dürfen parametrisieren, Wir dürfen ändern Es.
Einmal Ich habe abgerufen Die Ergebnis I wollen,
Krank Inkrement Die Versatz von Die Anzahl der Bytes
Wir Nur Verfahren, Und Dann Krank zurückkehren Es als vor.
Lasst uns sehen Was Das Aussehen wie In Aktion.
Wir werden schauen bei Demo 2
Und hier ist Mein Namespace.
Hier Sind Mein Globale In Das Namespace.
Hier ist Die Wert lesen Funktion, Nur wie Wir gesehen.
Ich habe bekommen manche mehr Funktionen. Ich habe setzen ein EXIF-Parser
Hier ist Read Short, was nur Read Value verursacht,
Aber Es stets geht ohne Vorzeichen ganze Zahl von zwei Bytes.
Ähnlich, Lesen Lang liest Und ohne Vorzeichen int von vier Bytes.
Ich habe Auch bekommen Lesen ASCII an dem du es weitergibst a Größe In Bytes
Und Es macht a Unter- KLECKS von Das viele Bytes
bei Die aktuell Versatz aus Die globales BLOB,
Und Dann Ursache KLECKS Zu Aufladung Zu konvertieren Es hinein a Zeichenfolge.
Es ist mit Die "us-ascii"-Zeichen Satz,
Weil das ist Die Zeichensatz Das Die Exif Spezifikation sagt
alle von es ist Charakter Daten verwendet.
Dann Nur wie mit Wert lesen, Es Inkremente Zu Versatz Vergangenheit Die Bytes
Das war bereits verarbeitet Und Rücksendungen Die Zeichenfolge.
Lasst uns einreichen alle von Das Code
Also Das diese Dinge Sind alle definiert Und Dann Wir dürfen versuchen Zu verwenden ihnen.
Erste, Also initialisieren unser EXIF P Arsch Globale,
Und Dann Krank lesen Die Erste drei Shorts aus Die Datei Nur wie Wir tat vor.
Aber Jetzt, Ich bin gehen Zu Anruf Lesen Sie kurz.
War Start Es aus bei null,
Also Ich bin gehen Zu Anruf Es drei mal In Das Schleife.
Es Wille lesen In jede aufeinanderfolgend kurz,
vorrückend Versatz als Es geht, und dann drucken ihnen aus Nur wie vor.
Dort Sie Sind.
Jetzt, unser Versatz Ist Sitzung bei Offset sechs Nur Vergangenheit Die zuletzt Ding Es lesen.
I dürfen Aufruf „Ascii lesen“ für vier Bytes Und I erhalten zurück Das Dasselbe Zeichenfolge.
Okay, Also lasst uns gehen zurück Zu Folien.
Jetzt, Wir haben manche Werkzeuge Wir dürfen verwenden Zu Start Gebäude unser EXIF-Parser.
Wir brauchen Zu Du hinein Die Spezifikationen
Zu sehen Was tut Die EXIF Daten Format Und Das JPEG Datei sehen wie.
Also, bei Die Spitze Ebene, Es Aussehen etwas wie Das.
Es beginnt mit zwei Bytes, welche Sind was ist angerufen Die Start von Bild Marker.
Wir haben bereits gesehen diese zwei Bytes.
Sie sind Die Wert FFD 8.
Wenn dein Datei nicht fang damit an, es ist nicht a JPEG.
Dann es gibt a Serie von Blöcke von Daten,
Und jede Block beginnt mit zwei Bytes, welche Ist a Marker,
Dann zwei Bytes, welche Ist a Größe,
Und Dann manche Daten welche Ist Jedoch viele Bytes Die Größe von Dort war.
Jetzt Die Größe Auch beinhaltet selbst, Also Wirklich Die Daten Ist Größe Minus zwei.
Du dürfen sehen Dort, Sind a eine Reihe verschiedener Blocktypen definiert,
Aber manche von ihnen Sind optional, manche von ihnen dürfen Sei wiederholt.
Der diejenigen Das Wir Pflege um Sind APP1 Und APP2.
Das ist Wo Die EXIF Daten Wille Sei.
Dann es gibt a Bündel von andere Das Wir nicht Pflege um.
Letztlich, Wir sehen eins angerufen Start von Scan oder SOS.
Wann Wir Schlag Das, Wir wissen Das Die nächste Teil von Die Datei
Wille Sei Die tatsächlich Bild Daten, welche Ist Die Pixel.
Wann Wir Schlag Das, Wir dürfen stoppen.
Dann nach Die Bild Daten Ist Ende von Bild.
Wir brauchen ein Algorithmus Zu lesen Das Daten.
Hier ist Was Also verwenden.
Erste, Also lesen Die Erste zwei Bytes,
sehen Wenn Es Streichhölzer Die Start von Bildmarkierung,
Und Dann Wir wissen Wir haben a JPEG.
Dann Also haben a während Schleife, wobei innerhalb der while-Schleife
jede Zeit durch, Also Verfahren a einzel Block.
Zu Tun Das, Wir Wille speichern Die aktuell Versatz Position,
lesen Die zwei Bytes für Die nächste Marker,
Und Wenn Das Marker Ist SOS, Wir dürfen brechen aus von Die Schleife.
Nächste, Wir lesen Die zwei Bytes für Die Größe.
Jetzt Wir haben alle Die Information Wir brauchen Zu Verfahren Die Block.
Was auch immer Das beinhaltet, Also Tun Es.
Dann Wir dürfen überspringen Vergangenheit Die Daten In Fallverarbeitung des Blocks
nicht ändern unser Ausgleich überhaupt, Aber Also ausdrücklich verschieben Sie unseren Offset
Zu was auch immer Es War bei Die Anfang von Die Schleife,
Plus Die zwei Bytes für Die Marker, Plus Die Wert von Die Block Größe.
Wann Wir erhalten aus von Die Schleife,
Wir entweder lief aus von Daten In Die Block Zu Verfahren oder Wir Schlag Das SOS Marker,
Also war Erledigt.
Lasst uns sehen Was Das Aussehen wie.
Demo 3 hat Das Code.
Du sehen, Wir haben unser Namensraum, Und alle Das Ist Die Dasselbe als vor.
Ich bin gehen Zu laufen Es Nur Zu stellen Sie sicher alles Ist definiert.
Jetzt, war Hinzufügen a neu Funktion,
welche Ich habe Auch setzen In Die Namensraum,
Und es ist angerufen EXIF-Parser: Holen Sie sich EXIF-Datenrohdaten,
Und Ich bin vorbei In Die Weg Zu Die Datei, dieses JPEG Datei Das Wir wollen Zu Verfahren.
Jetzt, Ich habe definiert ein assoziativ Array Hier Das Karten diese Magie Marker Codes
Zu ihre Abkürzungen damit wir drucken ihnen aus An Die Protokoll.
I laden hoch Mein
Exif Parser Globale wie vor,
nur Jetzt Ich bin vorbei In Die Datei Weg Das I War gegeben,
Und Dann I Start Dolmetschen Was Die Daten Ist.
Erste, I sehen bei Die sehr Erste kurz
Und machen Sicher es ist am Anfang von Bild Marker.
Wenn nicht, I Nur zurückkehren Weil es ist nicht a jpeg Datei.
Ich bin gehen Zu schreiben Zu Die Protokoll Das I gesehen Es bei Versatz null.
Dann hier ist Mein während Schleife Zu gehen durch diese Blöcke.
Bei Die Spitze von Die Schleife,
Ich bin gehen Zu zurücksetzen Mein Byte-Reihenfolge Zu "groß," Weil manche von Die Blöcke,
Wann Wir Verfahren ihnen, Wille haben ihre eigen Byte-Reihenfolge
Und ändern Es Zu wenig.
Wir wollen Zu wissen Das Die Byte-Reihenfolge ist groß bei Die Oberseite der Schleife
Weil Die Block Struktur stets verwendet Big-Endian Daten.
Dann Ich bin gehen Zu speichern was auch immer Die aktuell Versatz Ist,
Und Dann Ich bin gehen Zu lesen Die nächste Marker.
Es ist a kurz, Und Ausweis sehen Zu sehen Wenn es ist gleich Zu SOS,
welche Ist Das Magie Nummer.
Wenn Es Ist, I dürfen brechen aus von Die Schleife nach Protokollierung Das I gesehen Es.
Nächste, Krank lesen Die zwei Bytes für die Blockgröße,
Und Dann I Wille Verfahren Die Block.
Jetzt, In Das Beispiel, Mein Verarbeitung besteht von Schreiben a Nachricht Zu Die Protokoll,
Also Krank Tun Das.
Dann Ich bin bereit Zu überspringen Vergangenheit Die Block.
I Tun Das von Ändern Mein Versatz Zu Sei was auch immer Es War bei Die Anfang,
Plus Die zwei Bytes für Die Marker, Plus Die Block Größe.
Wann I brechen aus von Die Schleife, I zurücksetzen Mein global s und Ich bin Erledigt.
Lasst uns definieren Das Funktion von Absenden Das.
Ich werde rennen Skript, Und Dann I kann es nennen vorbei In "Strand.jpg",
mal sehen Was Wir erhalten.
Es gedruckt aus Zu Die Protokoll.
Es Versatz null, es gibt Start von Bild, Dann Es Versatz zwei, es gibt APP1,
Und Es hat Das Größe 2.466 Bytes.
Dann Wir erhalten APP2, welche hat um 30.000 von Daten.
Das ist am meisten von Es Rechts Dort.
Dann Wir haben a Bündel von Blöcke Das uns ist es eigentlich egal,
Aber letztlich, Wir sehen SOS Also Wir brechen aus von Die Schleife.
Das ist alle Arbeiten Also.
Lasst uns gehen zurück Zu Folien.
Jetzt, Ich bin gehen Zu überspringen voraus In Verarbeitung manche von Das Datei Format
Nur für Die willen von Zeit.
Aber Wenn Du herunterladen Die Papier das ist verbunden mit Das sprechen,
Die voll Code Ist Dort Und viel mehr Detail.
I hoch empfehlen Das Du Tun Das,
Aber Ich bin gehen Zu geben Sie a Geschmack von Es Hier.
Was Wir Tun nächste Ist Wir Verfahren jede von diese Blöcke Das Wir haben lesen,
Und manche von ihnen Wir dürfen ignorieren.
Wir wollen Zu Filter aus Die Blöcke Das Tun nicht enthalten Überschuss Daten.
Dann Die diejenigen Das Tun, Wir brauchen Zu Tun es ist eigen Parsing.
Was wir haben entdeckt Wann Wir sehen hinein Die Exif-Spezifikation
Ist Das diese Blöcke enthalten ihre eigen Satz von Datenblöcken
angerufen Bild F mit Verzeichnisse oder IFDs.
Dann diese enthalten Person Metadaten Information
mit Schlagworte Spruch Was Die Daten sind
Und Dann Was Format es ist In, Und Dann Die Daten selbst.
Wir wollen Zu sammeln alle von diese Dinge zusammen hinein diese Listen.
Es wird Sei Listen von Listen von Listen, a etwas kompliziert Daten Struktur.
Aber Die Liste Daten Struktur Ist sehr allgemein
Und JMP Und dürfen halten alle Arten von Daten, Also das ist Was Wir wollen Zu verwenden.
Es wird haben diese Metadaten Artikel getaggt
mit diese numerisch Werte Das Wir Anruf Die roh Stichworte,
Aber Wir wollen Zu ersetzen diese
mit tatsächlich menschlich lesbar Etiketten Das identifizieren Was Sie Sind.
Lasst uns sehen bei Das Und JMP, Und Krank sehen bei Demo 4 .
Jetzt, bei Das Punkt,
I haben genommen alle Mein Code In Die "EXIF-Parser" Namespace
Und setzen Es hinein es ist eigen Datei.
Jetzt Demo 4 Ist a Kunde von Mein Code, welche Ist ein „EXIF Parser.jsl.“
I dürfen Nur enthalten Das.
Jetzt, Die Funktion Das bekommt Die Daten,
I dürfen Anruf Es vorbei In Die Name von Die jpeg Datei.
Jetzt Ich habe erweitert Das Funktion In Hier um tatsächlich Verfahren diese Blöcke,
und brechen sie runter, Filter aus Die diejenigen Das Sind nicht EXIF
alle Die Dinge Wir Nur darüber gesprochen, Und geben uns zurück Das Daten Struktur.
Lasst uns laufen Das Und sehen Was Wir erhalten.
Also, Wir erhalten a viel von Zahlen, manche Saiten.
Du sehen, Das Ist In Listen innerhalb Listen hier,
Und es gibt ein äußerste Liste,
Und Dann Es enthält anders Artikel welche Sind Listen.
Jede von diese haben diese Paare von Werte.
Es gibt a Nummer welche Ist Die roh Etikett, Und Dann Die Wert.
Das jemandes a Zeichenfolge. Das eins Ist Auch a Zeichenfolge.
Das jemandes a Nummer. Das jemandes a Matrix.
Der Daten dürfen Sei anders Typen, Aber Die Schlagworte Sind alle Zahlen.
Was Wir wollen Zu Tun nächste Ist konvertieren diese Zahlen hinein menschlich lesbar Artikel.
In Tatsache, Das ganz Liste,
Wir wollen Zu konvertieren Es hinein ein assoziativ Array Das Indizes Die Daten von Tasten.
Der Erste Ding Ich bin gehen Zu Tun
ist definieren a Abbildung aus diese Zahlen zum menschlich lesbar Schlüssel Wir wollen Zu verwenden.
Das ist In Das lang assoziativ Array Rechts Hier.
Jetzt, Ich bin Genau genommen mit Die Verhexen Werte für die Schlüssel,
Weil das ist Wie sie sind spezifiziert In Die Exif-Spezifikation,
Und Es macht Es Einfacher Zu folgen entlang Wann du bist suchen bei Die Spez.
Es gibt a Bündel von diese,
Und Ich bin gehen Zu Start bei Die unten und arbeite mich nach oben.
Runter Hier bei Das Funktion, Etikett Roh Daten.
I bestanden In Das ganz Daten Struktur von dem wir zurückkamen Parsing Die KLECKS.
Hier ist Die Definition von Etikett Roh Daten.
Ich bin gehen Zu zurückkehren
a Liste als Mein Ergebnis,
Also Ich bin gehen Zu gehen durch Die Liste als Mein Eingang Und verwenden Es
Zu bauen hoch Die Ergebnis Liste.
I verwenden Das Für Jede Konstrukt, welche Ist a neu modern JMP-Funktion
Das Spaziergänge durch a Liste, Und für jede Element von Die Liste,
Es zieht Das aus hinein Das Variable roh Exif, das Krank passieren Zu Das Funktion.
Dann I wollen Zu anhängen Es Zu Mein Ergebnis. I Tun Das mit Das Einfügen Hinein Linie.
Ich bin Einfügen Es Zu Die Ende von Ergebnis, Und I haben Zu verwenden Bewertung Liste Zu überwinden
etwas Das JMP Ist tun Zu Sei hilfreich mit Liste Schaffung.
Wieder, es gibt mehr Detail um Das Sachen In Die Papier.
Es ist Wert Herunterladen Und Überprüfung hinein.
Aber für Hier, war Nur gehen Zu sehen bei Die Anruf Zu Etikett EXIF,
Und das ist Rechts hoch Hier.
Etikett EXIF Ist gehen Zu Tun a ähnlich Ding
Wo es ist gehen Zu gehen durch jede von diese Etikett Wert Paare.
Stattdessen von Rückkehr a Liste, es geht Zu zurückkehren ein assoziativ Array.
Hier, Wir Sind Ergebnisse initialisieren Zu Sei ein assoziieren Array.
Das ist Was Das Zeichen bedeutet.
Es ist ein leer assoziativ Array, Und Dann Also zurückkehren Es bei Die Ende.
Also Auch verwenden für jede Zu gehen durch die Liste,
Und Wir wissen Das jede roh Artikel Ist gehen Zu Sei a Liste von zwei Elemente.
Wir erhalten Die Erste Element,
welche Ist Die roh Etikett, und dann die zweite Element ist Die Daten.
Wir einfach bauen hoch unsere assoziative Array von Hinzufügen
ein Artikel verschlüsselt von Die roh Etikett mit Die Wert von Die Daten.
Hübsch einfach, außer Wir will nicht Die Schlüssel Zu Sei Die roh Etikett.
Wir wollen Zu verwandeln Es mit unser Nachschlagen Tisch.
Das ist Was Erhalten Etikett tut, Und das ist definiert nächste hoch Hier.
Es einfach dauert Die Etikett Ausweis Wir passieren In, Konvertiten Es Zu hexadezimal.
Das Wille geben uns zurück ein vierstelliges hexadezimal Zeichenfolge.
Wir brauchen Die Rechts am meisten vier Charaktere daraus,
Und Dann Wir sehen Es hoch In unser Wenn Etikett Array hoch Hier.
Ich bin gehen Zu einreichen alle Das Code
Zu definieren Es, Und Dann wir werden es haben Anruf Etikett Roh Daten.
Hier ist Die Ergebnis.
Du dürfen sehen Das es ist ähnlich Zu vor, außer Jetzt,
stattdessen von Die oberste Levelliste, Es nicht haben ein anderer Liste,
Es hat ein assoziativ Array.
Das Spitze am meisten Ding Ist a Liste von verbunden Arrays.
Das Erste eins Wir dürfen sehen Das Die Rohschlüssel was auch immer Die Nummer War,
bekommen konvertiert Zu DatumT zu tun Und es gibt es ist Wert Und Also An.
Aber wir haben bemerkt Die zweite eins Aussehen wie Es hat Schlagworte
Das nicht erhalten konvertiert.
Warum Ist Das?
Also, es ist Weil Das Schlüssel ExifIFD hat als es ist Daten.
Eigentlich, ein anderer Israelische Verteidigungsstreitkräfte, Ja, Das Ist a rekursiv Daten Struktur
das ist definiert In Bedingungen von selbst.
Wenn Wir wollen Zu Etikett Die Dinge hier drinnen,
Wir haben Zu ändern unser Code Zu rekursiv beschriften,
Und Also erhalten Zu Das In a Minute.
Aber vor I verlassen Das, I wollen Zu zeigen Das Ich bin gehen Zu Genau genommen
kombinieren diese zwei Schritte hinein a einzel Funktion Das I Anruf Erhalten EXIF Daten,
Wo I Erste erhalten Die roh Exif Daten aus von Die KLECKS,
Und Dann I Etikett Es, und dann ich zurückkehren Die Ergebnis von Das.
Lasst uns definieren Und laufen Das,
Und Es sollen Sei genau das gleiche als Was Wir Nur gesehen.
Sicher genug, Es Ist.
Ich bin gehen Zu schließen Das Und gehen zurück Zu Folien.
Ja, Überspringen voraus wieder,
als I erwähnt, Wir haben Zu Tun unser Beschriftung rekursiv.
Als I erwähnt, manche Einträge in unseren Metadaten oder IFDs
haben als ihre Daten ein anderer IFD.
Das bedeutet Wir haben Zu Anruf unser Beschriftung Routine rekursiv.
Der Weg Das I Tun Es,
Ist Zu verwenden Das JSL gebaut- In Rekursion, welche Anrufe Die aktuell Zu Funktion,
Und Du dürfen passieren In separate Parameter für Die rekursiv Anruf.
Es gibt mehr Details An Das In Die Papier,
welche Ich bin Sicher du hast bereits heruntergeladen bei Das Punkt.
Jetzt, Die eins Ding Zu Sei bewusst von
ist das manche von diese eingebettet IFDs, am meisten von ihnen verwenden Die Dasselbe Nachschlagen Tisch
Das Wir bereits definiert,
Aber manche von ihnen haben ihre eigen Nachschlagen Tisch.
Wir haben Zu machen Sicher war vorbei
Die richtig Nachschlagen Tisch mit eigener Definition von Schlagworte
Zu unser rekursiv Anruf als war gehen durch Die anders Ebenen von Rekursion.
Dann einmal Wir haben a voll beschriftet Daten Struktur zurückkehren,
Wir dürfen Extrakt Stücke aus Es um die Dinge war interessiert In.
Wir dürfen laufen Das über a ganz Bildserie
Und sammeln alle Das Daten hinein a Daten Tisch oder manche andere Format.
Lasst uns sehen bei Das In JMP.
Also ziehen hoch Demo 5, welche Hier Ich habe
gerollt alle von Das rekursiv Beschriftung hinein Mein Erhalten EXIF Daten Funktion.
Ich bin gehen Zu enthalten Mein Namespace Code Und Dann laufen Das Funktion.
Jetzt war bekommen zurück
unser voll beschriftet
Daten Struktur.
Du dürfen sehen Das Jetzt diese EXIF-ID hat Etiketten darin.
Dort Ist Das groß Block von Daten von numerisch Sachen,
Und Wir sehen Und Wir sehen Das das ist in Das Ding angerufen Hersteller Notiz.
Hersteller Notiz Ist a besonders Verlängerung Zu Die Exif-Spezifikation
Das erlaubt Die Hersteller von a besondere Gerät, In Das Fall , Apfel,
Die Hersteller von ein iPhone 12, Zu einbetten ihre eigen proprietär Daten.
In manche Fälle, a Kamera Hersteller könnte aufdecken Was Sie haben eingebettet Dort.
In andere Fälle, Menschen haben Sortieren von
erraten bei Es Und kommen hoch mit ihre am besten erraten.
Das ist Die Fall mit Apfel.
Es gibt manche Dinge Das Sind bekannt Und andere Dinge Das sind nicht bekannt.
Du würdest sehen a viel von Das Ist Nur ohne Tag.
Aber manche Dinge Wir dürfen sehen, Beschleunigungsvektor und Laufzeit,
Und was auch immer In Dort.
Ohnehin, war gehen Zu ignorieren, dass für den größten Teil
Und sehen bei Was Das Ding enthält.
I dürfen sehen Das es ist ein assoziativ Array In Das Erste Element,
Und das ist Wo am meisten von Die Dinge I wollen Zu handeln mit
ist ich gehen Zu ziehen Das aus hinein es ist eigen Variable Rechts Hier.
Es hat 14 Elemente, Also Wir dürfen sehen Was diese Sind, Was ihre Schlüssel Sind
wie Also.
Dort Sind diese Tasten.
Wenn Wir wollen Zu ziehen etwas aus wie "Modell,"
I dürfen Tun Das einfach von Indizieren in exif1 „Modell“
Und I dürfen sehen es ist iPhone 12 Pro.
I dürfen Tun Die Dasselbe Ding Zu erhalten Die Datum Zeit, Und Dort Es Ist.
Aber Das Ist In Die Datum Zeit Format Das Die Exif Spezifikation definiert.
Das ist nicht a Format Das JMP erkennt,
Aber I dürfen verwenden JMPs In Formatfunktion Zu konvertieren Es hinein etwas
mit Das Format Muster Option, welche Ist a modern JSL Ding
Das lasst uns uns angeben Die Muster von Die Datum Zeit Daten,
Und JMP Wille konvertieren Es Zu a numerisch Datum Uhrzeit,
welche Es erkennt als solch, Und Formate Es für Die Protokoll.
Das hat funktioniert.
Jetzt, Ich bin Auch interessiert In Die GPS Koordinaten,
Und das ist In Das GPS IFD Teil von Die EXIF.
Es Ist eins von diese Das Ist selbst ein IFD.
Lasst uns Zugang Es, Und Dann Wir dürfen sehen Was Es enthält.
Es hat Information um Die Höhe,
Differential, Bild Richtung, Breite, Länge, Und Geschwindigkeit.
Was Wir Pflege um Ist Die Breite und Längengrad, welche Ist diese vier Dinge.
Es gibt Breite, es gibt Länge,
Und Dann Sie haben diese verbunden Referenz Werte.
Wir brauchen alle vier von diese Zu berechnen Die Koordinaten.
Lasst uns Start mit Die Breite.
Also ziehen Das aus hinein es ist eigen Variable, Und Wir sehen es ist a Liste von drei Elemente.
Wenn Wir sehen bei Was diese drei Elemente sind,
Wir sehen Das Dort Sind drei Vektoren mit zwei Zahlen In jede eins.
Der Exif Spezifikation bezieht sich Zu diese als rationale Zahlen, Und Es verwendet ihnen a viel.
Aber Was Wir wollen Ist tatsächlich Zahlen stattdessen von diese rationale Zahlen,
Zähler ,Nenner.
Wir dürfen konvertieren ihnen mit Das Verwandeln Jede Funktion,
welche Schleifen über Das Liste Und verarbeitet jedes Element
nach Putten Es hinein a lokal Variable R.
Wir wollen Zu Verfahren Das von Teilen
Die Nenner hinein Die Zähler, Und Dann verwandeln jede baut a neu Liste
von diese Ergebnisse und legt es In unser Variable,
Das Sein, wie Du sehen Dort.
Jetzt diese drei Zahlen Sind Die Grad, Minuten, Und Sekunden,
Aber Wir wollen Zu kombinieren ihnen alle hinein a einzel Wert für JMP Zu verwenden.
Wir haben Zu hinzufügen ihnen zusammen, Skalierung jede Komponente entsprechend.
Tun Das Dort Und Wir erhalten
Die Wert.
Jetzt, Wenn das ist In Die Nördlich Hemisphäre, war Bußgeld.
Aber Wenn es ist In Die Süd Hemisphäre, Es Bedürfnisse Zu Sei Negativ.
Wenn Wir sehen bei Das "GPSL" HaltungR Wenn,"
es ist entweder N oder S, welche erzählt uns Wenn es ist S, Wir brauchen Zu negieren Es.
Wir dürfen Tun Die Dasselbe Ding für Länge.
Es ist LängengradR Wenn Wille Sei entweder E oder IN.
E Ist positiv Ost Werte Und W Ist Negativ Westen Werte.
Hier Wir sehen Wir hatte Zu negieren
Die Länge Weil Es War In Die Westen.
Wenn Wir entsorgen diese zwei Zahlen aus, Wir dürfen verwenden JMPs gebaut- In Formate für
Breite Und Länge,
Und Wir dürfen verifizieren Das Sie übereinstimmen
was die Funde dürfen ziehen aus von Die Datei als diese Koordinaten.
Wir dürfen sehen Das es ist Norden Und Westen, Also es ist In Norden Amerika.
Jetzt Ich bin gehen Zu überspringen Zu Demo 6 , Wo Wir setzen alle Das zusammen.
Ich bin gehen Zu verwenden Das Code Zu Informationen abrufen
aus von a ganz Bündel von Fotos.
In Das Ordner, I haben 16 von ihnen,
Und sie sind Fotos Das Ich habe genommen bei vorherige JMP Entdeckung Gipfel
In Europa An Jahre zurück wenn wir gebraucht Zu Tun ihnen In Person.
Es wird setzen alle Die Info Es Funde hinein a Daten Tisch.
Ich bin gehen Zu laufen Das Und hier ist unser Daten Tisch,
Und Wir dürfen sehen Das Ich habe gefangen Die Namen von Die Bild Dateien
Und Die Zeitstempel.
Du dürfen sehen Es geht aus 2016 Zu 2018,
Und Die Lat und L NGOs Sind Norden Und Ost, Also das ist Europa.
I dürfen sogar sehen Die Progression von verschiedene iPhone-Modelle, die ich hatte
über diese Jahre Und Wie ihre Linsen verbessert über Zeit.
Ich habe Satz Das hoch Also Das I dürfen Wählen Sie eine Zeile aus
Und klicken Das Erhalten Info Tabellenskript, Und Es öffnet a Fenster für Mich
Das zeigt Mich Die Foto und die Metadaten für Es
Das Ich habe gefangen.
I sogar haben a Taste Hier Anzeige von Google Maps,
Also I dürfen klicken Das, Und up pops a Google Karte von Das Standort.
Es ist Rechts Dort mit Die Rot Marker.
I dürfen sehen, ob ich z Onkel In dass dies Die Hilton Amsterdam.
Das ist Wo Wir hatte Die Konferenz In 2016.
Das alle scheint Zu arbeiten Also,
I n Das Fall,
Ich bin gehen Zu hinzufügen Die Fotos selbst Zu Mein Daten Tisch als ein Ausdruck Spalte.
Das ist Was Das Hinzufügen Fotos Tisch Skript tut.
Für größer Sammlungen, I würde nicht wollen Zu Tun Das
denn es ist eigentlich Herstellung a Kopie dieser Fotos hinein Die Daten Tisch.
Aber für 16, es ist Bußgeld.
Für Tausende oder sogar Hunderte, du würdest wahrscheinlich nicht wollen Zu Tun Das.
Aber es ist Auch Satz Mein neue Spalte Zu Sei a Etikett Spalte.
Jetzt I dürfen laufen Das Forscher Skript welche öffnet
a Graph Baumeister von diese Breitengrade Und Längengrade.
I dürfen sehen manche Punkte Hier. Hier ist Amsterdam.
Es gibt a Foto Wir Nur gesehen und hier ist manche mehr.
Das ist definitiv Amsterdam.
Diese Sind Brüssel. Ja, das ist Brüssel.
Über Hier, Wir haben Frankfurt.
Das Jahr, Wir bekommen Zu gehen Zu Die Cool
Supersportwagen Museum.
Das War hübsch sauber.
Über Hier Wir haben Prag.
Ich bin gehen Zu verwenden Die Lupe Zu Vergrößern An Prag a Paar von mal.
A t Das Punkt unser detailliert Erde Hintergrund Ist nicht Wirklich Portion uns viel
Also Ich bin gehen Zu schalten zur Straße Karte Service.
Wir dürfen sehen, Ja, das ist definitiv Prag,
Und Hier Ist Wo Wir ritt Die historisch Straße Autos bis zur Prager Burg
Hier Ist manche JMP Teilnehmer Kreuzung Die Brücke zur Prager Burg.
I dürfen sehen John fallen Dort In Die Distanz.
Über Hier, Wir haben a sehr Hübsch Rezeption Das Wir gehalten In Die kommunale Saal.
Hier ist Mich Überprüfung Die Zeit
An Mein Apfel betrachten gegen Die Uhr Zu machen Sicher Das es ist Rechts.
Das alle scheint Zu Sei tun Was Wir wollen.
In Abschluss, I wollen Zu berühren An Die Dinge Das Wir gelernt.
Wir gelernt um Die JSL Objekt KLECKS,
welche Ist a Gut Werkzeug Zu haben An dein Werkzeug Gürtel
für manipulieren willkürlich Binärdaten.
Wir verwenden Das Zu bauen hoch a wenig Anwendung für Importieren Dateien.
Entlang Die Weg, Wir gelernt manche Dinge über Namespaces, Und JSL Rekursion,
spezialisiert Liste Handhabung, Und manche modern JSL Dinge wie Verwandeln Jede, Für Jede.
Bei ain diese Dinge Sind bedeckt In viel mehr Detail In Die Papier.
Aber am meisten wichtig,
I denken Ist Das Wir gesehen a Fall Studie wie man nehmen a schwierig Problem
wie a komplexes Dateiformat
Und brechen Es hinein kleinere Teilaufgaben Das Wir könnte erobern.
Das ist a Fähigkeit Das Wir alle haben Und brauchen Zu machen verwenden von In unser Professional arbeiten.
Aber I denken es ist viele mal hilfreich Zu
beobachten jemand anders tun Es und abholen Tipps Und Werkzeuge Und Techniken
Das Wir dürfen Dann verwenden In unser eigen arbeiten.
Jetzt I wollen Zu drehen Es über Zu Du
Zu nehmen diese Werkzeuge Und verwenden ihnen Zu Import Und schreiben Die Code Zu erstellen dein eigen
binär Dateien Und lösen dein eigen Probleme.
Dank Du sehr viel.