人形检测
1.实验目的
基于YOLOv5n 模型,实现对人体的实时检测,图像获取、AI 预处理、推理、后处理和显示完整串联。
2.代码解析
核心类解析
PersonDetectionApp
:自定义人体检测类
继承自 AIBase
,封装了以下功能:
- 模型初始化、加载
- Ai2d 图像预处理配置(pad + resize)
- YOLO 输出的后处理(调用
aicube.anchorbasedet_post_process
) - 绘制检测框及标签到显示屏
person_det = PersonDetectionApp(
kmodel_path="/sdcard/examples/kmodel/person_detect_yolov5n.kmodel",
model_input_size=[640,640],
labels=["person"],
anchors=[...],
...
)
图像采集与显示
pl = PipeLine(rgb888p_size=[1920, 1080], display_size=[800, 480], display_mode="lcd")
封装了图像传感器的初始化、帧获取、OSD 图层绘制、图像显示等功能。
图像处理流程
1.预处理:config_preprocess()
通过 Ai2d
统一设置输入图像格式、类型和尺寸,常见操作包括:
- Pad:填充边缘,防止图像失真
- Resize:缩放到模型输入尺寸(如 640x640)
self.ai2d.pad([...])
self.ai2d.resize(...)
self.ai2d.build(...)
2.推理:run()
(继承自 AIBase)
res = person_det.run(img)
会内部调用:
self.preprocess(img)
self.interpreter.run(...)
self.postprocess(results)
3.后处理:postprocess()
使用 aicube.anchorbasedet_post_process()
实现 anchor-based 检测结果转换,返回检测框信息 [cls_id, score, x1, y1, x2, y2]
。
绘制结果
将检测框按比例缩放绘制到 OSD 层:
pl.osd_img.draw_rectangle(...)
pl.osd_img.draw_string_advanced(...)
排除了太小、靠边的干扰框,提升检测体验。