|
|
| (8 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| | Sumber: https://github.com/TadasBaltrusaitis/OpenFace/wiki/Unix-Installation |
| | |
| ==Instalasi Aplikasi Pendukung== | | ==Instalasi Aplikasi Pendukung== |
|
| |
|
| sudo apt -y install virtualenv git \ | | sudo su |
| libopenblas-dev libopencv-dev libboost-dev libboost-python-dev python-dev \ | | apt update |
| build-essential gcc g++ cmake
| | apt -y install build-essential cmake libopenblas-dev liblapack-dev \ |
| | | git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev \ |
| Buat virtual environment untuk Python 2 di folder fd_fr
| | python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev \ |
| | | libtiff-dev libdc1394-22-dev checkinstall unzip \ |
| | | llvm clang libc++-dev libc++abi-dev libboost-all-dev |
| Create a compartmentalized Python environment with Python 2 (has to be this version required by Openface) and copy necessary OpenCV's Python bindings onto it. Let's call the fd_fr directory VENV_ROOT.
| |
| | |
| mkdir fd_fr; cd fd_fr
| |
| export VENV_ROOT=$(pwd)
| |
| virtualenv -p /usr/bin/python2.7 .
| |
| cp /usr/lib/python2.7/dist-packages/cv* lib/python2.7/site-packages/ | |
| source bin/activate
| |
| | |
| Tip when running on RPI : As RPI devices have very little memory and the storage device being an SDcard, performance can drop dramatically when run with tons of file I/O. One way to remedy is by flushing the page cache after large file I/O operations with the following command periodically during the installation process going forward.
| |
| | |
| sync
| |
| sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
| |
| | |
| 1. Install and run Dlib face landmark detection
| |
| Get Dlib either by cloning it from their github repository or downloading a released version. At the time of this writing, that is version v19.3 so I'm going to clone the repository and checkout that tag.
| |
| | |
| git clone https://github.com/davisking/dlib.git dlib | |
| cd dlib
| |
| git checkout -b v19.3
| |
| | |
| If on RPI, do not compile Dlib on the device as some files require 800+MB of memory which cause massive swap to device and CPU utilization falls below 5%. I recommend doing this on the host PC and run ARM emulation using qemu-arm-static and then copying. But if you're feeling lazy, I have done all this (and subsequent steps) that you can access via this link. More details on this in Section 5.
| |
|
| |
|
| Tip with qemu-arm-static internet connection : Especially if behind a proxy, be sure to share contents of /etc/resolv.conf with chroot environment either by copying or bind mount
| | ==Instalasi Openface== |
|
| |
|
| mount --bind /etc/resolv.conf /rpi/mount/etc/resolv.conf for behind proxy
| |
|
| |
| The build process is done with cmake. If you have a relatively new CPU, it should have the AVX (Advanced Vector Extensions) which greatly enhances the performance. You can find either or not your CPU supports this functionality by executing "cat /proc/cpuinfo | grep avx". If you get a non-empty text, then your CPU supports it. If it does, include the "-DUSE_AVX..." statement below.
| |
|
| |
| mkdir build; cd build
| |
| cmake ../tools/python -DUSE_AVX_INSTRUCTIONS=1
| |
| cmake --build . --config Release
| |
|
| |
| Copy generated dlib.so file to Python's lib/ path and test it by importing it from Python.
| |
|
| |
| cp dlib.so ${VENV_ROOT}/lib/python2.7/dist-packages/
| |
| python -c "import dlib"
| |
|
| |
| If this second statement returns an error, you have done something wrong.
| |
|
| |
| (optional) To run Dlib with a face and landmark detector on a webcam feed, first download the model for the latter from here and unzip it. I have written a short script on my gist page which requires the webcam class. You need to download the latter to run the former as well as the model.
| |
| 2. Install and build Torch
| |
| Torch is an opensource machine learning library based on Lua. Detailed instructions to get started available on their site. They recommend using a script to install some packages but I've been burned one too many times by erroneous scripts with sudo rights and so I will write out what it's doing in plain English.
| |
|
| |
| On another folder (not Dlib), clone the repository.
| |
|
| |
| git clone https://github.com/torch/distro.git torch --recursive
| |
| cd torch
| |
|
| |
| To install necessary packages (if on an Ubuntu 16.04 system like moi), run
| |
|
| |
| # for Ubuntu 16.04
| |
| sudo apt-get install software-properties-common \
| |
| libgraphicsmagick1-dev libfftw3-dev sox libsox-dev \
| |
| libsox-fmt-all
| |
| sudo apt-get install python-software-properties
| |
| sudo apt-get install build-essential gcc g++ curl \
| |
| cmake libreadline-dev git-core libqt4-dev libjpeg-dev \
| |
| libpng-dev ncurses-dev imagemagick libzmq3-dev gfortran \
| |
| unzip gnuplot gnuplot-x11 ipython
| |
| sudo apt-get install -y gcc-4.9 libgfortran-4.9-dev g++-4.9
| |
|
| |
| For Raspbian
| |
|
| |
| # for Raspbian Jessie
| |
| sudo apt-get install -y build-essential gcc g++ curl \
| |
| cmake libreadline-dev git-core libqt4-dev libjpeg-dev \
| |
| libpng-dev ncurses-dev imagemagick libzmq3-dev gfortran \
| |
| unzip gnuplot gnuplot-x11 ipython
| |
|
| |
| Now run the install.sh script (which is more like a build script) and source the environment activation file.
| |
|
| |
|
| | cd /usr/local/src |
| | git clone https://github.com/TadasBaltrusaitis/OpenFace.git |
| | cd OpenFace |
| | chmod +x download_models.sh |
| | ./download_models.sh |
| ./install.sh | | ./install.sh |
| source install/bin/torch-activate
| |
|
| |
| Caveat 1.
| |
| The necessary paths in "install/bin/torch-activate" are hard-coded absolute paths so if you move the installed directory, be sure to change these as well.
| |
|
| |
| Caveat 2.
| |
| Older versions of CUDA will not work. If you don't feel like updating, just install without it by adding "path_to_nvcc=" to line 82 in install.sh file.
| |
|
| |
| Caveat 2-1.
| |
| For old or Atom based systems that do not have AVX, the library is automatically going to use SSE which has a bug on randperm function. Rest assured, it was fixed recently so be sure to pull that patch if running on Atom.
| |
|
| |
| 3. Install Openface
| |
| Now for the final piece of the puzzle, clone the repository.
| |
|
| |
| git clone https://github.com/cmusatyalab/openface.git openface
| |
| cd openface
| |
|
| |
| There has been a release on Feb 26, 2016 and it's been roughly a year since. So I think it's better to just use the tip rather than checking out the last release. Next, install and download necessary artifacts.
| |
|
| |
| python setup.py install
| |
| ./models/get-models.sh
| |
| pip install -r requirements.txt
| |
| luarocks install csvigo
| |
| luarocks install dpnn
| |
|
| |
| 4. Get labeled faces and train on them
| |
| It's now finally time to run Openface and see what it can do. To get a good batch of labeled faces on which to run the recognition task on, there is the LFW (labeled faces in the wild) dataset. Download then unzip which creates a directory lfw containing 5k directory of IDs.
| |
|
| |
| wget http://vis-www.cs.umass.edu/lfw/lfw.tgz
| |
| tar -zxvf lfw.tgz
| |
|
| |
| I'm going to select from this a list that only has an excess of 10 faces and save it into a file called big_db.
| |
|
| |
| find lfw/ -mindepth 1 -maxdepth 2 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | awk '$NF>10{print $1}' > big_db
| |
|
| |
| Next, I'm going to select 10 random people out of this list and copy them to another folder called training-images.
| |
|
| |
| mkdir -p training-images
| |
| cat big_db | shuf -n 10 | xargs cp -avt training-images/
| |
|
| |
| If you'd like to recognize yourself, add a folder in training-images. Be sure to include many photos in which you're the single identifiable human face.
| |
|
| |
| We're now doing to run face landmark detection on each photo which will
| |
|
| |
| * Detect the biggest face
| |
| * Detect the facial landmarks (outer eyes, nose and lower lip)
| |
| * Warp affine to a canonical face
| |
| * Save output (96x96) to a file in an easy to access format
| |
|
| |
|
| |
| To do this, run
| |
|
| |
| ./util/align-dlib.py ./training-images/ align outerEyesAndNose ./aligned-images/ --size 96
| |
|
| |
| Next, run feature extraction on each of the images.
| |
|
| |
| ./batch-represent/main.lua -outDir ./generated-embeddings/ -data ./aligned-images/
| |
|
| |
| As a final step, train a classifier from generated representations.
| |
|
| |
| ./demos/classifier.py train ./generated-embeddings/
| |
|
| |
| This will create a file called classifier.pkl in generated-embeddings folder.
| |
|
| |
|
| |
|
| |
| 5. Run
| |
| To test if everything is working properly before working with the trained model from Section 4, let's try this on a pre-trained model. There is a pre-trained model on celebrities in folder. To test using this image, run
| |
|
| |
| ./demos/classifier.py infer models/openface/celeb-classifier.nn4.small2.v1.pkl images/examples/adams.jpg
| |
|
| |
| Artifacts of sections 1~4 done on RPI are on this link. Be sure to extract it from /home/pi/ to produce /home/pi/fd_fr as the internal scripts are hardcoded to that location. I've made a couple of changes to the base as this is run on a 32bit environment. Running "git diff" from /home/pi/fd_fr/openface will reveal the changes.
| |
|
| |
| This should correctly predict the sample image as Amy Adams which predicts with 81% certainty but on RPI is 34% which I find odd...
| |
|
| |
|
| To complete the final leg of our journey, I recommend testing on yourself. I saved a photo of myself that I didn't include in the training set as sky_chon.jpg. To test the trained model on me, I run
| | '''NOTE:''' libjasper perlu dibuang dari install.sh di ubuntu 18.04 |
|
| |
|
| ./demos/classifier.py infer generated-embeddings/classifier.pkl sky_chon.jpg
| | Jika berhasil, hasilnya |
|
| |
|
| To run using the webcam (dev/video0) on VGA.
| | .. |
| | .. |
| | [100%] Linking CXX executable ../../bin/FeatureExtraction |
| | [100%] Built target FeatureExtraction |
| | OpenFace successfully installed. |
|
| |
|
| ./demos/classifier_webcam.py --width 640 --height 480 --captureDevice 0 generated-embeddings/classifier.pkl
| | ==Test== |
|
| |
|
| Works like a charm!!
| | for videos: |
|
| |
|
| References
| | ./bin/FaceLandmarkVid -f "../samples/changeLighting.wmv" -f "../samples/2015-10-15-15-14.avi" |
|
| |
|
| https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78#.lugw83dgc
| | for images: |
| https://cmusatyalab.github.io/openface/
| |
| http://dlib.net/
| |
| http://blog.dlib.net/2014/02/dlib-186-released-make-your-own-object.html
| |
| http://bamos.github.io/2016/01/19/openface-0.2.0/
| |
| https://github.com/davisking/dlib
| |
| http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
| |
| https://github.com/torch/torch7/issues/966
| |
| https://wiki.debian.org/RaspberryPi/qemu-user-static
| |
| https://hblok.net/blog/posts/2014/02/06/chroot-to-arm/
| |
| https://lukeplant.me.uk/blog/posts/sharing-internet-connection-to-chroot/
| |
| https://hblok.net/blog/posts/2014/02/06/chroot-to-arm/
| |
| https://github.com/cmusatyalab/openface/issues/42
| |
|
| |
|
| | ./bin/FaceLandmarkImg -fdir "../samples/" -wild |
|
| |
|
| | for multiple faces in videos: |
|
| |
|
| | ./bin/FaceLandmarkVidMulti -f ../samples/multi_face.avi |
|
| |
|
| | for feature extraction (facial landmarks, head pose, AUs, gaze and HOG and similarity aligned faces): |
|
| |
|
| | ./bin/FeatureExtraction -verbose -f "../samples/default.wmv" |
|
| |
|
| ==Referensi== | | ==Referensi== |
|
| |
|
| * http://allskyee.blogspot.co.id/2017/03/face-detection-and-recognition-using.html | | * https://github.com/TadasBaltrusaitis/OpenFace/wiki/Unix-Installation |
Sumber: https://github.com/TadasBaltrusaitis/OpenFace/wiki/Unix-Installation
Instalasi Aplikasi Pendukung
sudo su
apt update
apt -y install build-essential cmake libopenblas-dev liblapack-dev \
git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev \
python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev \
libtiff-dev libdc1394-22-dev checkinstall unzip \
llvm clang libc++-dev libc++abi-dev libboost-all-dev
Instalasi Openface
cd /usr/local/src
git clone https://github.com/TadasBaltrusaitis/OpenFace.git
cd OpenFace
chmod +x download_models.sh
./download_models.sh
./install.sh
NOTE: libjasper perlu dibuang dari install.sh di ubuntu 18.04
Jika berhasil, hasilnya
..
..
[100%] Linking CXX executable ../../bin/FeatureExtraction
[100%] Built target FeatureExtraction
OpenFace successfully installed.
Test
for videos:
./bin/FaceLandmarkVid -f "../samples/changeLighting.wmv" -f "../samples/2015-10-15-15-14.avi"
for images:
./bin/FaceLandmarkImg -fdir "../samples/" -wild
for multiple faces in videos:
./bin/FaceLandmarkVidMulti -f ../samples/multi_face.avi
for feature extraction (facial landmarks, head pose, AUs, gaze and HOG and similarity aligned faces):
./bin/FeatureExtraction -verbose -f "../samples/default.wmv"
Referensi