---
title: 运行目标检测样例
description: "yolov3模型对输入图片进行预测推理，并将结果打印到输出图片上。本章节以在“/home”目录下获取sample仓代码为例。"
url: https://www.hiascend.com/document/detail/zh/300Vtest/latest/300V_0045.html
sourcePath: /source/zh/300Vtest/300VG/300V_0045.html
indexId: 45790a8f9fe9d8bbe270693db5d44a753e6087a83c1c9605d43715327a048cfc40
---
# 运行目标检测样例

yolov3模型对输入图片进行预测推理，并将结果打印到输出图片上。本章节以在“/home”目录下获取sample仓代码为例。

样例输入：原始图片jpg文件。

样例输出：带推理结果的jpg文件。

#### 获取样例

在任意目录下（如“/home”）执行如下命令获取sample仓代码。
```
cd /home
git clone https://gitee.com/ascend/samples.git
```


如果返回类似以下回显信息：

```
fatal: unable to access 'https://gitee.com/ascend/samples.git/': server certificate verification failed. CAfile: none CRLfile: none
```

可执行如下命令关闭证书检验。

```
git config --global http.sslVerify "false"
```


#### 准备模型

1. 执行如下命令安装Python依赖。

```
pip3 install attrs psutil
```


2. 在sample仓代码所在目录下，执行如下命令进入“样例目录”。

```
cd samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture
```


  下文中的“样例目录”均指“samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture”目录

3. 进入“样例目录/model”目录，获取yolov3原始模型。

```
cd model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/Yolov3/yolov3.caffemodel --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/Yolov3/yolov3.prototxt --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/YOLOV3_coco_detection_picture/aipp_nv12.cfg --no-check-certificate
```


4. 模型转换。
执行npu-smi info命令查看芯片名称，如下图所示，红框处为芯片名称。
在“样例目录/model”目录下，执行如下命令转换模型，以下命令只适用于310P芯片。

```
atc --model=yolov3.prototxt --weight=yolov3.caffemodel --framework=0 --output=yolov3
--soc_version=Ascend310P3
--insert_op_conf=aipp_nv12.cfg
```


  - --model：原始模型文件路径。
  - --weight：权重文件路径。
  - --framework：原始框架类型。0：表示Caffe；1：表示MindSpore；3：表示TensorFlow；5：表示ONNX。
  - --output：生成的yolov3.om文件存放在“样例目录/model”目录下。建议使用命令中的默认设置。
  - --soc_version：昇腾AI处理器的版本。
  - --insert_op_conf：cfg文件路径。


#### 安装依赖

1. 以root用户登录服务器。
2. 在服务器任意目录（如“/home”）下，执行如下命令安装opencv。

```
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.x.zip --no-check-certificate
unzip opencv.zip
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DPYTHON_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")  \
-DPYTHON_LIBRARY=$(python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))")  \
../opencv-4.x/
make -j8
make install
```


  若回显类似如下报错信息，表示未安装cmake。

```
bash: cmake: command not found
```


  请执行如下命令安装。

```
apt-get update
apt-get install -y cmake
```


3. 安装后，头文件和库文件路径如下：

  - 头文件路径：“/usr/local/include/opencv4/”
  - 库文件路径：“/usr/local/lib”
    如下图所示，该路径仅为示例，现场系统环境也有可能是“/usr/local/lib64”，请用户以实际安装路径为准。

    用户可执行如下命令进入“/usr/local/lib”目录（或“/usr/local/lib64”目录，请用户以实际安装路径为准）查看库文件是否存在。

```
cd /usr/local/lib
ls
```


    库文件如下所示。

4. 配置环境变量（库文件路径以“/usr/local/lib”为例，请用户以实际安装路径为准）。

  a. 执行vi ~/.bashrc命令，打开.bashrc文件，在文件最后一行后面添加如下内容。

```
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
```


  b. 执行:wq!命令保存文件并退出。
  c. 执行source ~/.bashrc命令使其立即生效。


#### 部署和运行样例

1. 在“样例目录/src”目录下，执行如下命令打开CMakeLists.txt文件。

```
vi CMakeLists.txt
```


  在“include_directories”参数中加入头文件路径，在“link_directories”参数中加入库文件路径（以“/usr/local/lib”为例，请用户以实际路径替换），如下加粗内容所示：

```
# Header path
include_directories(
$ENV{INSTALL_DIR}/runtime/include/
../inc/
/usr/local/include/opencv4
)
if(target STREQUAL "Simulator_Function")
add_compile_options(-DFUNC_SIM)
endif()
# add host lib path
link_directories(
$ENV{INSTALL_DIR}/runtime/lib64/stub
/usr/local/lib
)
```


2. 在“样例目录/src”目录下，执行如下命令，修改“object_detect.cpp”文件。

```
vi object_detect.cpp
```


  将参数“CV_LOAD_IMAGE_UNCHANGED”移除或注释，如下加粗内容所示（修改位置可执行:333命令查找）：

```
void ObjectDetect::DrawBoundBoxToImage(vector<BBox>& detectionResults,
const string& origImagePath)
{
cv::Mat image = cv::imread(origImagePath);
// , CV_LOAD_IMAGE_UNCHANGED
for (int i = 0; i < detectionResults.size(); ++i) {
cv::Point p1, p2;
p1.x = detectionResults[i].rect.ltX;
p1.y = detectionResults[i].rect.ltY;
p2.x = detectionResults[i].rect.rbX;
p2.y = detectionResults[i].rect.rbY;
cv::rectangle(image, p1, p2, g_colors[i % g_colors.size()], g_lineSolid);
cv::putText(image, detectionResults[i].text, cv::Point(p1.x, p1.y + g_labelOffset),
cv::FONT_HERSHEY_COMPLEX, g_fountScale, g_fontColor);
}
string folderPath = "./output";
if (NULL == opendir(folderPath.c_str())) {
mkdir(folderPath.c_str(), 0775);
}
int pos = origImagePath.find_last_of("/");
string filename(origImagePath.substr(pos + 1));
stringstream sstream;
sstream.str("");
sstream << "./output/out_" << filename;
cv::imwrite(sstream.str(), image);
}
```


3. 配置环境变量。

  a. 以运行用户在任意目录下执行vi ~/.bashrc命令，打开.bashrc文件，在文件最后一行后面添加如下内容。
    以CANN的默认安装路径“/usr/local/Ascend”
    为例，用户请根据CANN的实际安装路径配置。

```
export CPU_ARCH=`arch`
export THIRDPART_PATH=/usr/local/Ascend/thirdpart/${CPU_ARCH}  #代码编译时链接samples所依赖的相关库文件
export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest
```


  b. 执行:wq!命令保存文件并退出。
  c. 执行source ~/.bashrc命令使其立即生效。
4. 在“样例目录”下创建样例相关依赖文件夹。

```
mkdir -p ${THIRDPART_PATH}
```


5. 在“样例目录”下执行如下命令，拷贝common文件到样例相关依赖路径中。

```
# ${samples}表示样例所在目录（如“/home”）
cp -r ${samples}/samples/common ${THIRDPART_PATH}
# 命令示例
cp -r /home/samples/common ${THIRDPART_PATH}
```


6. 在“样例目录/scripts”目录下，执行以下命令。
  执行编译脚本，开始样例编译
  - Arm架构

```
echo arm | bash sample_build.sh
```


  - x86架构

```
echo x86 | bash sample_build.sh
```


7. 在“样例目录/scripts”目录下，执行运行脚本，开始运行样例。

```
bash sample_run.sh
```


8. 运行完成后，会在“样例目录/out/output”目录下生成推理后的图片，用户可将图片下载至本地，显示对比结果如下所示。
