Skip to main content

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 know
  • cleaned_longitude- longitude
  • size_megabytes - image size in megabytes
  • filename - 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

exif2pandas-2.1.tar.gz (7.6 kB view details)

Uploaded Source

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

Hashes for exif2pandas-2.1.tar.gz
Algorithm Hash digest
SHA256 28e08c486e6c903f822aace83ebd14b9d8725d566fba80d88aa755413df83bc1
MD5 f7a6aaacd7413a119ac22941ed1a8b18
BLAKE2b-256 3384f1266c99a3364ddfd0a4b653d8e3b691ff8cb064ca276a8baeb26fff8e91

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page