diff --git a/README.md b/README.md index f27b55db21343cf58c96c5ea87f4cc20de94c8f1..4a55dd244062a31b5073c7bb081772c799b21492 100644 --- a/README.md +++ b/README.md @@ -21,18 +21,27 @@

-凌智视觉模块(Lockzhiner Vision Module) 是福州市凌睿智捷电子有限公司联合百度 PaddlePaddle 倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,其特色包括: +凌智视觉模块(Lockzhiner Vision Module) 是福州市凌睿智捷电子有限公司联合百度飞桨倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,其特色包括: -* 卓越的计算能力:Lockzhiner Vision Module 搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU,以更出色地处理 SIMD 和浮点计算。同时,该模块支持 Int8 量化,内置 0.5 TOPs 的 NPU,足以应对绝大多数的视觉应用场景。 -* 广泛的开源适配:Lockzhiner Vision Module 与 PaddleClas、PaddleDetection、PaddleSeg、PaddleOCR 等基于 Paddle 框架的视觉场景库完美适配。配合 AIStudio,用户可以实现一键训练、一键部署,从而极大地减轻了部署负担。 +* 计算能力:凌智视觉模块搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU, 以更出色地处理 SIMD 和浮点计算。同时,该模块支持 Int8 量化,内置 0.5 TOPs 的 NPU, 足以应对绝大多数的视觉应用场景。 +* 开源适配:凌智视觉模块与飞桨低代码开发工具 PaddleX 完美适配,目前支持PaddleX 中的通用图像分类模型产线, 其余任务场景正在适配中, 未来会陆续上线。 +* 简单易用:配合飞桨星河社区 Al Studio, 用户可以实现一键训练;配合凌智视觉算法部署库,用户可以实现一键部署,极大地减轻了用户的使用成本。 -> 更详细的参数请参考 [凌智视觉模块设备详细参数文档](./docs/device_parameters.md) +

+ + + +

+ +> 注: +> +> * 更详细的参数请参考 [凌智视觉模块设备详细参数文档](./docs/device_parameters.md) ## 🔄 最新日志 ## 💡 入门学习教程 -这一部分教程旨在为你提供一个系统化的学习路径,帮助你快速上手 Lockzhiner Vision Module。通过一系列详细的教程,你将学会如何烧录镜像、连接设备、搭建开发环境和编写简单的程序。 +这一部分教程旨在为你提供一个系统化的学习路径,帮助你快速上手 Lockzhiner Vision Module。通过一系列详细的教程, 你将学会如何烧录镜像、连接设备、搭建开发环境和编写简单的程序。 * [凌智视觉模块烧录镜像指南](./docs/introductory_tutorial/burn_image.md) * [凌智视觉模块连接设备指南](./docs/introductory_tutorial/connect_device_using_ssh.md) @@ -65,7 +74,7 @@ Lockzhiner Vision Module 拥有丰富的 IO 接口,其接口图片如下图所 ## 🧠 深度学习视觉部署教程 -这一部分教程将引导你从零开始训练并部署各种深度学习模型,包括分类模型、检测模型、分割模型和 OCR 模型。通过这些实战教程,你将学习到如何利用 Lockzhiner Vision Module 的高性能计算能力以及借助 Paddle 生态系统的丰富资源,轻松实现视觉任务的训练和部署。 +这一部分教程将引导你从零开始训练并部署各种深度学习模型,包括分类模型、检测模型、分割模型和 OCR 模型。通过这些实战教程,你将学习到如何利用 Lockzhiner Vision Module 的高性能计算能力以及借助飞桨生态系统的丰富资源,轻松实现视觉任务的训练和部署。 * [凌智视觉模块分类模型部署指南](./example/vision/classification) * [凌智视觉模块检测模型部署指南](./example/vision/detetcion) @@ -75,7 +84,7 @@ Lockzhiner Vision Module 拥有丰富的 IO 接口,其接口图片如下图所 ## 👍 特色部署教程 * [凌智视觉模块手写数字识别部署指南](./example/special/digit_handwritten_recognition) -* [凌智视觉模块二维码识别与检测部署指南](。/example/special/qr_code_recognition) +* [凌智视觉模块二维码识别与检测部署指南](./example/special/qr_code_recognition) ## 🐛 Bug反馈 @@ -84,7 +93,7 @@ Lockzhiner Vision Module 拥有丰富的 IO 接口,其接口图片如下图所 ![](images/issues_completed.png) -如果查找不到对应的解决方案,可点击新建 Issues 来反馈您的 Bug,我们将尽快与您沟通并及时解决 Bug。 +如果查找不到对应的解决方案,可点击新建 Issues 来反馈您的 Bug, 我们将尽快与您沟通并及时解决 Bug。 ![](images/issues_feedback.png) @@ -106,8 +115,8 @@ Lockzhiner Vision Module 拥有丰富的 IO 接口,其接口图片如下图所 凌智视觉模块(Lockzhiner Vision Module) 离不开社区的支持,特别感谢以下个人(或团体): -* 感谢 Rockchip NPU 团队帮忙调试 Paddle 模型到 RKNN 模型的推理和优化 -* 感谢 PaddlePaddle 团队在适配 PaddleX 等套件上提供的帮助 +* 感谢 Rockchip NPU 团队帮忙调试 PaddlePaddle 模型到 RKNN 模型的推理和优化 +* 感谢飞桨团队在适配 PaddleX 等套件上提供的帮助 * 感谢 nihui 大佬帮忙审核并将 Lockzhiner Vision Module 的 ISP 代码合入到 opencv-mobile ## 📜 开源协议 diff --git a/docs/device_parameters.md b/docs/device_parameters.md index 9cfcd4279a198cb93ba75e5585cd47bc8bbc2c6b..f236c83b4f37c2df0b5493a444e954e84c2d6d37 100644 --- a/docs/device_parameters.md +++ b/docs/device_parameters.md @@ -30,13 +30,11 @@ ## 1 简介 -凌智视觉模块(Lockzhiner Vision Module) 是福州市凌睿智捷电子有限公司联合百度 PaddlePaddle -倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,其特色包括: +凌智视觉模块(Lockzhiner Vision Module) 是福州市凌睿智捷电子有限公司联合百度飞桨倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,其特色包括: -- 卓越的计算能力:Lockzhiner Vision Module 搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU,以更出色地处理 SIMD - 和浮点计算。同时,该模块支持 Int8 量化,内置 0.5 TOPs 的 NPU,足以应对绝大多数的视觉应用场景。 -- 广泛的开源适配:Lockzhiner Vision Module 与 PaddleClas、PaddleDetection、PaddleSeg、PaddleOCR 等基于 Paddle - 框架的视觉场景库完美适配。配合 AIStudio,用户可以实现一键训练、一键部署,从而极大地减轻了部署负担。 +* 计算能力:凌智视觉模块搭载单核 ARM Cortex-A7 处理器,并集成了 NEON 和 FPU, 以更出色地处理 SIMD 和浮点计算。同时,该模块支持 Int8 量化,内置 0.5 TOPs 的 NPU, 足以应对绝大多数的视觉应用场景。 +* 开源适配:凌智视觉模块与飞桨低代码开发工具 PaddleX 完美适配,目前支持PaddleX 中的通用图像分类模型产线, 其余任务场景正在适配中, 未来会陆续上线。 +* 简单易用:配合飞桨星河社区 Al Studio, 用户可以实现一键训练;配合凌智视觉算法部署库,用户可以实现一键部署,极大地减轻了用户的使用成本。 ## 2 主控芯片参数 diff --git a/example/periphery/capture/python/README.md b/example/periphery/capture/python/README.md index 7f5c554218a25ab870df50e2acda26d0f9fcd391..185d40b6740535288c6ce60e3e115b88543a7ab8 100644 --- a/example/periphery/capture/python/README.md +++ b/example/periphery/capture/python/README.md @@ -49,13 +49,26 @@ class VideoCapture: """ OpenCV 摄像头类 """ + def __init__(self): self.video_capture = cv2.VideoCapture() + + def set_width(self, width): + """ + 设置摄像头宽度 + """ + self.video_capture.set_width(width) + + def set_height(self, height): + """ + 设置摄像头高度 + """ + self.video_capture.set_height(height) def open(self, index=0): """ 打开摄像头 - + Returns: bool: 摄像头打开过程过是否出现逻辑错误 """ @@ -64,7 +77,7 @@ class VideoCapture: def isOpened(self): """ 判断摄像头是否打开成功 - + Returns: bool: 摄像头是否打开成功 """ @@ -73,7 +86,7 @@ class VideoCapture: def read(self): """ 读取摄像头数据 - + Returns: bool: 摄像头是否成功读取到数据 cv::Mat: 摄像头读取的图像数据 @@ -84,7 +97,7 @@ class VideoCapture: def release(self): """ 关闭摄像头 - + Returns: bool: 是否释放成功 """ diff --git a/example/vision/classification/README.md b/example/vision/classification/README.md index 82db7c0a74e9ec09b94c9b531beb8e35d5d29012..34a794a6e14ef616d5483d7c8b738f59e11bf09e 100644 --- a/example/vision/classification/README.md +++ b/example/vision/classification/README.md @@ -105,13 +105,13 @@ Labelme 是一个 python 语言编写,带有图形界面的图像标注软件 ![](images/bandzip_3.png) -## 3 使用 AIStudio 训练分类模型 +## 3 使用星河社区 AI Studio 训练分类模型 ### 3.1 简介 AI Studio 是基于百度深度学习开源平台飞桨的人工智能学习与实训社区,为开发者提供了功能强大的线上训练环境、免费GPU算力及存储资源。Lockzhiner Vision Module 默认使用 AI Studio 进行快速训练。 -### 3.2 登录 AIStudio +### 3.2 登录星河社区 AI Studio 进入 [AI Studio](https://aistudio.baidu.com),点击右上角的登录按钮,输入你的百度账号进行登录。 @@ -222,6 +222,6 @@ AI Studio 是基于百度深度学习开源平台飞桨的人工智能学习与 以下测试数据为模型执行 Predict 函数运行 1000 次耗时的平均时间 -| 分类模型 | FPS(帧/s) | 精度(%) | +| 分类模型 | FPS(帧/s) | 精度(%)[ImageNet1K] | |:-------:|:----:|:----:| |LZ-MobileNetV3|40|75.32| diff --git a/example/vision/classification/python/README.md b/example/vision/classification/python/README.md index c3a4accb109031a321eae2209471965115623e47..5478911771ddc1b4a26f8fb98549617bbeae660b 100644 --- a/example/vision/classification/python/README.md +++ b/example/vision/classification/python/README.md @@ -78,7 +78,7 @@ class PaddleClas: """ PaddleClas 类 - 用于图像分类的 PaddlePaddle 模型封装。 - 该类封装了 PaddlePaddle 框架下的图像分类模型,提供了初始化和预测的方法。 + 该类封装了飞桨框架下的图像分类模型,提供了初始化和预测的方法。 """ def __init__(self): diff --git a/example/vision/detetcion/README.md b/example/vision/detetcion/README.md index 122f68b782040a745e059a3fcf7c457f543f6a3b..8453f778c0bd0526b6a7c7be391b4d8fffbd6845 100644 --- a/example/vision/detetcion/README.md +++ b/example/vision/detetcion/README.md @@ -31,7 +31,112 @@ ## 2 图像数据标注 -## 3 使用 AIStudio 训练检测模型 +### 2.1 Labelme 标注工具安装 + +Labelme 是一个 python 语言编写,带有图形界面的图像标注软件。可用于图像分类,目标检测,图像分割等任务,在图像分类的标注任务中,标签存储为 JSON 文件。在本章节中,我们使用这个软件来标注数据。 + +首先,点击 [Labelme 下载地址](https://sourceforge.net/projects/labelme-ima-polygonal.mirror/files/v5.5.0/Labelme.exe/download),耐心等待几秒后,浏览器将自动开始下载 Labelme,如下图: + +![](images/sourceForge.png) + +一般来说,下载完成后,系统的下载文件夹内将多出 **Labelme.exe** + +![](images/download.png) + +> 注: +> +> 如果网速太慢,我们也提供了百度网盘的下载链接,点击链接 [Labelme 标注工具(提取码:cyqc)](https://pan.baidu.com/s/1ssdBXxhoE1tME3nh-xqNzQ) 即可下载 + +### 2.2 标注前的准备 + +首先,请参考 [摄像头使用指南](./example/periphery/capture) 利用 **Lockzhiner Vision Module 图片获取助手** 拍摄你需要进行标注的图片,如下图所示: + +![](images/capture_images.png) + +选择一个你想存放数据集的位置,将 **Labelme.exe** 移动到文件夹下同时创建一个空的文件夹并命名为 **Dataset**,如下图: + +![](images/move.png) + +进入 **Dataset** 文件夹,创建 **images** 文件夹、**annotations** 文件夹、**flags.txt** 文件,如下图: + +![](images/creatre.png) + +进入 **Dataset** 文件夹,打开 **images**目录,将 **Lockzhiner Vision Module 图片获取助手** 保存的图片数据(在程序运行目录的 **LockzhinerVisionModuleImages** 文件夹内)移动到该文件夹内,如下图: + +![](images/move_images.png) + +进入 **Dataset** 文件夹,打开 **flags.txt** 按行写入待标注数据集的类别,写入完成后如下图所示: + +![](images/flags.png) + +进入 **Dataset** 文件夹所在的目录,按住键盘`Shift`键后,单击鼠标右键,点击 **在此处打开 Powershell 窗口**。 + +![](images/open_powershll.png) + +弹出 **Powershell 窗口**后,输入以下命令来打开 **Labelme**,如下图: + +```bash +.\Labelme.exe .\Dataset\images --nodata --autosave --output .\Dataset\annotations --labels .\Dataset\flags.txt +``` + +![](images/open_labelme.png) + +参数意义如下: + +* --labels 类别标签路径。 +* --nodata 停止将图像数据存储到JSON文件。 +* --autosave 自动存储 +* --ouput 标签文件存储路径 + +命令执行后将打开 **Labelme** 程序,如下图 + +![](images/Labelme.png) + +### 2.3 标注并产出数据集 + +点击"编辑"选择标注类型 + +![](images/labelme_compile.png) + +选择创建矩形框 + +![](images/labelme_Create_rectangle.png) + +在图片上拖动十字框选目标区域 + +![](images/labelme_Select_target.png) + +再次点击选择目标框类别 + +![](images/labelme_category.png) + +标注好后点击存储。(若在启动 **labelme** 时未指定 --output 字段,会在第一次存储时提示选择存储路径,若指定 --autosave 字段使用自动保存,则无需点击存储按钮) + +![](images/labelme_save.png) + +然后点击"下一幅"进行下一张图片的标注 + +![](images/labelme_next.png) + +最终标注好的标签文件如图所示 + +![](images/Annotate_images.png) + +进入 **Dataset** 文件夹所在的目录,将 **Dataset** 目录压缩为文件夹。注意,压缩包的最外层需要有 **Dataset** 目录。这里我们建议你使用 **Bandzip** 压缩软件进行压缩,具体的操作步骤如下: + +![](images/compress.png) + +![](images/compress_1.png) + +![](images/compress_2.png) + +压缩完成后,打开压缩文件检查下最外层是否有 Dataset 目录 + +![](images/compress_3.png) + +## 3 使用星河社区 AI Studio 训练检测模型 + + ## 4 在凌智视觉模块上部署模型 @@ -44,6 +149,6 @@ 以下测试数据为模型执行 Predict 函数运行 1000 次耗时的平均时间 -| 检测模型 | FPS(帧/s) | 精度(%) | +| 检测模型 | FPS(帧/s) | 精度(%)[COCO2017 map@0.5] | |:-------:|:----:|:----:| -|LZ-Picodet||| \ No newline at end of file +|LZ-Picodet| 27 | 52.13 | \ No newline at end of file diff --git a/example/vision/detetcion/images/Annotate_images.png b/example/vision/detetcion/images/Annotate_images.png new file mode 100644 index 0000000000000000000000000000000000000000..16c9e0f40c718c346f4328f4996dc4d491dc14b6 Binary files /dev/null and b/example/vision/detetcion/images/Annotate_images.png differ diff --git a/example/vision/detetcion/images/capture_images.png b/example/vision/detetcion/images/capture_images.png new file mode 100644 index 0000000000000000000000000000000000000000..a1cd0fabde1897043824253f7660c897c0ad7f28 Binary files /dev/null and b/example/vision/detetcion/images/capture_images.png differ diff --git a/example/vision/detetcion/images/compress.png b/example/vision/detetcion/images/compress.png new file mode 100644 index 0000000000000000000000000000000000000000..4425f7d98762ded9e106336aeb1fc499a32c3460 Binary files /dev/null and b/example/vision/detetcion/images/compress.png differ diff --git a/example/vision/detetcion/images/compress_1.png b/example/vision/detetcion/images/compress_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e622757b6450a5e9eac0c6717522b7e764f8d2ac Binary files /dev/null and b/example/vision/detetcion/images/compress_1.png differ diff --git a/example/vision/detetcion/images/compress_2.png b/example/vision/detetcion/images/compress_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2549aa1bf12a5610cd14677edb308871c44aba Binary files /dev/null and b/example/vision/detetcion/images/compress_2.png differ diff --git a/example/vision/detetcion/images/compress_3.png b/example/vision/detetcion/images/compress_3.png new file mode 100644 index 0000000000000000000000000000000000000000..150da4cb7606dc2eeca58366274fae8860f389f0 Binary files /dev/null and b/example/vision/detetcion/images/compress_3.png differ diff --git a/example/vision/detetcion/images/creatre.png b/example/vision/detetcion/images/creatre.png new file mode 100644 index 0000000000000000000000000000000000000000..69de80b5b03d2f85b134c59d8d77a17f9c7966fe Binary files /dev/null and b/example/vision/detetcion/images/creatre.png differ diff --git a/example/vision/detetcion/images/download.png b/example/vision/detetcion/images/download.png new file mode 100644 index 0000000000000000000000000000000000000000..72f796df45a7fefd08cfdc8cbf09fadb2fcb4c51 Binary files /dev/null and b/example/vision/detetcion/images/download.png differ diff --git a/example/vision/detetcion/images/flags.png b/example/vision/detetcion/images/flags.png new file mode 100644 index 0000000000000000000000000000000000000000..dba9e59faf83f024c4a23b1975b0357d4b3a50c5 Binary files /dev/null and b/example/vision/detetcion/images/flags.png differ diff --git a/example/vision/detetcion/images/labelme.png b/example/vision/detetcion/images/labelme.png new file mode 100644 index 0000000000000000000000000000000000000000..61f7186f690e2c8b0110740d493fef7c872d4e62 Binary files /dev/null and b/example/vision/detetcion/images/labelme.png differ diff --git a/example/vision/detetcion/images/labelme_Create_rectangle.png b/example/vision/detetcion/images/labelme_Create_rectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..bc60d8891bb30af56a5f3dcd3f441bfb146c9779 Binary files /dev/null and b/example/vision/detetcion/images/labelme_Create_rectangle.png differ diff --git a/example/vision/detetcion/images/labelme_Select_target.png b/example/vision/detetcion/images/labelme_Select_target.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b4da8b5eace58f63871ca64286baafeb66c3f5 Binary files /dev/null and b/example/vision/detetcion/images/labelme_Select_target.png differ diff --git a/example/vision/detetcion/images/labelme_category.png b/example/vision/detetcion/images/labelme_category.png new file mode 100644 index 0000000000000000000000000000000000000000..97caf7051c4371ba353f5ae9bfbe89d0888415b5 Binary files /dev/null and b/example/vision/detetcion/images/labelme_category.png differ diff --git a/example/vision/detetcion/images/labelme_compile.png b/example/vision/detetcion/images/labelme_compile.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3089ec445bb2e7281869587c4ad694c07b1297 Binary files /dev/null and b/example/vision/detetcion/images/labelme_compile.png differ diff --git a/example/vision/detetcion/images/labelme_next.png b/example/vision/detetcion/images/labelme_next.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fd93b0e4850e795c8e057608899ccb706e262a Binary files /dev/null and b/example/vision/detetcion/images/labelme_next.png differ diff --git a/example/vision/detetcion/images/labelme_save.png b/example/vision/detetcion/images/labelme_save.png new file mode 100644 index 0000000000000000000000000000000000000000..8307a761bcafe01d12a34194ce5afdc7e8af99b7 Binary files /dev/null and b/example/vision/detetcion/images/labelme_save.png differ diff --git a/example/vision/detetcion/images/move.png b/example/vision/detetcion/images/move.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8e0fc41cfa5750d1e8422640770057d34aa8b0 Binary files /dev/null and b/example/vision/detetcion/images/move.png differ diff --git a/example/vision/detetcion/images/move_feil.png b/example/vision/detetcion/images/move_feil.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bac39124f9564a7671acb80a11cd4593c83672 Binary files /dev/null and b/example/vision/detetcion/images/move_feil.png differ diff --git a/example/vision/detetcion/images/move_images.png b/example/vision/detetcion/images/move_images.png new file mode 100644 index 0000000000000000000000000000000000000000..ac667124ded2d8278ee25314798d5d4c989d1219 Binary files /dev/null and b/example/vision/detetcion/images/move_images.png differ diff --git a/example/vision/detetcion/images/open_labelme.png b/example/vision/detetcion/images/open_labelme.png new file mode 100644 index 0000000000000000000000000000000000000000..f6771019f5ec3f0147b5f7f96b249bc9124c4031 Binary files /dev/null and b/example/vision/detetcion/images/open_labelme.png differ diff --git a/example/vision/detetcion/images/open_powershll.png b/example/vision/detetcion/images/open_powershll.png new file mode 100644 index 0000000000000000000000000000000000000000..5dbb1f9052eb673224ec0bb11c2c9c4320918ccd Binary files /dev/null and b/example/vision/detetcion/images/open_powershll.png differ diff --git a/example/vision/detetcion/images/sourceForge.png b/example/vision/detetcion/images/sourceForge.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9d3d3ede87112602db99bf324186e700ac8e79 Binary files /dev/null and b/example/vision/detetcion/images/sourceForge.png differ diff --git a/example/vision/detetcion/images/terminal.png b/example/vision/detetcion/images/terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..d0bbcd5dfb80f5274df2f14ca230038ea2e84d86 Binary files /dev/null and b/example/vision/detetcion/images/terminal.png differ diff --git a/example/vision/detetcion/python/README.md b/example/vision/detetcion/python/README.md index 48c08afdde6b471a95fdd28868018e95cf2437c6..473d1286b49dd01d7bbd2c02f8f23fce32555244 100644 --- a/example/vision/detetcion/python/README.md +++ b/example/vision/detetcion/python/README.md @@ -124,18 +124,18 @@ class DetectionResult: """ return self.detection_result.label_id -class PaddleDetection: +class PaddleDet: """ - PaddleDetection 类 - 用于目标检测的 PaddlePaddle 模型封装。 + PaddleDet 类 - 用于目标检测的 PaddlePaddle 模型封装。 - 该类封装了 PaddleDetection 框架下的目标检测模型,提供了初始化和预测的方法。 + 该类封装了 PaddleDet 框架下的目标检测模型,提供了初始化和预测的方法。 """ def __init__(self): """ - 构造函数 - 初始化 PaddleDetection 对象。 + 构造函数 - 初始化 PaddleDet 对象。 """ - self.model = vision.PaddleDetection() + self.model = vision.PaddleDet() def initialize(self, model_path): """ @@ -173,7 +173,7 @@ class PaddleDetection: return self.model.predict(input_mat) -class Picodet(PaddleDetection): +class Picodet(PaddleDet): def __init__(self): super().__init__() ``` @@ -184,7 +184,8 @@ class Picodet(PaddleDetection): ```python from lockzhiner_vision_module.cv2 import VideoCapture -from lockzhiner_vision_module.vision import PaddleDetection +from lockzhiner_vision_module.vision import PaddleDet, visualize +from lockzhiner_vision_module.edit import Edit import time import sys @@ -193,8 +194,11 @@ if __name__ == "__main__": if len(args) != 2: print("Need model path. Example: python test_detection.py LZ-MobileNetV3.rknn") exit(1) + + edit = Edit() + edit.start_and_accept_connection() - model = PaddleDetection() + model = PaddleDet() if model.initialize(args[1]) is False: print("Failed to initialize PaddleClas") exit(1) @@ -226,6 +230,8 @@ if __name__ == "__main__": print( f"(x,y,w,h,score,label_id): [{box.x},{box.y},{box.width},{box.height},{score},{label_id}]" ) + vis_mat = visualize(mat, results) + edit.print(vis_mat) print(f"FPS is {1.0 / (total_time_ms/read_index)}") ``` @@ -237,8 +243,8 @@ if __name__ == "__main__": 请使用 Electerm Sftp 依次上传以下两个文件: -- 进入存放 **test_paddleclas.py** 脚本文件的目录,将 **test_paddleclas.py** 上传到 Lockzhiner Vision Module -- 进入存放 **LZ-MobileNetV2_x0_25.rknn(也可能是其他模型)** 模型存放的目录(模型存放在训练模型后下载的 output 文件夹内),将 **LZ-MobileNetV2_x0_25.rknn** 上传到 Lockzhiner Vision Module +- 进入存放 **test_detection.py** 脚本文件的目录,将 **test_detection.py** 上传到 Lockzhiner Vision Module +- 进入存放 **LZ-Picodet.rknn(也可能是其他模型)** 模型存放的目录(模型存放在训练模型后下载的 output 文件夹内),将 **LZ-Picodet.rknn** 上传到 Lockzhiner Vision Module ![](images/stfp_0.png) @@ -247,13 +253,13 @@ if __name__ == "__main__": 请使用 Electerm Ssh 并在命令行中执行以下命令: ```bash -python test_paddleclas.py LZ-MobileNetV3.rknn +python test_detection.py LZ-Picodet.rknn ``` 运行程序后,屏幕上开始打印标签索引,分类置信度,并在一段时间后输出 FPS 值 ![alt text](result_0.png) -## 5 其他 + -如果你需要使用 C++ 来部署 PaddleClas 请参考[凌智视觉模块分类模型 C++ 部署指南](../cpp/README.md)。 + diff --git a/example/vision/detetcion/python/test_detection.py b/example/vision/detetcion/python/test_detection.py index 0e9d47d7a8e4c87753707a574573f63ab471af2f..633e6eb2b3f55923a2be74f9ba61f40b316a1115 100644 --- a/example/vision/detetcion/python/test_detection.py +++ b/example/vision/detetcion/python/test_detection.py @@ -1,17 +1,21 @@ from lockzhiner_vision_module.cv2 import VideoCapture -from lockzhiner_vision_module.vision import PaddleDetection +from lockzhiner_vision_module.vision import PaddleDet, visualize +from lockzhiner_vision_module.edit import Edit import time import sys if __name__ == "__main__": args = sys.argv if len(args) != 2: - print("Need model path. Example: python test_detection.py LZ-MobileNetV3.rknn") + print("Need model path. Example: python test_detection.py LZ-Picodet.rknn") exit(1) + + edit = Edit() + edit.start_and_accept_connection() - model = PaddleDetection() + model = PaddleDet() if model.initialize(args[1]) is False: - print("Failed to initialize PaddleClas") + print("Failed to initialize PaddleDet") exit(1) video_capture = VideoCapture() @@ -41,4 +45,6 @@ if __name__ == "__main__": print( f"(x,y,w,h,score,label_id): [{box.x},{box.y},{box.width},{box.height},{score},{label_id}]" ) - print(f"FPS is {1.0 / (total_time_ms/read_index)}") + vis_mat = visualize(mat, results) + edit.print(vis_mat) + print(f"FPS is {1.0 / (total_time_ms/read_index)}") \ No newline at end of file