对于一个根据模型识别物体的脚本,见到了好几种写法,差点把我弄晕了
比如有以下两种写法:
- 有在
if __name__ == "__main__":
(# if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。)中调用main,在main函数中封装物体识别代码的,还加了一堆try,expect非常健壮 - 也有直接按流程写下来的
- 导入库(sensor, image, lcd, time,import KPU as kpu)和一些sensor初始化
- 加载模型kpu.load,这里有使用地址和kmodel模型文件两种方法
1.task = kpu.load(0x500000)
,使用之前需要先使用kflash_gui软件将smodel文件或kfpkg文件烧录到指定地址上
2.task = kpu.load("/sd/m.kmodel")
,使用前需要先将模型拷贝到sd卡中 - kpu初始化
_ = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
,task在上一步生成,anchor是每一个模型唯一的数值数组,在训练模型下载下来的boot代码中有这个数组信息 - 以下代码在死循环中进行:
- 拍一张照
img = sensor.snapshot()
objects = kpu.run_yolo2(task, img)
在相机拍到的图像上跑模型,如果相似放到objects- 如果相似
if objects:
,整个方框把物体框起来 - 对于
for obj in objects:
每个obj含有三个参数:置信度confidence = float(obj.value())
范围itemROL = obj.rect()
对应物体的label名所在位置(比如classes = [‘unmask’,‘masks’]中0或1)classID = int(obj.classid())
,可以根据置信度调整识别结果,范围画框框,根据id显示判断结果
if __name__ == 'main':
写法的识别口罩的例子:import sensor, image, lcd, time
import KPU as kpucolor_R = (255, 0, 0)
color_G = (0, 255, 0)
color_B = (0, 0, 255)class_IDs = ['no_mask', 'mask']def drawConfidenceText(image, rol, classid, value):
text = ""
_confidence = int(value * 100)if classid == 1:
text = 'mask: ' + str(_confidence) + '%'
else:
text = 'no_mask: ' + str(_confidence) + '%'image.draw_string(rol[0], rol[1], text, color=color_R, scale=2.5)lcd.init()
sensor.reset(dual_buff=True)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0)
sensor.run(1)task = kpu.load(0x500000)anchor = (0.1606, 0.3562, 0.4712, 0.9568, 0.9877, 1.9108, 1.8761, 3.5310, 3.4423, 5.6823)
_ = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
img_lcd = image.Image()clock = time.clock()
while (True):
clock.tick()
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
if code:
totalRes = len(code)for item in code:
confidence = float(item.value())
itemROL = item.rect()
classID = int(item.classid())if confidence < 0.52:
_ = img.draw_rectangle(itemROL, color=color_B, tickness=5)
continueif classID == 1 and confidence > 0.65:
_ = img.draw_rectangle(itemROL, color_G, tickness=5)
if totalRes == 1:
drawConfidenceText(img, (0, 0), 1, confidence)
else:
_ = img.draw_rectangle(itemROL, color=color_R, tickness=5)
if totalRes == 1:
drawConfidenceText(img, (0, 0), 0, confidence)_ = lcd.display(img)print(clock.fps())_ = kpu.deinit(task)
推荐阅读
- 自动驾驶|2021年电赛F题智能送药小车(国二)开源分享
- 不眠者科技团队|(不眠者①队)国电-F题(智能送药小车,广东赛区一等奖,推国赛,开源(代码+设计方案))
- python|python小练习4 -- crcmod用于做modbus校验
- 自动驾驶的方方面面|使用YOLO V5训练自动驾驶目标检测网络
- MIL学习日志|MIL视觉基础加载和保存图像20220301
- Python|Django学习笔记
- python|算法的时间复杂度
- Pytorch|windows + anaconda + pycharm + nvidia + cuda + cudnn + pytorch 安装教程
- 趣学深度学习|图像修复、专栏目录(推荐查阅顺序)