开始之前:
1.检测目标输出相关数据
HUSKYLENS 2能识别出现在画面中的目标物(仅能识别用户训练模型时数据集中的所有类别物体),可以通过编程获取画面中检测到的目标物相关数据。
自训练模型部署后,可以识别用户自己标注过的同类别的物体,与其他功能相同,自训练模型应用支持学习检测出的物体,当框出目标物后,按下A键,学习物体,为目标物分配ID。
可以读取的目标数据有:检测到的目标总数、已学习的目标总数,指定目标的数据,包括目标ID、名称、宽度、高度以及条形码中心点的X坐标位置和Y坐标位置。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(129);
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(129);
if (huskylens.available(129)):
line1.config(text=(str("目标总数:") + str((huskylens.getCachedResultNum(129)))))
line2.config(text=(str("已学习的目标总数:") + str((huskylens.getCachedResultMaxID(129)))))
line3.config(text=(str("靠中心的目标ID:") + str((huskylens.getCachedCenterResult(129).ID if huskylens.getCachedCenterResult(129) else -1))))
line4.config(text=(str("第一个目标ID:") + str((huskylens.getCachedResultByIndex(129, 1-1).ID if huskylens.getCachedResultByIndex(129, 1-1) else -1))))
运行结果:如图所示,识别到画面中有3个目标物,已学习的目标物有2个,靠近中心的目标是ID2可乐,第一个被识别的目标是ID0唇膏。 在HUSKYLENS 2学习过的目标物则会按顺序分配ID号,未学习过则ID号为0。
20.2 获取画面中指定目标的相关数据
HuskyLens 2识别目标物后,可获取画面中指定目标的相关数据。例如,判断某个指定ID的目标物是否在画面中、可获取画面中相同ID的目标数量,当画面中出现多个相同ID的目标时,可指定获取其中某个条形码的相关参数,包括ID、名称、X/Y坐标、宽度、高度。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(129);
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=150,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="",x=0,y=175,font_size=18, color="#0000FF")
while True:
huskylens.getResult(129);
if (huskylens.available(129)):
if ((huskylens.getCachedResultByID(129, 3) is not None)):
line1.config(text=(str("ID3目标总数:") + str((huskylens.getCachedResultNumByID(129, 3)))))
line2.config(text=(str("ID3目标名称:") + str((huskylens.getCachedResultByID(129, 3).name if huskylens.getCachedResultByID(129, 3) else -1))))
line3.config(text="第1个ID3目标")
line4.config(text=(str("的坐标:") + str((str(huskylens.getCachedIndexResultByID(129, 3, 1-1).xCenter if huskylens.getCachedIndexResultByID(129, 3, 1-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(129, 3, 1-1).yCenter if huskylens.getCachedIndexResultByID(129, 3, 1-1) else -1)))))))
line5.config(text="第2个ID3目标")
line6.config(text=(str("的坐标:") + str((str(huskylens.getCachedIndexResultByID(129, 3, 2-1).xCenter if huskylens.getCachedIndexResultByID(129, 3, 2-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(129, 3, 2-1).yCenter if huskylens.getCachedIndexResultByID(129, 3, 2-1) else -1)))))))
**运行结果:**如图所示,画面中有2个ID3目标物,名称是“唇膏”,第一个识别到的ID3目标物坐标为(514,338),第二个ID3目标物坐标是(287,333)。