OpenFace 调试记录
1.OpenFace 是 卡耐基梅陇(CMU)大学的一个图像+机器学习项目,整体程序包含:人脸发现,特征提取,特征神经网络训练,人脸识别这四部分。
github https://github.com/cmusatyalab/openface/
API文档 http://openface-api.readthedocs.io/en/latest/index.html
website http://cmusatyalab.github.io/openface/
2.安装
官方安装说明 http://cmusatyalab.github.io/openface/setup/
说的不是很详细,很多关键依赖以及基本概念并没有讲清楚。很容易导致安装、编译失败。
2.1操作系统
只支持Linux 和OSX,官方强烈推荐使用docker镜像来使用,不过为了运行加速或自主修改,还是建议大家从源码搭建。
OpenFace已经在ubuntu14.04和OSX10.10上成功测试。
我使用ubuntu14.04.5 https://mirror.tuna.tsinghua.edu.cn/ubuntu-releases/14.04.5/ubuntu-14.04.5-desktop-amd64.iso
2.2从头安装
我的实验室位置在西安,更换中科大的软件源超屌 http://mirrors.ustc.edu.cn trasty ,以下所有依赖的安装速度均与网速有关,也可能跟长城有关,安装时还需要耐心等待。若某一步安装不成功可以重启计算机重新安装。
sudo apt-get update sudo apt-get install ssh git curl zsh vim #安装基本工具 sudo -i #进入root,基本上主要程序都放在/root/目录下,只有openface源码放在/home/usr/也可以。
#安装必要依赖
1 sudo apt-get install build-essential cmake gfortran libatlas-dev libavcodec-dev libavformat-dev libboost-all-dev libgtk2.0-dev libjpeg-dev liblapack-dev libswscale-dev pkg-config python-dev python-pip wget zip
#必要的数值计算库
1 pip2 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple #选择下载镜像,可以加速,
2
3 pip2 install scipy #numpy安装成功后,scipy总失败,reboot之后就好了
4
5 pip2 install pandas
6
7 pip2 install scikit-learn
8
9 pip2 install scikit-image #发现安装慢也可以使用 sudo apt-get install python-skimage的方式
#安装Torch 基于lua的科学计算工具,其包管理器是luarocks。
1 sudo apt-get install luarocks
2
3 curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash -e #安装Torch的依赖库
4
5 git clone https://github.com/torch/distro.git ~/torch --recursive #源码
6
7 cd torch
8
9 bash install-deps #(cloning openblas)
10
11 ./install.sh #源码安装torch 如果网络被墙也可以从www.pandaroll.cn/openface/torch.tar.gz 下载 ,解压:tar -xvf torch.tar.gz
#再安装torch需要的依赖,下载
1 ~/torch/install/bin/luarocks install moses #若安装很慢可以从源码解压后直接安装,下载:www.pandaroll.cn/openface/Moses-master.zip 然后在终端输入~/torch/install/bin/luarocks install Moses-master/rockspec/moses-1.4.0-1.rockspec
2
3 ~/torch/install/bin/luarocks install torchx #www.pandaroll.cn/openface/torchx-master.zip
4
5 ~/torch/install/bin/luarocks install nn #www.pandaroll.cn/openface/nn-master.zip
6
7 ~/torch/install/bin/luarocks install dpnn #www.pandaroll.cn/openface/dpnn-master.zip
8
9 ~/torch/install/bin/luarocks install csvigo #www.pandaroll.cn/openface/lua---csv-master.zip
10
11 ~/torch/install/bin/luarocks install fblualib #www.pandaroll.cn/openface/fblualib-master.zip
12
13 ~/torch/install/bin/luarocks install optim #www.pandaroll.cn/openface/optim-master.zip
#安装opencv
1 sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev
2
3 sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils
下载opencv https://github.com/Itseez/opencv/archive/2.4.11.zip 或 http://www.pandaroll.cn/openface/ocv.zip
1 cd ~
2
3 unzip ocv.zip
4
5 cd opencv-2.4.11
6
7 mkdir release
8
9 cd release
10
11 cmake -G "Unix Makefiles" -D CMAKE_CXX_COMPILER=/usr/bin/g++ CMAKE_C_COMPILER=/usr/bin/gcc -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D BUILD_FAT_JAVA_LIB=ON -D INSTALL_TO_MANGLED_PATHS=ON -D INSTALL_CREATE_DISTRIB=ON -D INSTALL_TESTS=ON -D ENABLE_FAST_MATH=ON -D WITH_IMAGEIO=ON -D BUILD_SHARED_LIBS=OFF -D WITH_GSTREAMER=ON ..
12
13 sudo make all -j4 #cpu是4核
14
15 sudo make install #若报错硬件问题或操作系统问题,可能是过热问题,换个主板或计算机,最好是台式机。
#安装无报错后将cv2.so 考到python目录下
cp /lib/cv2.so /usr/local/lib/python2.7/dist-packages
#安装dlib
下载dlib https://github.com/davisking/dlib/releases/download/v18.16/dlib-18.16.tar.bz2
若难以下载,也可以 www.pandaroll.cn/opencv/dlib-18.16.tar.bz2
1 cp dlib-18.16.tar.bz2 ~/src
2
3 cd src
4
5 tar xf dlib-18.16.tar.bz2
6
7 cd dlib-18.16/python_examples
8
9 mkdir build
10
11 cd build
12
13 cmake ../../tools/python
14
15 cmake --build . --config Release
16
17 sudo cp dlib.so /usr/local/lib/python2.7/dist-packages
#到目前,opencv 和 dlib应该安装好了,测试一下安装成功否:
1 python
2
3 import cv2
4
5 import dlib
#若都成功,则继续下面的步骤
#安装openface
1 git clone https://github.com/cmusatyalab/openface.git #若下载太慢则:www.pandaroll.cn/openface/openface.zip ,然后解压unzip openface.zip,可以放到/home/usr/目录下面。
2
3 git submodule init
4
5 git submodule update
6
7 cd openface
8
9 sudo python2 setup.py install
#获取模型
1 cd models/get-models.sh #若下载太慢
2
3 则下载 www.pandaroll.cn/openface/shape_predictor_68_face_landmarks.dat.bz2 ,放入 models/dlib中
4
5 bunzip2 shape_predictor_68_face_landmarks.dat.bz2
6
7 下载 www.pandaroll.cn/openface/celeb-classifier.nn4.small2.v1.pkl ,放入 models/openface中
8
9 下载 www.pandaroll.cn/openface/nn4.small2.v1.t7 ,放入 models/openface中
========================安装完成==========
3.测试
3.1demo1 #进入sudo -i root模式
计算不同面孔之间的相似度距离:
1 cd openface
2
3 ./demos/compare.py images/examples/{lennon-1.jpg,clapton-1.jpg}
运行结束后会给出一个结果:l2距离是1.132
1 ./demos/compare.py images/examples/{lennon-1.jpg,lennon-2.jpg}
运行结束后会给出一个结果:l2距离是0.763
发现:同一个人的确更相似。
3.2训练一个分类器
需要人脸原图,每个图包含一个人脸,每个人脸15张图。不同的人的照片放入不同的文件夹下。例如我收集了我自己和妹子的分别15张照片。一共相当于2个人,但是有几个人就分几个文件夹即可。将这几个文件夹放入同一个目录。
1 cd openface
2
3 mkdir training-images
4
5 cp -r siyi/ openface/traning-images
6
7 cp -r naixin/ openface/traning-images
#人脸发现和矫正和裁剪 对其的新照片将放入/aligned-images/目录中,是96*96的正方形图片:
1 ./util/align-dlib.py ./training-images/ align outerEyesAndNose ./aligned-images/ --size 96
#提特征,每个人脸128个特征点,新特征为csv文件,放入了/generated-embeddings/目录中:
1 ./batch-represent/main.lua -outDir ./generated-embeddings/ -data ./aligned-images
#训练自己的面部检测模型,是最基本的SVM模型:classifier.pkl 会放入generated-embeddings/目录下:
1 ./demos/classifier.py train ./generated-embeddings/
#获取一张不在数据集中的照片,利用分类器检测并归属然后会得到一个属于哪个名字的结果 和 一个可信度数值:
新照片siyitest1.jpg:
1 ./demos/classifier.py infer ./generated-embeddings/classifier.pkl siyitest1.jpg
分类器会给出分类结果和可信度,一般同样的人的可信度在99%左右,未在分类器中的人会低于80%。
3.3web-demo
1 sudo pip install -r demos/web/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
2
3 ./demos/web/start-servers.sh
安装一个usb摄像头,打开火狐浏览器:127.0.0.1:8000 可以在线添加训练,实时识别。
==完==
乔思祎
2017年3月20日
OpenFace 调试记录的更多相关文章
- SPI 核软件调试记录
SPI 核软件调试记录 1.首先说说int SpiFlashWaitForFlashReady(void)这一函数,基本上其它函数在执行的时候,都会事先执行一次此函数. 因为此函数的作用主要是用 ...
- Video Timing Controller v6.1软件调试记录
Video Timing Controller v6.1软件调试记录 GUI配置: . case XVTC_VMODE_PAL: //576i@50 { TimingPtr->Interlace ...
- Video Test Pattern Generator(7.0)软件调试记录
Video Test Pattern Generator(7.0)软件调试记录 . XVidC_VideoMode XVIDC_VM_576_50_I = XVIDC_VM_720x576_50_I ...
- MA82G5D16AS16 主频调试记录
MA82G5D16AS16 主频调试记录 当 SCKS 设置 为 MCKDO / 128 时 MCU 的电流为 0.58mA,100UF 电容可以维持 0.5S,大概可以满足. 但是需要注意外围的线路 ...
- Apusic中间件结合MyEclipse进行远程调试记录
Apusic中间件结合MyEclipse进行远程调试记录. 在金蝶域中正常部署应用. 启动金蝶中间件时使用"startapusic -ds"命令. 在MyEclipse的Run-- ...
- http://stblog.baidu-tech.com/?p=1684) coredump调试记录 - PHP篇 原创: 扶墙 贝壳产品技术 今天
http://stblog.baidu-tech.com/?p=1684) coredump调试记录 - PHP篇 原创: 扶墙 贝壳产品技术 今天
- 基于freescale i.Mx6(ARM)的阿里云oss调试记录
交叉编译阿里OSS调试记录 1.1 开通oss服务 具体参考以下链接: https://help.aliyun.com/document_detail/31884.html?spm=a2c4g.111 ...
- [ZJCTF 2019]EasyHeap | house of spirit 调试记录
BUUCTF 上的题目,由于部分环境没有复现,解法是非期望的 house of spirit 第一次接触伪造堆的利用方式,exp 用的是 Pwnki 师傅的,本文为调试记录及心得体会. 逆向分析的过程 ...
- [未完] Linux 4.4 USB —— spiflash模拟usb大容量存储设备 调试记录 Gadget Mass Stroage
linux 4.4 USB Gadget Mass Stroage 硬件平台: licheepi nano衍生 调试记录 驱动信息 │ This driver is a replacement for ...
随机推荐
- poi导入读取时间格式问题
万能处理方案: 所有日期格式都可以通过getDataFormat()值来判断 yyyy-MM-dd-----14 yyyy年m月d日--- 31 yyyy年m月-------57 m月d日 ---- ...
- Features Track[STL map]
目录 题目地址 题干 代码和解释 参考 题目地址 Features Track(ACM-ICPC 2018 徐州赛区网络预赛 ) 题干 代码和解释 题意:一个动画有许多 n 帧,每帧有 k 个点,点的 ...
- OO助教的退休感想
深夜失眠+刚赶完火车的胡言乱语,切莫当真,择日修改 一年前,我在学姐的怂恿鼓励下,加上了吴老师的微信,表达了想担任下学期的OO助教的想法.三天后,我到新主楼参加OO助教的面试,其实还是蛮紧张的,毕竟自 ...
- 第08组 Alpha冲刺(1/4)
队名 八组评分了吗 组长博客 小李的博客 作业博客 作业链接 组员1(组长) 过去两天完成了哪些任务 文字/口头描述 11月9号开小会安排alpha冲刺开始的工作,进行任务分工,具体见11.09会议记 ...
- Cesium中导入三维模型方法(dae到glft/bgltf)[转]
Cesium中导入三维模型方法(dae到glft/bgltf) Cesium中目前支持gltf和bgltf两种格式.“gltf是khronos组织(起草OpenGL标准的那家)定义的一种交换格式,用于 ...
- sudoku 心得 视觉消除法(Visual Elimination)
虽然我是程序员,但这里只介绍人类的思维方法. 这个方法我是从这里看到的: https://www.learn-sudoku.com/visual-elimination.html Most peopl ...
- Xamarin.FormsShell基础教程(8)Shell的模版构成
Xamarin.FormsShell基础教程(8)Shell的模版构成 Shell模版创建的页面包含内容页.标签栏.侧滑菜单.搜索框四部分.下面依次介绍这几个部分. 内容页:内容页就是为用户呈现内容的 ...
- Android Camera2/HAL3
Android : Camera2/HAL3 框架分析 https://www.cnblogs.com/blogs-of-lxl/p/10651611.html Android : Camera之ca ...
- 【GMT43智能液晶模块】例程二十二:USB_CDC实验——高速数据传输
源代码下载链接: 链接:https://pan.baidu.com/s/10KOWONWbNYlonyuX0W0Mcg 提取码:ggpo 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...
- LeetCode 100. Same Tree (判断树是否完全相同)
100. Same Tree Given two binary trees, write a function to check if they are the same or not. Two bi ...