PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Mac/Linux/Win] Visualizer of AF data from Sony cameras (JPEG&ARW EXIFs)


meshua
03.05.2017, 09:11
Guten Morgen,

Dies ist eine Fortsetzung (http://www.sonyuserforum.de/forum/showpost.php?p=1912845&postcount=661) aus dem A9-Thread, wo "herby1961" ein Tool (Python-Script) zur Visualisierung von AF-Fokuspunkten (https://github.com/SK-Hardwired/s_afv) 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 (https://raw.githubusercontent.com/SK-Hardwired/s_afv/master/afv.py). Es wird bisher erfolgreich unter Windows, MacOS und Linux (Ubuntu 16.04.2) verwendet.

Windows 7:

Phyton von https://www.python.org/downloads/release/python-360/ installiert
https://bootstrap.pypa.io/get-pip.py local abgespeichert.
durch doppelklick die Datei get-pip.py ausgeführt (nach installation von Python)
auf einem Windows Command Prompt die Kommandos:
pip install matplotlib
pip install rawpy
pip install pillow
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/)
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.)
afv.py durch doppelklick starten.


(Quelle (http://www.sonyuserforum.de/forum/showpost.php?p=1912875&postcount=663))


MacOS:

Python 3.4+ herunterladen: Python 3.6.1 - Mac OS X 64-bit/32-bit installer (https://www.python.org/ftp/python/3.6.1/python-3.6.1-macosx10.6.pkg)(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.
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.)
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':
pip3 install matplotlib
pip3 install rawpy
pip3 install pillow
Phil Harvey's EXIFTool (http://www.sno.phy.queensu.ca/~phil/exiftool/) für MacOS herunterladen (Mac OS X Package: ExifTool-10.51.dmg (2.6 MB) (http://www.sno.phy.queensu.ca/~phil/exiftool/ExifTool-10.51.dmg)) und in den gleichen Ordner (./Applications/AFV/) wie das noch gleich herunterzuladende eigentliche Script 'afv.py' platzieren
Abschließend noch das eigentliche Phyton Script für die Fokuspunkt-Darstellung herunterladen: https://raw.githubusercontent.com/SK-Hardwired/s_afv/master/afv.py und ebenfalls in den zuvor angelegten Ordner "./Applications/AFV/" speichern.
Das Script muss noch etwas angepasst werden. Folgende Zeile zu Beginn einfügen:
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. ;)
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!):
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':
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
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
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:


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:

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
https://github.com/SK-Hardwired/s_af.../master/afv.py
Der Link ist kaputt. Besser: https://github.com/SK-Hardwired/s_afv


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:


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

print (each)

sein.

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

Damit wird exifdata ausgeführt

exifdata = subprocess.check_output(['exiftool','-a',F],shell=True,universal_newlines=True,stdin=subproce ss.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,

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

Danke!!! Ist korrigiert.

Hallo Usch,

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

Damit wird exifdata ausgeführt

exifdata = subprocess.check_output(['exiftool','-a',F],shell=True,universal_newlines=True,stdin=subproce ss.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 (https://www.dpreview.com/forums/thread/4118754) "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
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
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:

# exifdata = subprocess.check_output(['exiftool', '-a',F],shell=True,universal_newlines=True,stdin=subproce ss.PIPE,stderr=subprocess.PIPE)

ist es unter macOS

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.

meshua
04.05.2017, 20:48
Ich habe es geschafft.

exifdata = subprocess.check_output(['exiftool', '-a', F],universal_newlines=True)


Cool! Danke! Jetzt läuft's auch unter Sierra einwandfrei :top: Jetzt noch ein LR-Plugin... ;)

Viele Grüße, meshua

herby1961
05.05.2017, 14:44
Cool! Danke! Jetzt läuft's auch unter Sierra einwandfrei :top: Jetzt noch ein LR-Plugin... ;)

Viele Grüße, meshua

Bin leider kein Programmierer. Habe aber den Author des lightroomfocuspoints-plugins angeschrieben, das derzeit nur Canon und Nikon und die Sony A77 als Betaversion unterstützt, ob er die Programlogik aus dem Pythonscript für Sony integrieren kann. Ich würde ihn unterstützen mit Beispielfotos und Beta Tests. Aber habe noch keine Antwort bekommen.

Grüße
Herby

meshua
05.05.2017, 19:53
Danke Herby,

Anbei nun noch ein Beispielbild, wie es mit der A7MII aussehen kann (MacOS Sierra):

6/DSC05396_AF_Points.jpg
→ Bild in der Galerie (http:../galerie/details.php?image_id=272519)

Weitere Bugs: Im Script gibt es noch weitere "fehlerhaftete" Aufrufe des Exiftools - die "Save" Funktion bleibt an der Exiftool-Hilfe stecken. Da muß wohl nochmals der Kehrbesen durch die Zeilen... ;)

Viele Grüße, meshua

herby1961
05.05.2017, 20:50
Danke Herby,

Anbei nun noch ein Beispielbild, wie es mit der A7MII aussehen kann (MacOS Sierra):

6/DSC05396_AF_Points.jpg
→ Bild in der Galerie (http:../galerie/details.php?image_id=272519)

Weitere Bugs: Im Script gibt es noch weitere "fehlerhaftete" Aufrufe des Exiftools - die "Save" Funktion bleibt an der Exiftool-Hilfe stecken. Da muß wohl nochmals der Kehrbesen durch die Zeilen... ;)

Viele Grüße, meshua

Gibt es genau noch einmal, wie gesagt beim save. Habe den Code geändert in:

subprocess.call(['exiftool','-tagsFromFile',F,sname,'-overwrite_original_in_place'])

also "shell=True" weggenommen. Dann funktioniert es.

RainerWP
06.05.2017, 19:11
Hi,

cooles Tool. Beim letzten User-Treffen in Bremehaven hatte ich die Kollegen gefragt ob sie so ein Tool kennen, war aber keinem bekannt.
Dank der Infos hier konnte ich das Skript auch unter Ubuntu (16.04.2) zum laufen kriegen.

Danke an alle Beteiligten :top:

Bis dann..............

Rainer

meshua
06.05.2017, 20:48
Hi,
Dank der Infos hier konnte ich das Skript auch unter Ubuntu (16.04.2) zum laufen kriegen.

Danke an alle Beteiligten :top:


Danke für dein positives Feedback, Reiner! Das ist eben einer der großen Vorteile von Scripts, daß sie auf fast allen Plattformen laufen. Der Dank gebührt vor allem herby1961, der uns erst auf dieses Script hingewiesen hat.:top: :crazy:

PS: Habe im Eingangspost noch zum Problem (Aufruf Exiftool) auch kurz die Lösung ergänzt.

Viele Grüße, meshua

RainerWP
07.05.2017, 05:56
Hi,

noch zur Ergänzung. Ich habe mich an die Installatonsanleitung für MacOS gehalten.
Installieren musste ich noch :
sudo apt-get install libraw-dev
damit die libraw Bibliothek von Python installiert werden konnte.

Bis dann..............

Rainer

meshua
07.05.2017, 10:25
(...)die libraw Bibliothek von Python installiert werden

:top::top::top: Danke Reiner - ich hab's dem Eingangspost hinzugefügt! :D

Eine Frage: Musstest du auch unter Linux/Ubuntu "shell=True" aus dem Originalscript beim Aufruf des Exiftools entfernen, damit es fehlerfrei läuft?

Viele Grüße, meshua

RainerWP
07.05.2017, 11:40
Eine Frage: Musstest du auch unter Linux/Ubuntu "shell=True" aus dem Originalscript beim Aufruf des Exiftools entfernen, damit es fehlerfrei läuft?


Hi,

ja musste ich :D

Bis dann...............

Rainer :D

herby1961
07.05.2017, 20:28
Hi,

ich habe ein LR Plugin als opensource gefunden:

https://github.com/musselwhizzle/Focus-Points

Wer kann das Programm um Sony Kameras erweitern? Für Beta Tests und Testfotos mit A7II und A6500 stelle ich mich gerne zur Verfügung.

Grüße
Herby

SK-Hardwired
06.06.2017, 11:12
Hi!

I stumbled upon your forum and discussion.
Thank you for your attention to my tool/script.

Here are some updates and news of this tool:
1. Dropbox changed the rules of usage and disabled folder where windows binaries were located. Now all binaries are moved to Google Drive. Hope they will be accessible from there.
2. Due to compatibility problems (with MSVC libraries) of binaries with some Windows versions, I decided to rewrite code in Python 2.7. So I've created new branch at github and now Python 2.7 version is master and is being developed. Old version branch still available, but WILL NOT BE UPDATED by me.
3. Support of ILCE-9 (both JPEG and RAW) added.
4. Quick 1:1 zoom / Fit to screen button added for convenience. Then you can use PAN/ZOOM button to move around.

To do (but not promise):
1. Add support of auto-rotation and proper markers display of portrait-oriented photos.
2. Who knows what ideas will come!

Updated code and links to fresh binaries are available at https://github.com/SK-Hardwired/s_afv

P.S. I have Windows only and my PC so couldn't help with Linux yet (but may consider in future at virtual PC) and MacOS for sure.
You are feel free to adapt the code as you wish and if you are interested.

RainerWP
06.06.2017, 18:58
@SK-Hardwired

thanks for your program and the information about updates.
Once I get a little bit more time I'll update to the new version.
If you want I'll write down the steps I took to install it on my Linux System (Ubuntu 16.04 LTS)

Have a nice day, Rainer

herby1961
20.08.2017, 22:45
Hello all,

i write in english as the author of the software not speaking german.

I get the new script with the hints in the first posting also running with python 2.7 on the mac. All worked ok with the new ILCE-9 until i upgraded the firmware to v1.01. Then the script chrashed with an error at line:

ydiff = int(exif.get('Sony Image Height'))

after investigation and running the exiftool on command line i found out that in the firmware of the ILCE-9 there are two "Sony Image Height" entries. In v1.00 both have the same value "4000"

But in the v1.01 version the second entry have "n.a". As the script writes each entry of the exiftool in a table with "tag,value" pair the second "Sony Image height" TAG overwrites the first and the line "ydiff =...." cannot work with this value.

When i change the code to:

ydiff = int(exif.get('Exif Image Height'))

which have the same value in my raw images as "Sony Image Height" should have, so it work with this workaround.

The problem is only with RAW images. JPEG work fine.

I will write tomorrow the author of the exiftool and sk-hardwire to explain the behavior of the exifdata in ILCE-9 v1.01.

This behavior is on both windows and macOS. tested with exiftools 1.50, 1.60 and 1.61.

Second problem is that script crashes with detected faces. But only when the script is running on macOS. Windows is fine. I will investigate this problem the next days when i have time.

regards
Herby

herby1961
21.08.2017, 14:39
Nach dem ich mir eine virtuelle Python Umgebung aufgebaut habe und dort alle Pakete lt. Anleitung im ersten Eintrag nachinstalliert habe funktioniert das Script auch mit der Gesichtserkennung.

Anleitung zum einrichten einer virtuellen Python Umgebung im macOS unter http://sourabhbajaj.com/mac-setup/Python/virtualenv.html

After i have installed a virtual environment for Python and installed the latest version of the packages in the virtual environment the script recognize also the faces and draw the rectangles. The matplotlib package in my main python environment was an older version and not upgradeable.

Configuration description for the virtual environment on macOS on:
http://sourabhbajaj.com/mac-setup/Python/virtualenv.html

regards
Herbert

s7eFan
21.08.2017, 21:58
Das ganze macht aber nur Sinn, wenn man die Kamera nach dem Fokusieren nicht mehr verändert, oder?

Wenn man wie ich meistens mit AF-Mitte das Objekt anvisiert, halb durchdrückt, Bildausschnitt verändert und dann ganz durchdrückt, erhält man eben immer in der Mitte den gelben Kreis :-)

herby1961
21.08.2017, 22:30
Das ganze macht aber nur Sinn, wenn man die Kamera nach dem Fokusieren nicht mehr verändert, oder?

Wenn man wie ich meistens mit AF-Mitte das Objekt anvisiert, halb durchdrückt, Bildausschnitt verändert und dann ganz durchdrückt, erhält man eben immer in der Mitte den gelben Kreis :-)

Das Tool wird interessant für Facerecognition, Eye-AF und Lock-on AF Modi im AF-C.

radla
02.09.2019, 22:55
Besten Dank für die Anleitung!
Falls noch jemand Probleme mit:
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/axis.py", line 1550, in convert_units
ret = self.converter.convert(x, self.units, self)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/category.py", line 52, in convert
'Missing category information for StrCategoryConverter; '
ValueError: Missing category information for StrCategoryConverter; this might be caused by unintendedly mixing categorical and numeric data

hat, dann liegt das an der falschen matplotlib Version (src: https://github.com/SK-Hardwired/s_afv/issues/2):
deinstallieren: pip uninstall matplotlib
richtige installieren: pip install matplotlib==2.0.2

damit hat es bei mir nun auch endlich funktioniert!

Gibt es eigentlich was neues bzgl. des Lightroom Plugins? https://github.com/musselwhizzle/Focus-Points Das dürfte doch eigentlich auch nicht so schwer anzupassen zu sein.