All Projects → alyssaq → Face_morpher

alyssaq / Face_morpher

👼 Morph faces with Python, Numpy, Scipy

Programming Languages

python
139335 projects - #7 most used programming language
python3
1442 projects

Projects that are alternatives of or similar to Face morpher

Lambda Packs
Precompiled packages for AWS Lambda
Stars: ✭ 997 (+36.2%)
Mutual labels:  opencv, numpy
Pybind11 opencv numpy
Implementation of cv::Mat conversion to numpy.array for pybind11
Stars: ✭ 96 (-86.89%)
Mutual labels:  opencv, numpy
Skydetector
A Python implementation of Sky Region Detection in a Single Image for Autonomous Ground Robot Navigation (Shen and Wang, 2013)
Stars: ✭ 23 (-96.86%)
Mutual labels:  opencv, numpy
Human Detection And Tracking
Human-detection-and-Tracking
Stars: ✭ 753 (+2.87%)
Mutual labels:  opencv, numpy
Color Tracker
Color tracking with OpenCV
Stars: ✭ 128 (-82.51%)
Mutual labels:  opencv, numpy
Opencv Ndarray Conversion
NumPy ndarray ⇋ OpenCV Mat conversion, that just works.
Stars: ✭ 107 (-85.38%)
Mutual labels:  opencv, numpy
Eulerian Remote Heartrate Detection
Remote heart rate detection through Eulerian magnification of face videos
Stars: ✭ 48 (-93.44%)
Mutual labels:  opencv, numpy
Deeplearning cv notes
📓 deepleaning and cv notes.
Stars: ✭ 223 (-69.54%)
Mutual labels:  opencv, numpy
Python Tutorial
🏃 Some of the python tutorial - 《Python学习笔记》
Stars: ✭ 122 (-83.33%)
Mutual labels:  opencv, numpy
Studybook
Study E-Book(ComputerVision DeepLearning MachineLearning Math NLP Python ReinforcementLearning)
Stars: ✭ 1,457 (+99.04%)
Mutual labels:  opencv, numpy
Stb Tester
Automated Testing for Set-Top Boxes and Smart TVs
Stars: ✭ 148 (-79.78%)
Mutual labels:  opencv, numpy
Finger Detection And Tracking
Finger Detection and Tracking using OpenCV and Python
Stars: ✭ 317 (-56.69%)
Mutual labels:  opencv, numpy
Chainer
A flexible framework of neural networks for deep learning
Stars: ✭ 5,656 (+672.68%)
Mutual labels:  numpy
Chosuntruck
Euro Truck Simulator 2 autonomous driving solution
Stars: ✭ 706 (-3.55%)
Mutual labels:  opencv
Makeup
让你的“女神”逆袭,代码撸彩妆(画妆)
Stars: ✭ 655 (-10.52%)
Mutual labels:  opencv
Mvision
机器人视觉 移动机器人 VS-SLAM ORB-SLAM2 深度学习目标检测 yolov3 行为检测 opencv PCL 机器学习 无人驾驶
Stars: ✭ 6,140 (+738.8%)
Mutual labels:  opencv
Raftlib
The RaftLib C++ library, streaming/dataflow concurrency via C++ iostream-like operators
Stars: ✭ 717 (-2.05%)
Mutual labels:  opencv
Head Pose Estimation
Head pose estimation by TensorFlow and OpenCV
Stars: ✭ 698 (-4.64%)
Mutual labels:  opencv
Opencv for ios book samples
"OpenCV for iOS" book samples
Stars: ✭ 640 (-12.57%)
Mutual labels:  opencv
Opencv
OpenCV projects: Face Recognition, Machine Learning, Colormaps, Local Binary Patterns, Examples...
Stars: ✭ 624 (-14.75%)
Mutual labels:  opencv

Face Morpher

| Warp, average and morph human faces! | Scripts will automatically detect frontal faces and skip images if none is detected.

Built with Python, dlib_, Numpy, Scipy, dlib.

| Supported on Python 2.7, Python 3.6+ | Tested on macOS Mojave and 64bit Linux (dockerized).

Requirements

  • pip install -r requirements.txt
  • Download http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 and extract file.
  • Export environment variable DLIB_DATA_DIR to the folder where shape_predictor_68_face_landmarks.dat is located. Default data. E.g export DLIB_DATA_DIR=/Downloads/data

Either:

  • Use as local command-line utility_
  • Use as pip library_
  • Try out in a docker container_

.. _Use as local command-line utility:

Use as local command-line utility

::

$ git clone https://github.com/alyssaq/face_morpher

Morphing Faces

Morph from a source to destination image:

::

python facemorpher/morpher.py --src=<src_imgpath> --dest=<dest_imgpath> --plot

Morph through a series of images in a folder:

::

python facemorpher/morpher.py --images=<folder> --out_video=out.avi

All options listed in morpher.py (pasted below):

::

Morph from source to destination face or
Morph through all images in a folder

Usage:
    morpher.py (--src=<src_path> --dest=<dest_path> | --images=<folder>)
            [--width=<width>] [--height=<height>]
            [--num=<num_frames>] [--fps=<frames_per_second>]
            [--out_frames=<folder>] [--out_video=<filename>]
            [--plot] [--background=(black|transparent|average)]

Options:
    -h, --help              Show this screen.
    --src=<src_imgpath>     Filepath to source image (.jpg, .jpeg, .png)
    --dest=<dest_imgpath>   Filepath to destination image (.jpg, .jpeg, .png)
    --images=<folder>       Folderpath to images
    --width=<width>         Custom width of the images/video [default: 500]
    --height=<height>       Custom height of the images/video [default: 600]
    --num=<num_frames>      Number of morph frames [default: 20]
    --fps=<fps>             Number frames per second for the video [default: 10]
    --out_frames=<folder>   Folder path to save all image frames
    --out_video=<filename>  Filename to save a video
    --plot                  Flag to plot images to result.png [default: False]
    --background=<bg>       Background of images to be one of (black|transparent|average) [default: black]
    --version               Show version.

Averaging Faces

Average faces from all images in a folder:

::

python facemorpher/averager.py --images=<images_folder> --out=average.png

All options listed in averager.py (pasted below):

::

Face averager

Usage:
    averager.py --images=<images_folder> [--blur] [--plot]
            [--background=(black|transparent|average)]
            [--width=<width>] [--height=<height>]
            [--out=<filename>] [--destimg=<filename>]

Options:
    -h, --help             Show this screen.
    --images=<folder>      Folder to images (.jpg, .jpeg, .png)
    --blur                 Flag to blur edges of image [default: False]
    --width=<width>        Custom width of the images/video [default: 500]
    --height=<height>      Custom height of the images/video [default: 600]
    --out=<filename>       Filename to save the average face [default: result.png]
    --destimg=<filename>   Destination face image to overlay average face
    --plot                 Flag to display the average face [default: False]
    --background=<bg>      Background of image to be one of (black|transparent|average) [default: black]
    --version              Show version.

Steps (facemorpher folder)

  1. Locator ^^^^^^^^^^
  • Locates face points
  • For a different locator, return an array of (x, y) control face points
  1. Aligner ^^^^^^^^^^
  • Align faces by resizing, centering and cropping to given size
  1. Warper ^^^^^^^^^
  • Given 2 images and its face points, warp one image to the other
  • Triangulates face points
  • Affine transforms each triangle with bilinear interpolation

4a. Morpher ^^^^^^^^^^^

  • Morph between 2 or more images

4b. Averager ^^^^^^^^^^^^

  • Average faces from 2 or more images

Blender ^^^^^^^

Optional blending of warped image:

  • Weighted average
  • Alpha feathering
  • Poisson blend

Examples - Being John Malkovich_

Create a morphing video between the 2 images: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

| > python facemorpher/morpher.py --src=alyssa.jpg --dest=john_malkovich.jpg | --out_video=out.avi

(out.avi played and recorded as gif)

.. figure:: https://raw.github.com/alyssaq/face_morpher/master/examples/being_john_malvokich.gif :alt: gif

Save the frames to a folder: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

| > python facemorpher/morpher.py --src=alyssa.jpg --dest=john_malkovich.jpg | --out_frames=out_folder --num=30

Plot the frames: ^^^^^^^^^^^^^^^^

| > python facemorpher/morpher.py --src=alyssa.jpg --dest=john_malkovich.jpg | --num=12 --plot

.. figure:: https://raw.github.com/alyssaq/face_morpher/master/examples/plot.png :alt: plot

Average all face images in a folder: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

85 images used

| > python facemorpher/averager.py --images=images --blur --background=transparent | --width=220 --height=250

.. figure:: https://raw.github.com/alyssaq/face_morpher/master/examples/average_faces.png :alt: average_faces

.. _Use as pip library:

Use as pip library

::

$ pip install facemorpher

Examples ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Additional options are exactly the same as the command line

::

import facemorpher

# Get a list of image paths in a folder
imgpaths = facemorpher.list_imgpaths('imagefolder')

# To morph, supply an array of face images:
facemorpher.morpher(imgpaths, plot=True)

# To average, supply an array of face images:
facemorpher.averager(['image1.png', 'image2.png'], plot=True)

Once pip installed, 2 binaries are also available as a command line utility:

::

$ facemorpher --src=<src_imgpath> --dest=<dest_imgpath> --plot
$ faceaverager --images=<images_folder> --plot

Try out in a docker container

Mount local folder to /images in docker container, run it and enter a bash session. --rm removes the container when you close it. ::

$ docker run -v  /Users/alyssa/Desktop/images:/images --name py3 --rm -it jjanzic/docker-python3-opencv bash

Once you're in the container, install facemorpher and try the examples listed above ::

[email protected]:/# pip install facemorpher
[email protected]:/# facemorpher --src=<img1> --dest=<img2> --plot

Documentation

http://alyssaq.github.io/face_morpher

Build & publish Docs ^^^^^^^^^^^^^^^^^^^^

::

./scripts/publish_ghpages.sh

License

MIT_

.. _Being John Malkovich: http://www.rottentomatoes.com/m/being_john_malkovich .. _Mac installation steps: https://gist.github.com/alyssaq/f60393545173379e0f3f#file-4-opencv3-with-python3-md .. _MIT: http://alyssaq.github.io/mit-license .. _OpenCV: http://opencv.org .. _Homebrew: https://brew.sh .. _source: https://github.com/opencv/opencv .. _dlib: http://dlib.net

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].