diff --git a/README.md b/README.md index 4a55dd244062a31b5073c7bb081772c799b21492..ecc46afaa652bd69db4893ac0561ac0f37b5777b 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ 凌智视觉模块(Lockzhiner Vision Module) 是福州市凌睿智捷电子有限公司联合百度飞桨倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,其特色包括: -* 计算能力:凌智视觉模块搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU, 以更出色地处理 SIMD 和浮点计算。同时,该模块支持 Int8 量化,内置 0.5 TOPs 的 NPU, 足以应对绝大多数的视觉应用场景。 +* 计算能力:凌智视觉模块搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU, 以更出色地处理 SIMD 和浮点计算。同时,该模块支持 Int8 量化,内置 1 TOPs 的 NPU, 足以应对绝大多数的视觉应用场景。 * 开源适配:凌智视觉模块与飞桨低代码开发工具 PaddleX 完美适配,目前支持PaddleX 中的通用图像分类模型产线, 其余任务场景正在适配中, 未来会陆续上线。 * 简单易用:配合飞桨星河社区 Al Studio, 用户可以实现一键训练;配合凌智视觉算法部署库,用户可以实现一键部署,极大地减轻了用户的使用成本。 diff --git a/configs/LZ-MobileNetV3.yaml b/configs/LZ-MobileNetV3.yaml index cf097aa5cd647f8c8712335d6360beb0214d6026..85b1f70aaff26fd05f48b015bd7ae4269a37d29b 100644 --- a/configs/LZ-MobileNetV3.yaml +++ b/configs/LZ-MobileNetV3.yaml @@ -18,7 +18,7 @@ load_onnx: - 224 - 224 outputs: - - p2o.DequantizeLinear.881 + - DequantizeLinear.881 build: do_quantization: false diff --git a/configs/LZ-Picodet.yaml b/configs/LZ-Picodet.yaml index af327bb2fe1fa9f801a43f4c06f585428e19dbfc..2b87edd27f375aa83767db24dbc56a58f6c9f17d 100644 --- a/configs/LZ-Picodet.yaml +++ b/configs/LZ-Picodet.yaml @@ -18,14 +18,14 @@ load_onnx: - 320 - 320 outputs: - - p2o.DequantizeLinear.1705 - - p2o.DequantizeLinear.1707 - - p2o.DequantizeLinear.1619 - - p2o.DequantizeLinear.1621 - - p2o.DequantizeLinear.1533 - - p2o.DequantizeLinear.1535 - - p2o.DequantizeLinear.1445 - - p2o.DequantizeLinear.1447 + - DequantizeLinear.1705 + - DequantizeLinear.1707 + - DequantizeLinear.1619 + - DequantizeLinear.1621 + - DequantizeLinear.1533 + - DequantizeLinear.1535 + - DequantizeLinear.1445 + - DequantizeLinear.1447 build: do_quantization: false diff --git a/docs/device_parameters.md b/docs/device_parameters.md index f236c83b4f37c2df0b5493a444e954e84c2d6d37..6f35fdbdaebc6ca814da21d3646b1c8ad6c2f4ed 100644 --- a/docs/device_parameters.md +++ b/docs/device_parameters.md @@ -32,7 +32,7 @@ 凌智视觉模块(Lockzhiner Vision Module) 是福州市凌睿智捷电子有限公司联合百度飞桨倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,其特色包括: -* 计算能力:凌智视觉模块搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU, 以更出色地处理 SIMD 和浮点计算。同时,该模块支持 Int8 量化,内置 0.5 TOPs 的 NPU, 足以应对绝大多数的视觉应用场景。 +* 计算能力:凌智视觉模块搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU, 以更出色地处理 SIMD 和浮点计算。同时,该模块支持 Int8 量化,内置 1 TOPs 的 NPU, 足以应对绝大多数的视觉应用场景。 * 开源适配:凌智视觉模块与飞桨低代码开发工具 PaddleX 完美适配,目前支持PaddleX 中的通用图像分类模型产线, 其余任务场景正在适配中, 未来会陆续上线。 * 简单易用:配合飞桨星河社区 Al Studio, 用户可以实现一键训练;配合凌智视觉算法部署库,用户可以实现一键部署,极大地减轻了用户的使用成本。 @@ -44,7 +44,7 @@ | 芯片架构 | ARM Cortex-A7 + NEON + FPU | ARM Cortex M7 | | 主频 | 1.2GHz | 480 MHz | | 内存 | 256MB DDR3L | 1MB RAM + 2 MB flash | -| NPU | 1 T int4 / 0.5 T int8 | 无 | +| NPU | 1 T int8 | 无 | | ISP | 最大输入5M @30fps | 无 | | 摄像头接口 | MIPI CSI 2-lane | 未知 | | 默认存储介质 | SD 卡 | SD 卡 | diff --git a/docs/introductory_tutorial/development_environment.md b/docs/introductory_tutorial/development_environment.md new file mode 100644 index 0000000000000000000000000000000000000000..f0311345454656e4fc7a743495fa3080d7f4f024 --- /dev/null +++ b/docs/introductory_tutorial/development_environment.md @@ -0,0 +1,258 @@ +

开发环境搭建指南

+ +发布版本:V0.0.1 + +日期:2024-08-29 + +文件密级:□绝密 □秘密 □内部资料 ■公开 + +--- + +**免责声明** + +本文档按**现状**提供,福州凌睿智捷电子有限公司(以下简称**本公司**)不对本文档中的任何陈述、信息和内容的准确性、可靠性、完整性、适销性、适用性及非侵权性提供任何明示或暗示的声明或保证。本文档仅作为使用指导的参考。 + +由于产品版本升级或其他原因,本文档可能在未经任何通知的情况下不定期更新或修改。 + +**读者对象** + +本教程适用于以下工程师: + +- 技术支持工程师 +- 软件开发工程师 + +**修订记录** + +| **日期** | **版本** | **作者** | **修改说明** | +| :--------- | -------- | -------- | ------------ | +| 2024/08/29 | 0.0.0 | 郑必城 | 初始版本 | +| 2024/09/07 | 0.0.1 | 郑必城 | 统一配置开发环境 | + +## 1 简介 + +Lockzhiner Vision Module 的开发依赖 Ubuntu 系统,但是大多数用户仍然希望能在 Windows 系统上进行开发,因此我们特地推出了在 Windows 上使用 Docker 来进行开发的方法。在进行开发之前,我们需要创建 Docker 容器并安装开发必备的软件,主要分为以下几步进行: + +* 安装 Docker Destop +* 读取镜像并创建和配置容器 +* 安装交叉编译工具链 + +## 2 安装 Docker Destop + +前往 [Docker 官网](https://www.docker.com/)下载 Docker Destop 安装包 + +![](images/development_environment/download_docker_by_web.png) + +打开安装包,按照以下顺序进行安装并重启电脑 + +![](images/development_environment/config_docker.png) + +![](images/development_environment/Snipaste_2024-08-29_09-55-48.png) + +重启电脑后,打开 Docker Destop,按顺序点击以下按钮 + +![](images/development_environment/Snipaste_2024-08-29_09-57-28.png) + +![](images/development_environment/Snipaste_2024-08-29_09-57-47.png) + +![](images/development_environment/Snipaste_2024-08-29_09-58-08.png) + +![](images/development_environment/Snipaste_2024-08-29_09-58-31.png) + +![](images/development_environment/Snipaste_2024-08-29_09-59-40.png) + +安装完成后将会自动打开 Docker Destop,如下图 + +![](images/development_environment/docker_destop.png) + +## 3 创建 Lockzhiner Vision Module 工作目录 + +打开磁盘,选择合适的位置准备创建 Lockzhiner Vision Module 工作目录。注意,工作目录存放的绝对路径请不要包含任何中文字符。 + +接下来**右键鼠标** -> **新建** -> **文件夹**,文件夹名字取名为 **LockzhinerVisionModuleWorkSpace** + +![](images/development_environment/new_dir.png) + +进入新建的文件夹,先点击地址栏检查地址是否包含中文路径。 + +![](images/development_environment/dir_url.png) + +## 4 使用 Docker 加载镜像 + +接下来使用 **Shift + 鼠标右键** -> **在此处打开 PowerShell 窗口** + +![](images/development_environment/click_powershell.png) + +在 PowerShell 中输入以下命令来下载并安装 ubuntu-22.04 镜像: + +```bash +wget https://gitee.com/LockzhinerAI/LockzhinerVisionModule/releases/download/v0.0.0/ubuntu-22.04.tar -Outfile ubuntu-22.04.tar +docker load -i ubuntu-22.04.tar +``` + +![](images/development_environment/docker_load.png) + +> 注意: +> +> 如果执行 **docker load** 时报错 **The system cannot find the file specified.** 请检查 Docker Destop 是否已经正常开启。 + +## 5 使用 Docker 创建并配置容器 + +在 PowerShell 中继续输入以下命令来创建并进入 Docker 容器,挂载容器时会将当前的工作目录映射到容器的 **/LockzhinerVisionModuleWorkSpace** 目录下 + +```bash +docker run -it --name LockzhinerVisionModule -v ${PWD}:/LockzhinerVisionModuleWorkSpace ubuntu:jammy /bin/bash +``` + +![](images/development_environment/docker_container.png) + +执行以下命令来更新 Apt 源 + +```bash +# 配置中科大软件源 +sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list +# 更新 Apt 源 +apt update +``` + +![](images/development_environment/apt_update.png) + +执行以下命令来下载并安装命令行补全工具 + +```bash +# 安装 bash-completion +apt-get install -y bash-completion + +# 运行这行命令后输入 no,并按回车 +dpkg-reconfigure dash + +# 运行 bash_completion +cd /usr/share/bash-completion +chmod +x bash_completion +./bash_completion +``` + +![](images/development_environment/install_bash-completion.png) + +![](images/development_environment/dpkg-reconfigure.png) + +![](images/development_environment/bash_completion.png) + +执行以下命令来退出容器 + +```bash +exit +``` + +![](images/development_environment/exit.png) + +## 6 配置项目编译环境 + +安装完 Docker 环境后,我们需要在容器中配置项目的编译环境。每一次在 Pwoershell 中使用命令来打开容器比较麻烦,这里我们使用 Docker Destop 来打开容器: + +* 打开 **Docker Destop** +* 点击 **Containers** +* 点击运行按钮 +* 点击 **LockzhinerVisionModule** 容器 +* 点击 Exec 按钮进入命令行界面 + +![](images/development_environment/docker_run_container.png) + +![](images/development_environment/docker_exec.png) + +### 6.1 下载必备软件包 + +在 Docker 容器中输入以下命令来安装交叉编译工具所需的依赖工具包 + +```bash +apt install -y cmake git wget unzip +``` + +![](images/development_environment/install_cmake_git.png) + +### 6.2 下载交叉编译工具链 + +为了将 C++ 代码编译为在 Lockzhiner Vision Module 上运行的程序,我们需要在 Docker 容器中下载并安装交叉编译工具。 + +执行以下代码,进入 Lockzhiner Vision Module 工作目录并下载交叉编译工具 + +```bash +cd /LockzhinerVisionModuleWorkSpace/ +git clone https://gitee.com/LockzhinerAI/arm-rockchip830-linux-uclibcgnueabihf.git +``` + +![](images/development_environment/cd_work_dir.png) + +![](images/development_environment/install_arm-rockchip830-linux-uclibcgnueabihf.png) + +### 6.3 下载/更新 LockzhinerVisionModule 仓库 + +如果是首次配置环境,执行以下命令 + +```bash +cd /LockzhinerVisionModuleWorkSpace +git clone https://gitee.com/LockzhinerAI/LockzhinerVisionModule.git +cd LockzhinerVisionModule +mkdir -p third_party +``` + +如果是为了更新 LockzhinerVisionModule 仓库,执行以下命令 + +```bash +cd /LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule +git pull +``` + +### 6.3 下载/更新 OpenCV Mobile 库 + +执行以下命令来安装最新的 OpenCV Mobile 库(会删除旧版本) + +```bash +cd /LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule +rm -rf opencv-mobile-4.10.0-lockzhiner-vision-module.zip +wget https://gitee.com/LockzhinerAI/opencv-mobile/releases/download/v0.0.0/opencv-mobile-4.10.0-lockzhiner-vision-module.zip +unzip -qo opencv-mobile-4.10.0-lockzhiner-vision-module.zip -d third_party +``` + +### 6.4 下载/更新 LockzhinerVisionModule SDK + +执行以下命令来安装最新的 LockzhinerVisionModule SDK(会删除旧版本) + +```bash +cd /LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule +rm -rf lockzhiner_vision_module_sdk.zip +wget https://gitee.com/LockzhinerAI/LockzhinerVisionModule/releases/download/v0.0.0/lockzhiner_vision_module_sdk.zip +unzip -qo lockzhiner_vision_module_sdk.zip -d third_party/lockzhiner_vision_module_sdk +``` + +参考[连接设备指南](./connect_device_using_ssh.md)打开 Electerm 并连接设备,点击 **Sftp** 按钮。 + +![](images/development_environment/update_lockzhiner_vision_module_0.png) + +使用任务管理器打开 **LockzhinerVisionModuleWorkSpace** 文件夹,按以下顺序操作来找到动态库存放目录: + +* 打开 LockzhinerVisionModule +* 打开 third_party +* 打开 lockzhiner_vision_module_sdk +* 打开 lib + +![](images/development_environment/update_lockzhiner_vision_module_1.png) + +点击地址栏并复制地址,如下图 + +![](images/development_environment/update_lockzhiner_vision_module_2.png) + +回到 Electerm 将复制的地址粘贴到地址栏中并跳转到该目录,如下图: + +![](images/development_environment/update_lockzhiner_vision_module_3.png) + +选中动态库,单击鼠标右键并点击 **上传** 将动态库传输到 Lockzhiner Vision Module + +点击 **Ssh** 回到 Lockzhiner Vision Module 命令行执行界面,运行以下命令拷贝动态库到系统中: + +```bash +cp liblockzhiner_vision_module.so /lib/ +``` + +## 7 验证开发环境 + +请参考 [编写第一个 Hello World 程序](../../example/hello_world/README.md) 来验证开发环境是否能够正常使用 \ No newline at end of file diff --git a/example/vision/detetcion/README.md b/example/vision/detetcion/README.md index 8453f778c0bd0526b6a7c7be391b4d8fffbd6845..82d2a383af7908413a6b2829c5ff27936d588561 100644 --- a/example/vision/detetcion/README.md +++ b/example/vision/detetcion/README.md @@ -136,7 +136,105 @@ Labelme 是一个 python 语言编写,带有图形界面的图像标注软件 ## 3 使用星河社区 AI Studio 训练检测模型 +### 3.1 简介 +AI Studio 是基于百度深度学习开源平台飞桨的人工智能学习与实训社区,为开发者提供了功能强大的线上训练环境、免费GPU算力及存储资源。Lockzhiner Vision Module 默认使用 AI Studio 进行快速训练。 + +### 3.2 登录星河社区 AI Studio + +进入 [AI Studio](https://aistudio.baidu.com),点击右上角的登录按钮,输入你的百度账号进行登录。 + +![](../images/ai_studio_0.png) + +![](../images/ai_studio_1.png) + +### 3.3 上传数据集文件 + +点击**数据**,点击**创建数据集**来打开数据集创建界面,如下图: + +![](../images/ai_studio_2.png) + +正确填入合适的内容,如下图: + +![](../images/ai_studio_3.png) + +耐心等待数据集上传完成,完成后点击 **确定**,如下图: + +![](../images/ai_studio_4.png) + +### 3.4 Fork 项目 + +进入 [在凌智视觉模块上部署 PaddleDetection 模型](https://aistudio.baidu.com/projectdetail/8235625) 项目,点击右上角的 **Fork** 图标来创建自己的项目,如下图: + +![](images/fork_0.png) + +正确填入合适的内容,如下图: + +![](images/fork_1.png) + +点击取消按钮,如下图: + +![](images/fork_2.png) + +### 3.5 配置项目数据集 + +点击最左侧**项目**按钮,然后点击中间**项目**按钮,找到刚才 Fork 的项目,如下图: + +![](images/config_dataset_0.png) + +点击右上角 **修改**,点击**添加数据集**,点击**个人数据集**,找到刚才创建的数据集并点击**添加**,点击**保存**按钮,如下图: + +![](images/config_dataset_1.png) + +![](images/config_dataset_2.png) + +![](images/config_dataset_3.png) + +![](images/config_dataset_4.png) + +### 3.6 启动项目 + +点击**启动环境**,选择 **V100 16GB**,点击**确定**,如下图 + +![](images/start_project_0.png) + +![](images/start_project_1.png) + +耐心等待一段时间来启动项目,点击**进入**到项目中,如下图: + +![](images/start_project_2.png) + +![](images/start_project_3.png) + +### 3.7 配置项目训练参数 + +点击 **data**,查看并复制数据集保存目录(右键数据集保存目录,点击重命名来复制),如下图: + +![](images/config_project_0.png) + +![](images/config_project_1.png) + +找到**项目全局配置项**,配置数据集路径,我这里是 **data293536**,如下图: + +![](images/config_project_2.png) + +### 3.8 开始训练 + +点击**运行全部 Cell** 开启训练,耐心等待训练完成,如下图: + +![](images/run_project_0.png) + +训练完成后,主目录下会出现 **output** 文件夹,文件夹内包含了一个 ONNX 模型和一个 RKNN 模型,如下图: + +![](images/run_project_1.png) + +![](images/run_project_2.png) + +选中 **output** 文件夹,右键鼠标,点击 **打包选中文件夹**。打包完成后,出现 **output.zip** 文件,右键该文件,点击**下载**。 + +![](images/run_project_3.png) + +![](images/run_project_4.png) ## 4 在凌智视觉模块上部署模型 diff --git a/example/vision/detetcion/images/config_dataset_0.png b/example/vision/detetcion/images/config_dataset_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b92c607b4cc9200908d8e6de18fcc699c3fda6 Binary files /dev/null and b/example/vision/detetcion/images/config_dataset_0.png differ diff --git a/example/vision/detetcion/images/config_dataset_1.png b/example/vision/detetcion/images/config_dataset_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb78078057f0aaaaa8ff51b813e931ba8c3186b7 Binary files /dev/null and b/example/vision/detetcion/images/config_dataset_1.png differ diff --git a/example/vision/detetcion/images/config_dataset_2.png b/example/vision/detetcion/images/config_dataset_2.png new file mode 100644 index 0000000000000000000000000000000000000000..eb5d50af7dcb15e212ebcb8fef5ab49b71fccca3 Binary files /dev/null and b/example/vision/detetcion/images/config_dataset_2.png differ diff --git a/example/vision/detetcion/images/config_dataset_3.png b/example/vision/detetcion/images/config_dataset_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc1e1e24bf89ac1cbe785cfde7351602491a7e0 Binary files /dev/null and b/example/vision/detetcion/images/config_dataset_3.png differ diff --git a/example/vision/detetcion/images/config_dataset_4.png b/example/vision/detetcion/images/config_dataset_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e0b736c2e6385757f292477f20201ea002291a Binary files /dev/null and b/example/vision/detetcion/images/config_dataset_4.png differ diff --git a/example/vision/detetcion/images/config_project_0.png b/example/vision/detetcion/images/config_project_0.png new file mode 100644 index 0000000000000000000000000000000000000000..aea8b31593ad1709134de66bcc4040f4299d6aa6 Binary files /dev/null and b/example/vision/detetcion/images/config_project_0.png differ diff --git a/example/vision/detetcion/images/config_project_1.png b/example/vision/detetcion/images/config_project_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fa46c81fc4c929859d320a048ed92d709ce78461 Binary files /dev/null and b/example/vision/detetcion/images/config_project_1.png differ diff --git a/example/vision/detetcion/images/config_project_2.png b/example/vision/detetcion/images/config_project_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3778f15bc488ba210070bc08872a61b8314d8611 Binary files /dev/null and b/example/vision/detetcion/images/config_project_2.png differ diff --git a/example/vision/detetcion/images/fork_0.png b/example/vision/detetcion/images/fork_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb4068ed818f039363f74c87058ff1b38b05588 Binary files /dev/null and b/example/vision/detetcion/images/fork_0.png differ diff --git a/example/vision/detetcion/images/fork_1.png b/example/vision/detetcion/images/fork_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9ccff3ecad151b702c780b49eec9529aa92867 Binary files /dev/null and b/example/vision/detetcion/images/fork_1.png differ diff --git a/example/vision/detetcion/images/fork_2.png b/example/vision/detetcion/images/fork_2.png new file mode 100644 index 0000000000000000000000000000000000000000..122f62a58a8df6c993c0b00e290e2331542a4d4f Binary files /dev/null and b/example/vision/detetcion/images/fork_2.png differ diff --git a/example/vision/detetcion/images/run_project_0.png b/example/vision/detetcion/images/run_project_0.png new file mode 100644 index 0000000000000000000000000000000000000000..07f57f2aaf30e87657bd36707dd960eda0ccb476 Binary files /dev/null and b/example/vision/detetcion/images/run_project_0.png differ diff --git a/example/vision/detetcion/images/run_project_1.png b/example/vision/detetcion/images/run_project_1.png new file mode 100644 index 0000000000000000000000000000000000000000..07ccaa35ee3c64e2793fa0dadff08c211028541d Binary files /dev/null and b/example/vision/detetcion/images/run_project_1.png differ diff --git a/example/vision/detetcion/images/run_project_2.png b/example/vision/detetcion/images/run_project_2.png new file mode 100644 index 0000000000000000000000000000000000000000..37835e76146c9ec7bbf412cda91bbe0469c6acec Binary files /dev/null and b/example/vision/detetcion/images/run_project_2.png differ diff --git a/example/vision/detetcion/images/run_project_3.png b/example/vision/detetcion/images/run_project_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f54ff1cb353bbd46d6c7a1bffd8c101d6860bc80 Binary files /dev/null and b/example/vision/detetcion/images/run_project_3.png differ diff --git a/example/vision/detetcion/images/run_project_4.png b/example/vision/detetcion/images/run_project_4.png new file mode 100644 index 0000000000000000000000000000000000000000..98f3b4cec782596c543b001588aebe7a83aa3062 Binary files /dev/null and b/example/vision/detetcion/images/run_project_4.png differ diff --git a/example/vision/detetcion/images/start_project_0.png b/example/vision/detetcion/images/start_project_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0de9a0e795289a91efaf31c9260dd0e866174b28 Binary files /dev/null and b/example/vision/detetcion/images/start_project_0.png differ diff --git a/example/vision/detetcion/images/start_project_1.png b/example/vision/detetcion/images/start_project_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3accbab5cc1829632060f5b95e66be9e0070c7a8 Binary files /dev/null and b/example/vision/detetcion/images/start_project_1.png differ diff --git a/example/vision/detetcion/images/start_project_2.png b/example/vision/detetcion/images/start_project_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6965377da53a2860331355d02bcc9e5d761369 Binary files /dev/null and b/example/vision/detetcion/images/start_project_2.png differ diff --git a/example/vision/detetcion/images/start_project_3.png b/example/vision/detetcion/images/start_project_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad3db476848915e82b00037bda63b95ddc503dd Binary files /dev/null and b/example/vision/detetcion/images/start_project_3.png differ