Skip to main content

Center + Crop Image to create a Profile Pic or Headshot

Project description

Profile Photo

image image image Documentation Status Updates

Center + Crop Image to create a Profile Pic or Headshot.

Install

$ pip install profile-photo[all]

The [all] extra installs boto3, which is excluded by default - this assumes an AWS environment.

Features

  • Exports a helper function, create_headshot, to create a close-up or headshot of the primary face in a photo or image.
  • Leverages Amazon Rekognition to detect bounding boxes of a person's Face and relevant Labels, such as Person.
  • Exposes helper methods to save the result image (cropped) as well as API responses to a local folder.

Usage

Basic usage, with a sample image:

from urllib.request import urlopen

from profile_photo import create_headshot


# Set the $AWS_PROFILE environment variable instead
aws_profile = 'my-profile'

im_url = 'https://raw.githubusercontent.com/rnag/profile-photo/main/examples/woman-2.jpeg'
im_bytes = urlopen(im_url).read()

photo = create_headshot(im_bytes, profile=aws_profile)
photo.show()

An example with a local image, and saving the result image and API responses to a folder:

from __future__ import annotations

from profile_photo import create_headshot


# customize local file location for API responses
def get_filename(file_name: str | None, api: str):
    return f'responses/{file_name}_{api}.json'


photo = create_headshot('/path/to/image')

# this saves image and API responses to a results/ folder
# can also be achieved by passing `output_dir` above
photo.save_all('results', get_response_filename=get_filename)

# display before-and-after images
photo.show()

Lastly, an example with an image on S3, and passing in cached Rekognition API responses for the image:

from pathlib import Path

from profile_photo import create_headshot


s3_image_path = Path('path/to/image.jpg')
responses_dir = Path('./my/responses')

_photo = create_headshot(bucket='my-bucket',
                         key=str(s3_image_path),
                         profile='my-profile',
                         faces=responses_dir / f'{s3_image_path.stem}_DetectFaces.json',
                         labels=responses_dir / f'{s3_image_path.stem}_DetectLabels.json',
                         debug=True)

Examples

Check out example images on GitHub for sample use cases and results.

How It Works

This library currently makes calls to the Amazon Rekognition APIs to detect bounding boxes on a Face and Person in a photo.

It then uses custom, in-house logic to determine the X/Y coordinates for cropping. This mainly involves "blowing up" or enlarging the Face bounding box, but then correcting the coordinates as needed by the Person box. This logic has been fine-tuned based on what I have found provide the best overall results for generic images (not necessary profile photos).

In the future, other ideas other than Rekognition might be considered -- such as existing machine learning approaches or even a solution with the opencv library in Python alone.

Future Ideas

  • Support background removal with rembg.
  • Investigate other (alternate) approaches to Rekognition for detecting a face and person in a photo.

Credits

This package was created with Cookiecutter and the rnag/cookiecutter-pypackage project template.

History

0.1.2 (2023-03-09)

  • Embed images in documentation.
  • Convert .rst files to .md format.

0.1.1 (2023-03-08)

  • Update documentation.

0.1.0 (2023-03-08)

  • First release on PyPI.

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

profile-photo-0.1.2.tar.gz (29.3 kB view details)

Uploaded Source

Built Distribution

profile_photo-0.1.2-py2.py3-none-any.whl (24.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file profile-photo-0.1.2.tar.gz.

File metadata

  • Download URL: profile-photo-0.1.2.tar.gz
  • Upload date:
  • Size: 29.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for profile-photo-0.1.2.tar.gz
Algorithm Hash digest
SHA256 3e381f287957702d175ca510c30a8792848365b68ae54d8ef2538ed630dde950
MD5 9748242844a1e8509d81992cab0b4645
BLAKE2b-256 4073801d4bc9d1cc1fb648d28596347aa4cb3219a16eb64365577f9ea085fbda

See more details on using hashes here.

File details

Details for the file profile_photo-0.1.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for profile_photo-0.1.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e9451eeb71cb5e9db312713365effcbf563d5903c5895ca54a156dc36886e0a3
MD5 6ab68cd9a1f2bc41b07ae4c9b37d25ee
BLAKE2b-256 fff16609930fb11c3dec6a33b3b1fd8ee3f0f961ba551402f01824bbb176287f

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