3基于Analytics Zoo的人脸识别Demo实践
本Demo示例中视频源使用的是一路本地视频文件,在实际中也可以对接多路视频服务器,基于Analytics Zoo集群并行处理。
系统要求
JDK8
Spark集群(使用2.2.0版本)
Kafka集群
Python环境
Docker环境
1.在容器中配置Producer项目
1. 创建Docker容器并进入
sudo docker run -itd --net=host--name=adiclient ubuntu:16.04 bash
sudo docker exec -it adiclient bash
2. 配置基本环境
apt-get update--fix-missing && \
apt-get install -y vim curl nano wget unzipmaven git bzip2 && \
apt-get install -y locales && locale-gen en_US.UTF-8 &&\
apt-get install -y build-essential &&\
apt-get install -y protobuf-compilerlibprotoc-dev && \
apt-get install -y libgtk2.0-dev
3. 安装java、cmake
可以通过下载java和cmake解压包进行配置。
4. 更新caffe和opencv的so文件
通过git下载caffe和opencv项目,cmake编译项目,更新容器环境下的对应so文件。
5. 下载Analytics Zoo及Producer相关代码
git clonehttps://github.com/intel-analytics/ad-insertion.git
6. 编译libmtcnn.so文件
cd ad-insertion/face-detection/
./build.sh
cp ./libmtcnn.so~/ad-insertion/ad-insertion-native/src/main/resources/
7. 从opencv和caffe的build/lib目录下导入对应的so包到~/ad-insertion/ad-insertion- native/src/main/resources/替换该目录下的so包
8. 编译native,并与producer项目打包生成jar包
#build native
cd ~/ad-insertion/ad-insertion-native/
./runMainTest.sh
#package producer
cd ~/ad-insertion/ad-insertion-producer/
mvn clean package
创建targetproducer目录做为videoFrameProducer的classpath将下列依赖jar包导入:
videoFramProducer 主要用于实现视频解码成帧并输入到kafka集群
2.配置Spark集群节点及Client Driver
配置spark的spark-env.sh、spark-defaults.conf与slaves文件。
Spark-env.sh
spark-defaults.conf
slaves
之后启动spark集群。
将libmtcnn.so文件、ad-insertion-producer-0.1.0-SNAPSHOT-jar-with- dependencies.jar包与ad-insertion-producer项目中的resouces文件夹从容器中复制到节点 上。so文件放入每个集群节点的/usr/bin文件夹内,jar包与resouces文件夹放入集群master节点的spark文件目录下。
之后使用如下命令在每个worker节点上安装与容器相同的基本环境:
apt-getinstall -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
apt-getinstall –y libboost-all-dev
apt-getinstall -y libatlas-base-dev
apt-getinstall -y python-dev pytest
apt-getinstall -y libgflags-dev libgoogle-glog-dev liblmdb-dev
apt-getinstall –y build-essential tcl tk gettext autoconf zlib1g-dev gcc
apt-getinstall –y python-dev python3-dev libcurl4-openssl-dev
安装完成后,可以开始运行项目。
3.运行人脸识别Demo
./bin/spark-submit -classcom.intel.analytics.zoo.adi.examples.SparkStreamingDriver\
--master spark://192.168.100.6:7077 \
--executor-memory 50G \
--driver-memory 30g\
--total-executor-cores 2 \
/home/ctbri/spark-2.2.0/ad-insertion-producer-0.1.0-SNAPSHOT-jar-with-dependencies.jar\
--zkQuorum "" \
--brokers "192.168.100.6:9092"\
--groupId "test-consumer-group" \
--topic "adi" --partition 2 \
--baseDir"/home/ctbri/spark-2.2.0/resources"
启动spark后,等到出现“no records received”时进行下一步。
export
LD_LIBRARY_PATH=~/ad-insertion/ad-insertion- native/src/main/resources:~/caffe/build/lib/:$LD_LIBRARY_PATH
export_JAVA_OPTIONS="-XX:MaxPermSize=5G –Xmx30G"
exportMAVEN_OPTS="-XX:ReservedCodeCacheSize=512m -XX:MaxPermSize=5G–Xmx30G"
java-cp"./targetproducer/*"com.intel.analytics.zoo.adi.examples.VideoFrameProduceApp
运行后会启动producer服务,将视频拆分为帧后通过kafka发送到spark集群。
查看日志,可以看到收到的各个人脸识别结果,
—完—