Extract EXIF to pandas / SQL / Excel / Feather
Project description
Extract EXIF to pandas / SQL / Excel / Feather
Scans recursively your photo library and extracts EXIF data per file to several data formats.
Extracts:
- file size
- gps
- Exif data
Allows export to:
- Excel
- SQLite
- Feather
and anything else that Pandas supports.
Installation
$ pip3 install exif2pandas --user
To export the dataframe you will need one of these modules:
- SQLite:
pip3 install --user SQLAlchemy
- Feather:
pip3 install --user pyarrow
- Excel:
pip3 install --user xlsxwriter
Python module usage:
from exif2pandas import extract
from pathlib import Path
df = extract.extract_feather(
feather_path=Path('photos.feather').resolve(),
pictures_root=[
Path('/Users/visgean/Dropbox/Photos').resolve(),
],
processes=5
)
Command line usage:
usage: exif2pandas [-h] [-s SQLITE] [-f FEATHER] [-e EXCEL] [-p PROCESSES]
picture_folders [picture_folders ...]
Generate sql database with exif data.
positional arguments:
picture_folders Folders with the images
optional arguments:
-h, --help show this help message and exit
-s SQLITE, --sqlite SQLITE
Output the data frame to SQLite file (this will
override existing file!)
-f FEATHER, --feather FEATHER
Output the data frame to feather file (this will
override existing file!)
-e EXCEL, --excel EXCEL
Output the data frame to excel (this will override
existing file!)
-p PROCESSES, --processes PROCESSES
number of processes to use for collecting exif data,
defaults to 5
Example:
$ exif2pandas ~/Dropbox/Photos/ -s ~/photo_metadata.sqlite
Speed
While this is not a benchmark at all, it takes me about 10 seconds to process 123 GB of photos. This was taken at my Dell XPS 9570 with Intel® Core™ i7-8750H CPU @ 2.20GHz × 12 CPU using 5 processes.
The resulting file is about 13 MB large.
Structure
The following is an example of columns that are generated - some cameras might include different fields.
Custom fields:
- all the columns ending with
-float
are evaluated fractions cleaned_date
- this is original date - ignores date set by editors..cleaned_latitude
- converted latitude to GPS style, the algorithm is not very precise as far as I knowcleaned_longitude
- longitudesize_megabytes
- image size in megabytesfilename
- original filename
Exif fields:
exif-aperturevalue exif-aperturevalue-float exif-bodyserialnumber exif-brightnessvalue
exif-brightnessvalue-float exif-colorspace exif-componentsconfiguration exif-compressedbitsperpixel
exif-compressedbitsperpixel-float exif-customrendered exif-datetimedigitized exif-datetimeoriginal
exif-digitalzoomratio exif-digitalzoomratio-float exif-exifimagelength exif-exifimagewidth
exif-exifversion exif-exposurebiasvalue exif-exposurebiasvalue-float exif-exposuremode
exif-exposureprogram exif-exposuretime exif-exposuretime-float exif-filesource exif-flash
exif-flashpixversion exif-fnumber exif-fnumber-float exif-focallength exif-focallength-float
exif-focallengthin35mmfilm exif-focalplaneresolutionunit exif-focalplanexresolution
exif-focalplanexresolution-float exif-focalplaneyresolution exif-focalplaneyresolution-float
exif-interoperabilityoffset exif-isospeedratings exif-lensmake exif-lensmodel exif-lensserialnumber
exif-lensspecification exif-lightsource exif-maxaperturevalue exif-maxaperturevalue-float
exif-meteringmode exif-scenecapturetype exif-scenetype exif-sensingmethod exif-sensitivitytype
exif-sharpness exif-shutterspeedvalue exif-shutterspeedvalue-float exif-subjectarea
exif-subjectdistancerange exif-subsectime exif-subsectimedigitized exif-subsectimeoriginal
exif-usercomment exif-whitebalance
GPS fields
gps-gpsaltitude gps-gpsaltitude-float gps-gpsaltituderef gps-gpsdate gps-gpsdestbearing
gps-gpsdestbearing-float gps-gpsdestbearingref gps-gpsdop gps-gpsdop-float gps-gpsimgdirection
gps-gpsimgdirection-float gps-gpsimgdirectionref gps-gpslatitude gps-gpslatituderef
gps-gpslongitude gps-gpslongituderef gps-gpsmapdatum gps-gpsspeed gps-gpsspeed-float
gps-gpsspeedref gps-gpstimestamp gps-gpsversionid
Image Fields:
image-artist image-cfapattern image-cfarepeatpatterndim image-copyright image-datetime
image-datetimeoriginal image-documentname image-exifoffset image-exposuretime
image-exposuretime-float image-fnumber image-fnumber-float image-focallength
image-focallength-float image-gpsinfo image-imagelength image-imagewidth
image-isospeedratings image-make image-model image-orientation image-rating
image-resolutionunit image-sampleformat image-software image-subfiletype
image-xresolution image-xresolution-float image-ycbcrpositioning
image-yresolution-float image-yresolution
Other fields
interoperability-interoperabilityindex interoperability-interoperabilityversion
makernote-afpointset makernote-blurwarning makernote-colortemperature makernote-exposurecount
makernote-exposurewarning makernote-flashmode makernote-flashstrength
makernote-flashstrength-float makernote-focusmode makernote-focuspixel
makernote-focuswarning makernote-hdrimagetype makernote-motororbracket
makernote-noteversion makernote-picturemode makernote-quality makernote-saturation
makernote-sharpness makernote-slowsync makernote-whitebalance makernote-whitebalancefinetune
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file exif2pandas-2.1.tar.gz
.
File metadata
- Download URL: exif2pandas-2.1.tar.gz
- Upload date:
- Size: 7.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 28e08c486e6c903f822aace83ebd14b9d8725d566fba80d88aa755413df83bc1 |
|
MD5 | f7a6aaacd7413a119ac22941ed1a8b18 |
|
BLAKE2b-256 | 3384f1266c99a3364ddfd0a4b653d8e3b691ff8cb064ca276a8baeb26fff8e91 |