OVH Cloud OVH Cloud

macOS Sierra, visualiser la direction d'une photo sur une carte ?

54 réponses
Avatar
Une Bévue
avec l'iPhone 6, les données GPS incluent la direction de prise de vue
(compas), existe t'il un logiciel permettant de montrer cette direction
(et donc pas seulement le point d'où a été prsie la photo) ?

exemple :
$ exiftool '/Users/yt/Downloads/IMG_3130.JPG'
ExifTool Version Number : 10.20

[...]

Make : Apple
Camera Model Name : iPhone 6

[...]

GPS Latitude Ref : North
GPS Longitude Ref : West
GPS Altitude Ref : Above Sea Level
GPS Time Stamp : 07:11:21
GPS Speed Ref : km/h
GPS Speed : 0
GPS Img Direction Ref : True North
GPS Img Direction : 312.9102564
GPS Dest Bearing Ref : True North
GPS Dest Bearing : 312.9102564
GPS Date Stamp : 2016:12:06
GPS Horizontal Positioning Error: 65 m

[...]

GPS Altitude : 26.6 m Above Sea Level
GPS Date/Time : 2016:12:06 07:11:21Z
GPS Latitude : 55 deg 55' 15.39" N
GPS Longitude : 4 deg 28' 44.01" W
GPS Position : 55 deg 55' 15.39" N, 4 deg 28' 44.01" W

[...]

10 réponses

2 3 4 5 6
Avatar
Une Bévue
Le 31/12/2016 à 15:43, Julien Salort a écrit :
Une solution en Python avec cartopy. Avec macports, il faut installer
py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy.

bon là, j'ai des pbs.
D'abord, je n'utilise pas MacPorts mais brew.
j'ai donc installé python (pour éviter d'utiliser le python "systemwide") :
$ python -V
Python 2.7.13
pip, n'a pas voulu installer "py27-matplotlib" mais "matplotlib".
numpy est déja installé.
impossible d'installer aussi bien "py27-exif" que "exif".
l'installation de "cartopy" commence mais réclame "Proj4" :
$ pip install cartopy
Collecting cartopy
Downloading Cartopy-0.14.2.tar.gz (8.4MB)
100% |████████████████████████████████| 8.4MB 158kB/s
Complete output from command python setup.py egg_info:
Unable to find pgen, not compiling formal grammar.
warning: no files found matching '*.pyx' under directory
'Cython/Debugger/Tests'
warning: no files found matching '*.pxd' under directory
'Cython/Debugger/Tests'
warning: no files found matching '*.h' under directory
'Cython/Debugger/Tests'
warning: no files found matching '*.pxd' under directory
'Cython/Utility'
Installed
/private/var/folders/17/_68cm2p91g54jmmzzdkdt6jr0000gn/T/pip-build-cFrRUG/cartopy/.eggs/Cython-0.25.2-py2.7-macosx-10.12-x86_64.egg
/private/var/folders/17/_68cm2p91g54jmmzzdkdt6jr0000gn/T/pip-build-cFrRUG/cartopy/setup.py:174:
UserWarning: Unable to determine GEOS version. Ensure you have 3.3.3 or
later installed, or installation may fail.
'.'.join(str(v) for v in GEOS_MIN_VERSION), ))
Proj4 4.9.0 must be installed.
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in
/private/var/folders/17/_68cm2p91g54jmmzzdkdt6jr0000gn/T/pip-build-cFrRUG/cartopy/
enfin, Proj4 ne s'installe pas :
$ pip install Proj4
Collecting Proj4
Could not find a version that satisfies the requirement Proj4 (from
versions: )
No matching distribution found for Proj4
idem pour py27-Proj4
mais bon le prefix "py27" est peut-être spécifique à MacPorts.
je suis total débutant en Python...
Avatar
g4fleurot
Une Bévue a bien voulu nous faire partager ses réflexions sur ce
passionnant sujet :
bon là, j'ai des pbs.
D'abord, je n'utilise pas MacPorts mais brew.

Je n'y comprend pas grand chose, mais j'ai trouvé :
<http://louistiao.me/posts/installing-cartopy-on-mac-osx-1011/>
Je te suggère une recherche cartopy.
Il y a plusieurs façons d'installer cartopy
--
Gérard FLEUROT plus un
Avatar
lists
Une Bévue wrote:
if lonref == 'W':
longitude = -longitude

tiens, en JavaScript j'ai aussi été obligé de faire ça.
pourtant il me semble que certains APN donnent le bon signe, tout en
sortant quand même le "lonref"...

D'après le PDF sur le standard EXIF donné par Gilbert plus loin, j'ai
l'impression que c'est "normal". C'est le standard qui le définit de
cette façon. Finalement, le ref = W ou E, c'est rien d'autre que le
signe.
Et toutes les valeurs ont l'air d'être données comme des rationels
positifs.
--
Julien Salort
Entia non sunt multiplicanda praeter necessitatem
http://www.juliensalort.org
Avatar
lists
Une Bévue wrote:
mais bon le prefix "py27" est peut-être spécifique à MacPorts.
je suis total débutant en Python...

Oui py27-* c'est juste le nom des paquets dans MacPorts. Le nom du
module, en effet, c'est juste "matplotlib", "numpy", "pyexif" et
"cartopy", i.e.:
http://matplotlib.org
http://www.numpy.org
https://pypi.python.org/pypi/pyexif
http://scitools.org.uk/cartopy/
À noter pour EXIF, qu'il existe aussi un pyexiftool qui communique avec
l'exiftool de perl. Alors que pyexif tout court c'est une implémentation
en python. Pour le JPEG, le second suffit. En revanche, pour certains
formats d'image spécifiques, exiftool de perl est indispensable car il
est compatible avec toute sorte de formats. J'ai vu le cas pour
certaines caméras FLIR où ils ont un format qui a l'air propriétaire
dans le sens illisible et non documenté, mais finalement qui s'avère
être lisible à l'aide d'exiftool et un peu de bidouille.
La raison pour laquelle MacPorts préfixe ainsi le nom des paquets, c'est
parce que tu peux installer et faire vivre en parallèle différentes
versions de Python. Ceci notamment parce que Python 3 introduit des
changements importants par rapport à Python 2 donc beaucoup de gens
continuent à utiliser Python 2 pour des raisons de compatibilité.
La version Python 2.7 qui est la dernière version officielle supportée
de Python 2. Elle continue à avoir des correctifs, cf. PEP 373
<https://www.python.org/dev/peps/pep-0373/>. Et plusieurs versions de
Python 3 sont disponibles via MacPorts, je ne sais pas vraiment
pourquoi, peut-être pour des développeurs qui veulent tester leurs codes
avec les différentes versions. A priori, pour la plupart des
utilisateurs, seules la 3.5 (la dernière stable) et la 3.6 (la version
en développement) ont un intérêt. En pratique, chez moi, j'ai installé
Python 2.7.13 et Python 3.5.2.
MacPorts ensuite a un système (qui existe aussi ailleurs) de sélection
du python par défaut, i.e. il crée un lien symbolique python2 ->
python2.7, python3 -> python3.5 et python -> python2 (chez moi). Ça se
règle avec la commande "port select".
Donc en pratique les différents modules sont disponibles dans MacPorts
sous forme de paquets dont le nom est préfixé py27-*, py33-*, py34-*,
py35-*, py36-*, en fonction de la version de python pour laquelle on
installe le module.
Tes problèmes d'installation sont exactement la raison pour laquelle
c'est pratique d'installer ces paquets via macports (ou un autre
gestionnaire de paquet généraliste qui s'occupe de l'ensemble des
dépendances). Ce sont des modules qui dépendent de pas mal de
bibliothèques (notamment pour la cartographie, et aussi pour le calcul
scientifique). Donc, l'intérêt d'un gestionnaire de paquet est justement
qu'il installe tout ce qu'il faut. Y compris les bibliothèques qui ne
sont pas spécifiques à Python.
C'est sensiblement pareil avec Fink.
Je n'ai jamais utilisé brew donc je ne sais pas bien comment il gère les
dépendances. Il y a aussi Anaconda <https://www.continuum.io>,
spécialisé pour Python, et peut-être encore d'autres distributions
spécialisées, notamment orientées pour la géophysique. Mais finalement,
chez moi, tout marche plutôt bien avec MacPorts donc je n'ai jamais
vraiment testé les alternatives sous Mac. Sous Windows par contre, j'ai
utilisé longtemps Python XY <https://python-xy.github.io>, mais
maintenant j'utilise plutôt Anaconda. Sous Linux, les paquets fournis
dans la distribution marchent sensiblement comme MacPorts ou Fink.
En ce moment, la seule chose qui m'embête avec MacPorts, mais ça n'a
rien à voir avec le sujet, c'est que Sierra a cassé le paquet ghc
(compilateur Haskell), ce qui casse pandoc. Les gens ont trouvé comment
le réparer mais je ne sais pas pourquoi ils ne publient pas le patch sur
le dépôt officiel... Bon je ne sais pas ce qui m'a pris aussi de mettre
à jour en Sierra... C'était juste parce que je pensais que ça règlerait
mon problème de connexion wifi avec le boîtiers Virgin Media
<http://community.virginmedia.com/t5/Networking-and-wireless/Macbook-Pro-very-temperamental-with-Superhub-Wifi/td-p/2566642/page/75>.
Effectivement, ça déconne moins depuis que je suis en Sierra.
--
Julien Salort
Entia non sunt multiplicanda praeter necessitatem
http://www.juliensalort.org
Avatar
Une Bévue
Le 01/01/2017 à 11:33, Fleuger a écrit :
Je n'y comprend pas grand chose, mais j'ai trouvé :
<http://louistiao.me/posts/installing-cartopy-on-mac-osx-1011/>

ça ne marche pas non plus avec une install de python par brew, ça
réclame sudo pour shapely :
OSError: [Errno 13] Permission denied: '/usr/local/shapely'
Je te suggère une recherche cartopy.
Il y a plusieurs façons d'installer cartopy

sans doute cela va me demander un peu de temps.
Avatar
Une Bévue
Le 01/01/2017 à 11:34, Julien Salort a écrit :
Tes problèmes d'installation sont exactement la raison pour laquelle
c'est pratique d'installer ces paquets via macports (ou un autre
gestionnaire de paquet généraliste qui s'occupe de l'ensemble des
dépendances).

ben, c'est ce que je fais mais avec brew au lieu de macports que je
n'utilise + depuis des années.
finalement je suis parvenu à installer cartopy grâce à la page (signalée
par Gérard FLEUROT plus un) :
(c'est marrant "plus un" est l'appelation d'un analyste disons chevronné
en cartel lacanien...)
Installing Cartopy on Mac OSX (10.11)
<http://louistiao.me/posts/installing-cartopy-on-mac-osx-1011/>
pour cartopy ce qui a marché c'est la ligne :
$ pip install --global-option=build_ext --global-option=$(pkg-config
--cflags proj) cartopy
me reste à tenter de tester le script ...
Avatar
Une Bévue
Le 31/12/2016 à 15:43, Julien Salort a écrit :
Une solution en Python avec cartopy. Avec macports, il faut installer
py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy.

bon, je ne suis pas parvenu à installer "exif" tout court.
exifread est OK
pyexiftool aussi (avec git clone + python setup...)
et j'ai quand même droit à :
$ bin/python/map_direction.py
Traceback (most recent call last):
File "bin/python/map_direction.py", line 11, in <module>
import EXIF
ImportError: No module named EXIF
quand je lance le script...
Avatar
Une Bévue
Le 01/01/2017 à 12:06, Une Bévue a écrit :
me reste à tenter de tester le script ...

marche pas car il me manque EXIF :
$ bin/python/map_direction.py
Traceback (most recent call last):
File "bin/python/map_direction.py", line 11, in <module>
import EXIF
ImportError: No module named EXIF
Avatar
gilbert.olivier
Julien Salort wrote:
Une Bévue wrote:
> if lonref == 'W':
> longitude = -longitude
tiens, en JavaScript j'ai aussi été obligé de faire ça.
pourtant il me semble que certains APN donnent le bon signe, tout en
sortant quand même le "lonref"...

D'après le PDF sur le standard EXIF donné par Gilbert plus loin, j'ai
l'impression que c'est "normal". C'est le standard qui le définit de
cette façon. Finalement, le ref = W ou E, c'est rien d'autre que le
signe.
Et toutes les valeurs ont l'air d'être données comme des rationels
positifs.

Je confirme, je viens de regarder dans mon code et je récupère les
valeurs en 4 étapes: les degrés, les minutes, les secondes, le sens (E/W
ou N/S).
Ensuite c'est à toi à faire ta "soupe" en fonction de tes besoins pour
la suite.
Bonne année à tous et meilleurs voeux!
--
Gilbert
Avatar
lists
Une Bévue wrote:
marche pas car il me manque EXIF :
$ bin/python/map_direction.py
Traceback (most recent call last):
File "bin/python/map_direction.py", line 11, in <module>
import EXIF
ImportError: No module named EXIF

Oui j'ai eu le même problème en testant sur l'ordi de mon père (et en
cherchant à tester en python 3).
Apparemment, le paquet py27-exif de macports installe une ancienne
version de exifread.
En fait, je suis un peu confus: il y a plein de modules pour Exif et je
ne suis pas sûr d'avoir compris les différences entre les uns et les
autres.
Rien qu'avec pip, "pip search exif" renvoie 35 résultats.
Celui que j'utilisais, installé en tant que py27-exif par macports, a
l'air de s'appeler maintenant ExifRead en réalité.
Site officiel: <https://pypi.python.org/pypi/ExifRead>
Installation:
sudo -H python -m pip install ExifRead
(marche aussi avec python3)
Dans le code, il faut remplacer le "import EXIF" par:
import exifread as EXIF
Julien
--
Julien Salort
Entia non sunt multiplicanda praeter necessitatem
http://www.juliensalort.org
2 3 4 5 6