{ "info": { "author": "Visgean", "author_email": "visgean@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "# Extract EXIF to pandas / SQL / Excel / Feather\n\nExtracts:\n\n- file size \n- gps\n- Exif data \n\nAllows export to: \n\n- Excel\n- SQLite\n- Feather\n\nand anything else that [Pandas supports](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html).\n\n\n## Installation\n\n```\n $ pip install exif2pandas --user\n```\n\nTo export the dataframe you will need one of these modules:\n\n - SQLite: ``pip install --user SQLAlchemy`` \n - Feather: ``pip install --user pyarrow`` \n - Excel: ``pip install --user xlsxwriter``\n\n# Usage\n\n```\nusage: exif2pandas [-h] [-s SQLITE] [-f FEATHER] [-e EXCEL] [-p PROCESSES]\n picture_folders [picture_folders ...]\n\nGenerate sql database with exif data.\n\npositional arguments:\n picture_folders Folders with the images\n\noptional arguments:\n -h, --help show this help message and exit\n -s SQLITE, --sqlite SQLITE\n Output the data frame to SQLite file (this will\n override existing file!)\n -f FEATHER, --feather FEATHER\n Output the data frame to feather file (this will\n override existing file!)\n -e EXCEL, --excel EXCEL\n Output the data frame to excel (this will override\n existing file!)\n -p PROCESSES, --processes PROCESSES\n number of processes to use for collecting exif data,\n defaults to 5\n```\n\n# Example:\n\n```\n $ exif2pandas ~/Dropbox/Photos/ -s ~/photo_metadata.sqlite\n```\n\n\n# Speed\n\nWhile this is not a benchmark at all, it takes me about 10 seconds to process 123 GB of photos. \nThis was taken at my Dell XPS 9570 with Intel\u00ae Core\u2122 i7-8750H CPU @ 2.20GHz \u00d7 12 CPU using 5 processes.\n\nThe resulting file is about 13 MB large.\n\n# Structure\n\nThe following is an example of columns that are generated - some cameras might include different fields.\n\n## Custom fields:\n\n- all the columns ending with ``-float`` are evaluated fractions \n- ``cleaned_date`` - this is original date - ignores date set by editors..\n- ``cleaned_latitude`` - converted latitude to GPS style, the algorithm is not very precise as far as I know\n- ``cleaned_longitude``- longitude\n- ``size_megabytes `` - image size in megabytes\n- ``filename`` - original filename\n\n## Exif fields:\n```\nexif-aperturevalue exif-aperturevalue-float exif-bodyserialnumber exif-brightnessvalue \nexif-brightnessvalue-float exif-colorspace exif-componentsconfiguration exif-compressedbitsperpixel \nexif-compressedbitsperpixel-float exif-customrendered exif-datetimedigitized exif-datetimeoriginal \nexif-digitalzoomratio exif-digitalzoomratio-float exif-exifimagelength exif-exifimagewidth \nexif-exifversion exif-exposurebiasvalue exif-exposurebiasvalue-float exif-exposuremode \nexif-exposureprogram exif-exposuretime exif-exposuretime-float exif-filesource exif-flash \nexif-flashpixversion exif-fnumber exif-fnumber-float exif-focallength exif-focallength-float \nexif-focallengthin35mmfilm exif-focalplaneresolutionunit exif-focalplanexresolution \nexif-focalplanexresolution-float exif-focalplaneyresolution exif-focalplaneyresolution-float \nexif-interoperabilityoffset exif-isospeedratings exif-lensmake exif-lensmodel exif-lensserialnumber \nexif-lensspecification exif-lightsource exif-maxaperturevalue exif-maxaperturevalue-float \nexif-meteringmode exif-scenecapturetype exif-scenetype exif-sensingmethod exif-sensitivitytype \nexif-sharpness exif-shutterspeedvalue exif-shutterspeedvalue-float exif-subjectarea \nexif-subjectdistancerange exif-subsectime exif-subsectimedigitized exif-subsectimeoriginal \nexif-usercomment exif-whitebalance\n```\n\n## GPS fields\n\n```\ngps-gpsaltitude gps-gpsaltitude-float gps-gpsaltituderef gps-gpsdate gps-gpsdestbearing \ngps-gpsdestbearing-float gps-gpsdestbearingref gps-gpsdop gps-gpsdop-float gps-gpsimgdirection \ngps-gpsimgdirection-float gps-gpsimgdirectionref gps-gpslatitude gps-gpslatituderef \ngps-gpslongitude gps-gpslongituderef gps-gpsmapdatum gps-gpsspeed gps-gpsspeed-float \ngps-gpsspeedref gps-gpstimestamp gps-gpsversionid\n```\n\n## Image Fields:\n\n```\nimage-artist image-cfapattern image-cfarepeatpatterndim image-copyright image-datetime \nimage-datetimeoriginal image-documentname image-exifoffset image-exposuretime \nimage-exposuretime-float image-fnumber image-fnumber-float image-focallength \nimage-focallength-float image-gpsinfo image-imagelength image-imagewidth \nimage-isospeedratings image-make image-model image-orientation image-rating \nimage-resolutionunit image-sampleformat image-software image-subfiletype \nimage-xresolution image-xresolution-float image-ycbcrpositioning \nimage-yresolution-float image-yresolution\n```\n\n# Other fields\n\n```\ninteroperability-interoperabilityindex interoperability-interoperabilityversion\nmakernote-afpointset makernote-blurwarning makernote-colortemperature makernote-exposurecount\nmakernote-exposurewarning makernote-flashmode makernote-flashstrength \nmakernote-flashstrength-float makernote-focusmode makernote-focuspixel \nmakernote-focuswarning makernote-hdrimagetype makernote-motororbracket \nmakernote-noteversion makernote-picturemode makernote-quality makernote-saturation \nmakernote-sharpness makernote-slowsync makernote-whitebalance makernote-whitebalancefinetune \n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/visgean/exif2pandas", "keywords": "exif sql", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "exif2pandas", "package_url": "https://pypi.org/project/exif2pandas/", "platform": "", "project_url": "https://pypi.org/project/exif2pandas/", "project_urls": { "Homepage": "https://github.com/visgean/exif2pandas" }, "release_url": "https://pypi.org/project/exif2pandas/1.3/", "requires_dist": null, "requires_python": "", "summary": "Extract EXIF to pandas / SQL / Excel / Feather", "version": "1.3" }, "last_serial": 5468338, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "b463f647987a3afb7df3a0f110a6edb0", "sha256": "c9e4495f4df81da1c943ed38af4ab88ff09dd1db542aefd560cfc8e705df6d4c" }, "downloads": -1, "filename": "exif2pandas-1.0.tar.gz", "has_sig": false, "md5_digest": "b463f647987a3afb7df3a0f110a6edb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5919, "upload_time": "2019-06-30T16:24:32", "url": "https://files.pythonhosted.org/packages/2a/5b/e4aa96e64e010c51c0f95c371a2a6e24c89a8f0433dc773827e62c8deee9/exif2pandas-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "ce1aeafda8fba2ec064a42e51427c170", "sha256": "e9ee3d3a0d67be82909fe3fa917cafecd60e40723eb00c366ba7e3c2018875a7" }, "downloads": -1, "filename": "exif2pandas-1.1.tar.gz", "has_sig": false, "md5_digest": "ce1aeafda8fba2ec064a42e51427c170", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6490, "upload_time": "2019-06-30T16:32:05", "url": "https://files.pythonhosted.org/packages/4b/90/96c9b9ddc2f7dd1d446f5595f54815816d6b1007156b65cfde4664b9fe13/exif2pandas-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "6eff938f089421a3d2a2c14796db7d1a", "sha256": "1464f8fe7bddd3d6d2de03849f1430a42d548e5fdea721a8fec7e94d8df68849" }, "downloads": -1, "filename": "exif2pandas-1.2.tar.gz", "has_sig": false, "md5_digest": "6eff938f089421a3d2a2c14796db7d1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6485, "upload_time": "2019-06-30T16:35:20", "url": "https://files.pythonhosted.org/packages/d8/5c/dd0f9a04cce940c1ffcc14d41d9e645f7e5dea0958b348038c5c7aca44e6/exif2pandas-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "07fe6aef37208e9c4cca6d51bf243508", "sha256": "1439f90299d25526f03da321938de17aa482729652e8255d5d6e79d5e4a5696d" }, "downloads": -1, "filename": "exif2pandas-1.3.tar.gz", "has_sig": false, "md5_digest": "07fe6aef37208e9c4cca6d51bf243508", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6488, "upload_time": "2019-06-30T16:44:56", "url": "https://files.pythonhosted.org/packages/48/49/ebdd68c414c9d6139ef27ea0ba129336ea0cf1f94adbef684e921954ff74/exif2pandas-1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "07fe6aef37208e9c4cca6d51bf243508", "sha256": "1439f90299d25526f03da321938de17aa482729652e8255d5d6e79d5e4a5696d" }, "downloads": -1, "filename": "exif2pandas-1.3.tar.gz", "has_sig": false, "md5_digest": "07fe6aef37208e9c4cca6d51bf243508", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6488, "upload_time": "2019-06-30T16:44:56", "url": "https://files.pythonhosted.org/packages/48/49/ebdd68c414c9d6139ef27ea0ba129336ea0cf1f94adbef684e921954ff74/exif2pandas-1.3.tar.gz" } ] }