ubuntu_environment_config.md
ubuntu 环境配置
安装包准备
-
下载 410以上显卡驱动 文件名:
NVIDIA-Linux-x86_64-410.66.run
-
下载 cuda 10.0 选择
CUDA Toolkit 10.0 (Sept 2018)...
选择详细参数: linux -> x86_64 -> ubuntu -> 16.04 -> runfile(local) 然后直接下载,2.0G,文件名:cuda_10.0.130_410.48_linux.run
-
下载cudnn 7.4.2 首先注册一个帐号,然后登录,在这个页面 勾选
I Agree To the Terms of the cuDNN Software License Agreement
后能看见Archived cuDNN Releases
点进去后选择Download cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0
然后弹出框里面选择cuDNN Library for Linux
下载,大小:424.5M,文件名:cudnn-10.0-linux-x64-v7.4.2.24.tgz
安装依赖
- 将apt-get更新到国内源并更新所有包(如果更新过程中出现权限不足的情况,请在命令最前面加上
sudo
) - 安装opencv依赖:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libavcodec-ffmpeg56 libhdf5-dev
安装cuda环境
- 安装驱动
- 桌面状态按住
Ctrl + Alt + F1
进入文本行模式,登录后,进入到默认下载文件夹cd /home/swls/Downloads
-
sudo service lightdm stop
#关闭桌面服务 -
chmod +x NVIDIA-Linux-x86_64-410.66.run
# 增加执行权限 -
sudo ./NVIDIA-Linux-x86_64-410.66.run -no-x-check -no-nouveau-check -no-opengl-files
# 安装驱动, 安装过程可能会提示,一直默认就可以 -
sudo sh ./cuda_10.0.130_410.48_linux.run
# 安装cuda,过程中第一步会提示是否安装 410 的显卡驱动,选择no
,因为上一步已经安装完成,后面都选择yes
就行 - 添加环境变量: echo 'export PATH="$PATH:/usr/local/cuda-10.0/bin:/usr/local/cuda-10.0/include:$HOME/bin"' >> ~/.bashrc echo 'export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64:/usr/local/cuda-10.0/extras/CUPTI/lib64:/usr/local/cuda-10.0/include"' >> ~/.bashrc echo 'export CUDA_BIN_PATH="/usr/local/cuda-10.0/include:/usr/local/cuda-10.0/bin"' >> ~/.bashrc source
- 安装 cudnn: local/cuda-10.0/include/ sudo cp /home/swls/Download/cuda/lib64/* /usr/ local/cuda-10.0/lib64/
- 终端执行
nvidia-smi
查看显卡与驱动信息,能正常显示即表明安装成功 -
sudo service lightdm start
#打开桌面服务
- 文本行模式 按住
Ctrl + Alt + F7
即可打开桌面系统 - 再次终端执行
nvidia-smi
查看显卡与驱动信息,能正常显示即表明安装成功
调用示例
接口规范
接口函数共有三个,init_model
函数负责初始化模型,可根据返回码查看应对错误详细信息,recognise
函数接受三个参数,第一个为识别图片路径,第二个save_path为打框图片保存路径,第三个为空字符串,识别结果将填入其中(json格式),free_model
即为关闭识别接口,释放资源。所有函数返回 非0
代表此次调用错误。
- int init_model(const char *path_prefix);
- int recognise(char* image_path, char *save_path, char *return_char);
- int free_model();
c++ 代码调用示例请查看 demo.cc
需要编译: g++ -o demo.so demo.cc -std=c++11 -ldl -shared -fPIC
; python 代码调用示例请查看 demo.py
可直接运行。
http服务
主目录下运行sh ./run_service.sh
即可开启web service 服务,将识别接口部署到本地环境下,其中 service
文件夹下存放运行服务的必要文件和python依赖。
调用示例
以下代码块展示了初始化识别接口的调用示例,包括访问地址,以及传入参数形似,以及键名,必须为recoglib_so_path
和 model_dir
,键值请填写相应参数。
'http://127.0.0.1:9999/api/init' info_dict = { "recoglib_so_path" : "/home/swls/work_dir/github/models-master/research/object_detection/scene_recog/package/recoglib.so", "model_dir" : "/home/swls/work_dir/github/models-master/research/object_detection/scene_recog/package" } r = requests.post(url, data=info_dict, timeout= 30) print( "init: ") print(r.status_code)
详细代码请查看主目录下的demo_post.py
,其中需要修改所有关于路径的参数即可运行查看返回结果(运行demo_post.py
需要安装requests
库),每次访问http接口都会返回json字符串,具体格式如下: **注意:**每次调用后都要先判断code
值是否为0,才执行之后操作。非0代表调用失败,可在错误码一览表查看相应信息,即可根据返回值和message判断具体问题所在。
init接口返回格式:
"message": "ok", "code": 0}
run接口返回格式:
"message": "OK", "code": 0, "data": [{ "y2": 1765.583984375, "y1": 1195.190673828125, "class_idx": 1, "score": 0.9999951124191284, "x2": 2938.8828125, "x1": 2512.82470703125}, { "y2": 3282.471435546875, "y1": 960.3641357421875, "class_idx": 6, "score": 0.9998703002929688, "x2": 2369.16552734375, "x1": 1262.511474609375}, { "y2": 1592.4522705078125, "y1": 1238.4974365234375, "class_idx": 1, "score": 0.9993507266044617, "x2": 2374.076171875, "x1": 2115.9111328125}], "out_path": "/home/swls/work_dir/github/models-master/research/object_detection/scene_recog/package/service/RecogApi2/upload/0c4fe954-45b5-403c-b257-6065df5dc24d.jpg"}
free接口返回格式:
"message": "free success", "code": 0}
错误码一览
错误码 | 信息 |
200 | 模型文件不存在 |
201 | 模型运行失败 |
250 | 模型未初始化错误 |
251 | 图片不存在 |
252 | json解析错误 |
253 | 图片名格式错误 |
识别结果格式
示例 变压器_呼吸器_硅胶变色_0032.JPG
识别结果如下
"code": 0, "message": "ok", "out_path": "/home/swls/work_dir/github/models-master/research/object_detection/scene_recog/package/service/RecogApi2/upload/e1d83604-a7bc-40da-a83b-723bcfb5ed50.jpg", "data": [ { "class_idx" : 1, "score" : 0.99999511241912842, "x1" : 2512.82470703125, "x2" : 2938.8828125, "y1" : 1195.190673828125, "y2" : 1765.583984375 }, { "class_idx" : 6, "score" : 0.99987030029296875, "x1" : 1262.511474609375, "x2" : 2369.16552734375, "y1" : 960.3641357421875, "y2" : 3282.471435546875 }, { "class_idx" : 1, "score" : 0.99935072660446167, "x1" : 2115.9111328125, "x2" : 2374.076171875, "y1" : 1238.4974365234375, "y2" : 1592.4522705078125
注意事项
- 图片路径暂时不支持中文
- 渲染图只标记了外框,不标记类别与置信度
- 识别结果里面x1,y1 为左上角坐标,x2,y2为右下角坐标
- 识别结果里面
out_path
为此次调用模型渲染图存放路径 - 运行程序需要将
lib
文件夹加入到动态库查找路径,执行一下命令即可:(修改对应路径)
echo 'export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/swls/lib"' >> ~/.bashrc
source ~/.bashrc