环境搭建
我们使用的操作系统是Ubuntu14.04 LTS.在这一部分主要使用tensorflow的object
detection api。需要以下library:
python3.6
Protobuf 2.6
Pillow 1.0
lxml
Jupyter notebook
Matplotlib
Tensorflow 1.4
opencv3
一.安装anaconda并创建环境
1. 使用anaconda进行安装
anaconda是一个python科学计算软件包的管理系统。由于我在公司的电脑上通过anaconda来进行包的下载,所以如果新的平台也使用anaconda来进行软件包管理,可以很轻松的配置相同的环境。
step1
下载anaconda,选择python3.6对应的版本。
出现问题conda:未找到命令, 由于之前没哟配置环境变量
# 将anaconda的bin目录加入PATH,根据版本不同,也可能是~/anaconda3/bin
echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc
# 更新bashrc以立即生效
source ~/.bashrc
Step2
安装好anaconda后,创建一个环境(envs)并安装所需要的所有的包。
conda list --explicit > package -file.txt
conda create -n myenv --file package-list.txt
Step3
进入所创建的环境,
source activate myenv
二.逐个安装相关的包
对于tensorflow,详细的安装方法可以参考tensorflow 安装方法。典型的用户可以采用如下方法,
# For CPU
pip install tensorflow
# For GPU
pip install tensorflow-gpu
安装其他的包,
pip install pillow
pip install lxml
pip install jupyter
pip install matplotlib
pip install opencv-python
三.Protobuf Compilation
tensorflow object detection API使用Protobufs来配置模型和训练参数。在正常使用tensorflow之前,我们需要对Protobufs包进行编译,在Google_models/research中,执行以下命令,
protoc object_detection/protos/*.proto --python_out=.
把包加入PYTHONPATH
# 在Google_models/research
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
四.安装tf-openpose所需要的包
cd tf-openpose
pip3 install -r requirements.txt
运行模式
运行前
source activate myenv #进入所配置的环境
基础包
进入Google_models/research/object_detection, 需要处理的图片放在source_images目录中,处理后的图片放在output_images文件夹中。
python run.py
修改后的代码(识别人体骨架)
处理单张图片:
进入tf-openpose/src,需要处理的图片放在tf-openpose/source_images,处理后的图片放在tf-openpose/output_images文件夹中。
python run.py #默认处理路径,需要处理的图片为test.jpg
python run.py –image=/../../.. #需要绝对路径,不能使用~
处理多张图片:
进入tf-openpose/src,需要处理的图片放在tf-openpose/image_bird_eye,处理后的图片放在tf-openpose/out_bird_eye文件夹中。
python multiple_run.py #默认处理路径,需要处理的图片放于image_bird_eye文件夹中
python multiple_run.py –input_image_path=/../../.. #需要绝对路径,不能使用~
配置过程中主要的问题及解决方法
问题一:在安装tensorflow, opencv-python的过程中,由于网络问题,可能会下载失败。
解决办法一:使用清华镜像在网站https://mirrors.tuna.tsinghua.edu.cn/中找到版本的tensorflow和tensorflow-gpu的数据包。参考 Google 教程 https://source.android.com/source/downloading.html,将anaconda默认下载地址中的https://android.googlesource.com/ 全部使用 https://aosp.tuna.tsinghua.edu.cn/ 代替。然后,在进行下载安装。(清华镜像中没有opencv-python的对应镜像,需要从网上下载,手动安装)
解决方法二:在github上,下载lantern VPN,开启VPN后可以下载安装TensorFlow,tensorflow-gpu,opencv-python但是,下载速度较慢。
问题二:安装并配置TensorFlow object detection API的过程中。
执行以下命令时:
protoc object_detection/protos/*.proto --python_out=.
执行后报错:object_detection/protos/anchor_generator.proto:11:3: Expected "required", "optio nal", or "repeated".
object_detection/protos/anchor_generator.proto:11:32: Missing field number.
解决方法:
#download protoc 3.3
mkdir protoc_3.3
cd protoc_3.3
wget https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip
chmod 775 protoc-3.3.0-linux-x86_64.zip
unzip protoc-3.3.0-linux-x86_64.zip
#compile proto file
cd /usr/local/lib/python2.7/dist-packages/tensorflow/models/
${protoc_3.3 dir}/bin/protoc object_detection/protos/*.proto --python_out=.
下载比较慢也可以这里下载:
https://www.witsrc.com/download
unzip protoc-3.3.0-linux-x86_64.zip
/home/go/Google_models/research/bin/protoc object_detection/protos/*.proto --python_out=.
export PYTHONPATH=$PYTHONPATH:'pwd':'pwd'/slim
问题三:ImportError:/usr/lib/libstdc++.so.6: version `CXXABI_1.3.9' not found
问题原因:由于升级了gcc,却没有将升级后的gcc的动态库去替换老版本的gcc动态库所致。
链接:https://blog.csdn.net/ZX714311728/article/details/69628836
1.查看动态库:
strings /usr/lib/libstdc++.so.6 | grep CXXABI
本机地址为strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6(具体地址看报错地址)修改指令地址为:strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep CXXABI
查看结果发现没有所需的CXXABI_1.3.3
2.ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so.6
我们发现libstdc++.so.6是个软连接,是连接到libstdc++.so.6.0.19上的,而libstdc++.so.6.0.19是老版本的动态库。所以下面我们要做的就是将libstdc++.so.6连接到新版本的动态库上去。
3. find / -name "libstdc++.so.*"
显示文件太多,且其中有大部分无访问权限不方便查看建议使用 指令:
find / -name "libstdc++.so.*" 2>/dev/null
可以忽略无权访问的文件
结果显示还有很多行。根据文中提示,需要找到系统所含的gcc升级输出目录,但是,没有发现系统中所含的gcc升级输出目目录。其中有关于opencv和anaconda3中的相关升级gcc时的输出目录。我们尝试使用anaconda3中的gcc输出目录对系统中的libstdc++.so.6进行软连接。
指令:cp /home/linux001/anaconda3/envs/vision/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /usr/lib/x86_64-linux-gnu/
显示:cp: 无法创建普通文件"/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.24": 权限不够
输入:sudo -s 进入root模式
再次尝试:cp /home/linux001/anaconda3/envs/vision/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /usr/lib/x86_64-linux-gnu/
5.将libstdc++.so.6连接到libstdc++.so.6.0.24上去:
cd /usr/lib/x86_64-linux-gnu/
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.22 libstdc++.so.6
6.重新运行以下命令检查动态库
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep 'CXXABI'
完成。
ImportError: dlopen: cannot load any more object with static TLS
配置TensorFlow object detection API