# face-alignment
**Repository Path**: zwgcode/face-alignment
## Basic Information
- **Project Name**: face-alignment
- **Description**: :fire: 2D and 3D Face alignment library build using pytorch
- **Primary Language**: Unknown
- **License**: BSD-3-Clause
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-12-21
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Face Recognition
Detect facial landmarks from Python using the world's most accurate face alignment network, capable of detecting points in both 2D and 3D coordinates.
Build using [FAN](https://www.adrianbulat.com)'s state-of-the-art deep learning based face alignment method.

**Note:** The lua version is available [here](https://github.com/1adrianb/2D-and-3D-face-alignment).
For numerical evaluations it is highly recommended to use the lua version which uses indentical models with the ones evaluated in the paper. More models will be added soon.
[](https://opensource.org/licenses/BSD-3-Clause) [](https://travis-ci.com/1adrianb/face-alignment) [](https://anaconda.org/1adrianb/face_alignment)
[](https://pypi.org/project/face-alignment/)
## Features
#### Detect 2D facial landmarks in pictures
```python
import face_alignment
from skimage import io
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False)
input = io.imread('../test/assets/aflw-test.jpg')
preds = fa.get_landmarks(input)
```
#### Detect 3D facial landmarks in pictures
```python
import face_alignment
from skimage import io
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._3D, flip_input=False)
input = io.imread('../test/assets/aflw-test.jpg')
preds = fa.get_landmarks(input)
```
#### Process an entire directory in one go
```python
import face_alignment
from skimage import io
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False)
preds = fa.get_landmarks_from_directory('../test/assets/')
```
#### Detect the landmarks using a specific face detector.
By default the package will use the SFD face detector. However the users can alternatively use dlib or pre-existing ground truth bounding boxes.
```python
import face_alignment
# sfd for SFD, dlib for Dlib and folder for existing bounding boxes.
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, face_detector='sfd')
```
#### Running on CPU/GPU
In order to specify the device (GPU or CPU) on which the code will run one can explicitly pass the device flag:
```python
import face_alignment
# cuda for CUDA
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, device='cpu')
```
Please also see the ``examples`` folder
## Installation
### Requirements
* Python 3.5+ or Python 2.7 (it may work with other versions too)
* Linux, Windows or macOS
* pytorch (>=1.0)
While not required, for optimal performance(especially for the detector) it is **highly** recommended to run the code using a CUDA enabled GPU.
### Binaries
The easiest way to install it is using either pip or conda:
| **Using pip** | **Using conda** |
|------------------------------|--------------------------------------------|
| `pip install face-alignment` | `conda install -c 1adrianb face_alignment` |
| | |
Alternatively, bellow, you can find instruction to build it from source.
### From source
Install pytorch and pytorch dependencies. Instructions taken from [pytorch readme](https://github.com/pytorch/pytorch). For a more updated version check the framework github page.
On Linux
```bash
export CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" # [anaconda root directory]
# Install basic dependencies
conda install numpy pyyaml mkl setuptools cmake gcc cffi
# Add LAPACK support for the GPU
conda install -c soumith magma-cuda80 # or magma-cuda75 if CUDA 7.5
```
On OSX
```bash
export CMAKE_PREFIX_PATH=[anaconda root directory]
conda install numpy pyyaml setuptools cmake cffi
```
#### Get the PyTorch source
```bash
git clone --recursive https://github.com/pytorch/pytorch
```
#### Install PyTorch
On Linux
```bash
python setup.py install
```
On OSX
```bash
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install
```
#### Get the Face Alignment source code
```bash
git clone https://github.com/1adrianb/face-alignment
```
#### Install the Face Alignment lib
```bash
pip install -r requirements.txt
python setup.py install
```
### Docker image
A Dockerfile is provided to build images with cuda support and cudnn v5. For more instructions about running and building a docker image check the orginal Docker documentation.
```
docker build -t face-alignment .
```
## How does it work?
While here the work is presented as a black-box, if you want to know more about the intrisecs of the method please check the original paper either on arxiv or my [webpage](https://www.adrianbulat.com).
## Contributions
All contributions are welcomed. If you encounter any issue (including examples of images where it fails) feel free to open an issue.
## Citation
```
@inproceedings{bulat2017far,
title={How far are we from solving the 2D \& 3D Face Alignment problem? (and a dataset of 230,000 3D facial landmarks)},
author={Bulat, Adrian and Tzimiropoulos, Georgios},
booktitle={International Conference on Computer Vision},
year={2017}
}
```
For citing dlib, pytorch or any other packages used here please check the original page of their respective authors.
## Acknowledgements
* To the [pytorch](http://pytorch.org/) team for providing such an awesome deeplearning framework
* To [my supervisor](http://www.cs.nott.ac.uk/~pszyt/) for his patience and suggestions.
* To all other python developers that made available the rest of the packages used in this repository.