Skip to main content

Center + Crop Image to create a Profile Pic or Headshot

Project description

Profile Photo

https://img.shields.io/pypi/v/profile-photo.svg https://img.shields.io/pypi/pyversions/profile-photo.svg https://github.com/rnag/profile-photo/actions/workflows/dev.yml/badge.svg Documentation Status Updates

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

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

Features

  • Exports a helper function, create_headshot used 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)

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.

Credits

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

History

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.0.tar.gz (27.5 kB view details)

Uploaded Source

Built Distribution

profile_photo-0.1.0-py2.py3-none-any.whl (24.1 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: profile-photo-0.1.0.tar.gz
  • Upload date:
  • Size: 27.5 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.0.tar.gz
Algorithm Hash digest
SHA256 05c39a39610b08f5f340f2ea169f1c20b0bbd780af343a2a9f73d9bf1eb8c8aa
MD5 85983112ad326ff5389df0fb30b4b412
BLAKE2b-256 5cfe89618eda9b24dc5b017d26db035b8fe7b3d000e0aabfdadfbcc71d4425a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for profile_photo-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 72ceeaac093224e65c8ab05d5c36955fd45d4c727458477f18bea28aac9aed3b
MD5 062f7d2e66409038eed410b7daed061c
BLAKE2b-256 0dcb1cd14b47e3a026c86c8720057a6176458804d7afd99faf363b86b5b97417

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