Built with Python, dlib, Numpy, Scipy, dlib.
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 whereshape_predictor_68_face_landmarks.dat
is located. Defaultdata
. E.gexport DLIB_DATA_DIR=/Downloads/data
Either:
$ git clone https://github.com/alyssaq/face_morpher
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.
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.
- Locates face points
- For a different locator, return an array of (x, y) control face points
- Align faces by resizing, centering and cropping to given size
- Given 2 images and its face points, warp one image to the other
- Triangulates face points
- Affine transforms each triangle with bilinear interpolation
- Morph between 2 or more images
- Average faces from 2 or more images
Optional blending of warped image:
- Weighted average
- Alpha feathering
- Poisson blend
Examples - Being John Malkovich
> python facemorpher/morpher.py --src=alyssa.jpg --dest=john_malkovich.jpg
--out_video=out.avi
(out.avi played and recorded as gif)
> python facemorpher/morpher.py --src=alyssa.jpg --dest=john_malkovich.jpg
--out_frames=out_folder --num=30
> python facemorpher/morpher.py --src=alyssa.jpg --dest=john_malkovich.jpg
--num=12 --plot
85 images used
> python facemorpher/averager.py --images=images --blur --background=transparent
--width=220 --height=250
$ pip install facemorpher
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
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
root@0dad0912ebbe:/# pip install facemorpher root@0dad0912ebbe:/# facemorpher --src=<img1> --dest=<img2> --plot
http://alyssaq.github.io/face_morpher
./scripts/publish_ghpages.sh