SonyUserforum

SonyUserforum (https://www.sonyuserforum.de/forum/index.php)
-   Nach der Aufnahme (https://www.sonyuserforum.de/forum/forumdisplay.php?f=12)
-   -   [Mac/Linux/Win] Visualizer of AF data from Sony cameras (JPEG&ARW EXIFs) (https://www.sonyuserforum.de/forum/showthread.php?t=178894)

meshua 03.05.2017 09:11

[Mac/Linux/Win] Visualizer of AF data from Sony cameras (JPEG&ARW EXIFs)
 
Guten Morgen,

Dies ist eine Fortsetzung aus dem A9-Thread, wo "herby1961" ein Tool (Python-Script) zur Visualisierung von AF-Fokuspunkten in SONY JPEG/ARW Dateien vorgestellt hat. Danke hierfür!!! :top:

Installation und Nutzung

In diesem separaten Thread soll es um einen Erfahrungsaustausch bei Verwendung des Tools "Visualizer of AF data from Sony cameras" gehen. Das Script ist quelloffen und auf GitHub herunterladbar. Es wird bisher erfolgreich unter Windows, MacOS und Linux (Ubuntu 16.04.2) verwendet.

Windows 7:
  1. Phyton von https://www.python.org/downloads/release/python-360/ installiert
  2. https://bootstrap.pypa.io/get-pip.py local abgespeichert.
  3. durch doppelklick die Datei get-pip.py ausgeführt (nach installation von Python)
  4. auf einem Windows Command Prompt die Kommandos:
    Code:

    pip install matplotlib
    pip install rawpy
    pip install pillow

  5. Phil Harvey's EXIFTool binary (named exiftool.exe) to be placed in the same folder as afv.py script. Exiftool download (http://www.sno.phy.queensu.ca/~phil/exiftool/)
  6. Das Phyton Script https://github.com/SK-Hardwired/s_afv
    Mittels Copy and Paste in einen Texteditor kopiert und ins selbe Verzeichnis wie Punkt 5.)
  7. afv.py durch doppelklick starten.

(Quelle)


MacOS:
  1. Python 3.4+ herunterladen: Python 3.6.1 - Mac OS X 64-bit/32-bit installer (for Mac OS X 10.6 and later), Installationsanleitung folgen. Python 3.x wird parallel zum mit MacOS ausgelieferten Python 2.7 installiert und kann anschließend mit dem Kommando "python3" direkt aufgerufen werden.
  2. https://bootstrap.pypa.io/get-pip.py lokal abspeichern (z.B. im eigenen Benutzerverzeichnis ./Applications/AFV) und mit folgendem Aufruf nach Python3 installieren: "sudo python3 ./Applications/AFV/get-pip.py" (via 'sudo', weil zur Installation administrative Rechte benötigt werden - sonst funktioniert es nicht ohne Fehler.)
  3. Jetzt nacheinander die für das Script erforderlichen Pakete installieren: Dies geschieht am einfachsten mit PIP, weshalb dies im Schritt zuvor installiert wurde. Um die PIP-Version der Python3.x Installation anzusprechen, erfolgt der Aufruf via 'pip3':
    Code:

    pip3 install matplotlib
    pip3 install rawpy
    pip3 install pillow

  4. Phil Harvey's EXIFTool für MacOS herunterladen (Mac OS X Package: ExifTool-10.51.dmg (2.6 MB)) und in den gleichen Ordner (./Applications/AFV/) wie das noch gleich herunterzuladende eigentliche Script 'afv.py' platzieren
  5. Abschließend noch das eigentliche Phyton Script für die Fokuspunkt-Darstellung herunterladen: https://raw.githubusercontent.com/SK.../master/afv.py und ebenfalls in den zuvor angelegten Ordner "./Applications/AFV/" speichern.
  6. Das Script muss noch etwas angepasst werden. Folgende Zeile zu Beginn einfügen:
    Code:

    import matplotlib
    matplotlib.use('TkAgg')

    um Mathplot fehlerfrei nutzen zu können. Außerdem ist im Script noch ein "exiftool.exe" Aufruf vorhanden, wo zumindest der ".exe"-Suffix entfernt werden sollte. ;)
  7. Das Script kann jetzt ausgeführt werden und eine minimalistische GUI sollte erscheinen: "python3 ./Applications/AFV/afv.py"

Linux:

Siehe MacOS.
  • Zusätzlich muss (gegebenenfalls) noch die "libraw" Bibliothek von Python installiert werden (Danke an RainerWP für diesen Hinweis!):
    Code:

    sudo apt-get install libraw-dev

Troubleshooting

(1) Problem (MacOS/Linux): Beim Laden eines ARW oder JPEG Files (A7MII) kommt es leider zu einer Exception im zusätzlich eingebundenen Paket 'Tkinter':
Code:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
    return self.func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/backends/backend_tkagg.py", line 420, in button_release_event
    FigureCanvasBase.button_release_event(self, x, y, num, guiEvent=event)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/backend_bases.py", line 1940, in button_release_event
    self.callbacks.process(s, event)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/cbook.py", line 554, in process
    proxy(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/cbook.py", line 416, in __call__
    return mtd(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/widgets.py", line 229, in _release
    func(event)
  File "./Applications/AFV/afv.py", line 72, in ofile
    self.start(F)
  File "./Applications/AFV/afv.py", line 136, in start
    tag,val = each.split(':',1) # '1' only allows one split
ValueError: not enough values to unpack (expected 2, got 1)

Ursache: "Exiftool" wird im Script an zwei Stellen mit einem unter MacOS nicht kompatiblem Parameter aufgerufen (",shell=True").
Lösung: Den o.g. Parameter aus dem Exiftool-Aufruf entfernen behebt das Problem, und "Exiftool" wird von nun an korrekt ausgeführt.

Soweit eine kurze Einführung zur Installation/Konfiguration und zum Erstaufruf von 'afv.py'.

Beste Grüße, euer meshua

herby1961 03.05.2017 10:06

Installation Windows 7
 
Ich hänge mal meine Installationsanleitung für Windows 7 auch hier rein:

1) Phyton von https://www.python.org/downloads/release/python-360/ installiert
2) https://bootstrap.pypa.io/get-pip.py local abgespeichert.
3) durch doppelklick die Datei get-pip.py ausgeführt (nach installation von Python)
4) auf einem Windows Command Prompt die Kommandos:
pip install matplotlib
pip install rawpy
pip install pillow
5) Phil Harvey's EXIFTool binary (named exiftool.exe) to be placed in the same folder as afv.py script. Exiftool download (http://www.sno.phy.queensu.ca/~phil/exiftool/)
6) Das Phyton Script https://github.com/SK-Hardwired/s_afv
Mittels Copy and Paste in einen Texteditor kopiert und ins selbe Verzeichnis wie Punkt 5.
7) afv.py durch doppelklick starten.

Unter Mac OSX habe ich auch kein Problem Python 3.6 parallel zu installieren. Aber danach macht es Probleme mit mittels "pip" nachzuinstallierenden Modulen. Die krieg ich momentan nicht in die 3.6 Version.

Beste Grüße
Herby

NetrunnerAT 03.05.2017 12:30

Ich bin so oder so dafür, dass wir ein Unterforum erstellen, wo wir solche Projekte zusammen tragen. Das macht es freundlicher für zukünftige Entwickler etc ...

Es wäre schade wenn so ein nützliches Projekt, irgend wann im See der Beiträge verschwindet!

meshua 03.05.2017 18:22

MacOS Installationsanleitung & Konfiguration ergänzt. ;) Leider läuft das Script immer noch nicht fehlerfrei...wer Ideen hat, was die Ursache sein könnte: lasst es uns alle wissen... :crazy::top:

Viele Grüße, meshua

herby1961 03.05.2017 22:01

Zitat:

Zitat von meshua (Beitrag 1913084)
MacOS Installationsanleitung & Konfiguration ergänzt. ;) Leider läuft das Script immer noch nicht fehlerfrei...wer Ideen hat, was die Ursache sein könnte: lasst es uns alle wissen... :crazy::top:

Viele Grüße, meshua

Hi meshua,

So wie es aussieht funktionert das Füllen des Bereichs "exifdata" durch das tool exiftool nicht sauber.

Wenn ich exiftool -a 20170501-15-27-31-A6509604.ARW manuell in dem Verzeichniss aufrufe bekomme ich folgenden output:

Code:

ExifTool Version Number        : 10.50
File Name                      : 20170501-15-27-31-A6509604.ARW
Directory                      : .
File Size                      : 24 MB
File Modification Date/Time    : 2017:05:01 15:27:30+02:00
File Access Date/Time          : 2017:05:03 21:41:08+02:00
File Inode Change Date/Time    : 2017:05:02 17:06:14+02:00
.........

der bereich "exifdata" wird dann Zeile für Zeile in folgender Schleife gelesen:

Code:

          for i,each in enumerate(exifdata):
            # tags and values are separated by a colon
            tag,val = each.split(':',1) # '1' only allows one split
            exif[tag.strip()] = val.strip()

Rot hervorgehoben habe ich den Code der jede Zeile des Bereichs "exifdata in dem ein Tag:Value Pair geteilt durch ":" erwartet werden in ein zwei Variable tag and val aufsplitten und in der nächsten zeile in einem Array "exif" speichern soll. Offensichtlich ist da nicht das erwartete Format. Damit steigt das Programm aus.

Irgendwas geht da offensichtlich beim Aufruf von exiftool schief und wird nicht reported.

Ich habe einen Kollegen der sich mit Python auskennt, den werde ich morgen mal fragen wie man das debuggen kann.

Grüße
Herby

usch 04.05.2017 00:01

Zitat:

Zitat von meshua (Beitrag 1912939)

Der Link ist kaputt. Besser: https://github.com/SK-Hardwired/s_afv


Zitat:

ValueError: not enough values to unpack (expected 2, got 1)
Da hat sich eine Zeile in die Daten gemogelt, die keinen Doppelpunkt enthält. Da das nicht aus dem regulären Output von exiftool stammen kann, muss das entweder eine Fehlermeldung sein, oder exiftool ist gar nicht aufgerufen worden. Ändere die Schleife mal so ab:

Code:

          for i,each in enumerate(exifdata):
            if ':' in each:
              # tags and values are separated by a colon
              tag,val = each.split(':',1) # '1' only allows one split
              exif[tag.strip()] = val.strip()
            else:
              print each

Das sollte dann die fehlerhafte(n) Zeile(n) ausgeben und ansonsten fehlerfrei laufen.

herby1961 04.05.2017 07:56

Hallo Usch,

Vielen Dank für Deinen Input. Das hat mal gut weitergeholfen. Kleine Anmerkung unter Python 3.6 muss es

Code:

print (each)
sein.

Damit habe ich gesehen das die gesamte Hilfe von exiftool ausgegeben wird.

Damit wird exifdata ausgeführt

Code:

        exifdata = subprocess.check_output(['exiftool','-a',F],shell=True,universal_newlines=True,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
aber offensichtlich ohne die Parameter -a und F aufgerufen.

das muss offensichtlich unter macOS anders parametriert werden als unter windows. Und damit sind wir bei der nächsten Herausforderung. Wie frägt man ab unter welchem Betriebssystem das Script läuft und löst den richtigen Aufruf aus?

Werde mal suchen, vielleicht hat in der Zwischenzeit wer eine Idee.

Grüße
Herby

meshua 04.05.2017 08:52

Guten Morgen,

Zitat:

Zitat von usch (Beitrag 1913233)
Der Link ist kaputt. Besser: https://github.com/SK-Hardwired/s_afv

Danke!!! Ist korrigiert.

Zitat:

Zitat von herby1961 (Beitrag 1913256)
Hallo Usch,

Damit habe ich gesehen das die gesamte Hilfe von exiftool ausgegeben wird.

Damit wird exifdata ausgeführt

Code:

        exifdata = subprocess.check_output(['exiftool','-a',F],shell=True,universal_newlines=True,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
aber offensichtlich ohne die Parameter -a und F aufgerufen.

das muss offensichtlich unter macOS anders parametriert werden als unter windows. Und damit sind wir bei der nächsten Herausforderung. Wie frägt man ab unter welchem Betriebssystem das Script läuft und löst den richtigen Aufruf aus?

Werde mal suchen, vielleicht hat in der Zwischenzeit wer eine Idee.

Interessant, zumal der Entwickler schrieb "it is Python script, actually, so you can try to launch it at Linux or MacOS with Python" - da ging ich naiv davon aus, daß der Code auch hierunter entwickelt und getestet wurde - das war eben naiv von mir! :P;)

Wir kommen dem Problem aber näher...:top:

Viele Grüße, meshua

usch 04.05.2017 13:40

Zitat:

Zitat von herby1961 (Beitrag 1913256)
das muss offensichtlich unter macOS anders parametriert werden als unter windows.

Das ist noch nicht raus. Vielleicht ist nur der Dateiname irgendwo verloren gegangen.
Mach mal ein print (F) vorher.

herby1961 04.05.2017 18:17

Zitat:

Zitat von usch (Beitrag 1913385)
Das ist noch nicht raus. Vielleicht ist nur der Dateiname irgendwo verloren gegangen.
Mach mal ein print (F) vorher.

Ich habe es geschafft. Statt der Zeile:

Code:

# exifdata = subprocess.check_output(['exiftool', '-a',F],shell=True,universal_newlines=True,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
ist es unter macOS

Code:

exifdata = subprocess.check_output(['exiftool', '-a', F],universal_newlines=True)
welche der drei Parameter shell=, stderr=, stdin= er ihn wirklich stört habe ich jetzt nicht weiter erforscht.


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:37 Uhr.