开始之前:

1. 识别物体输出相关数据

可识别HuskyLens 2视野内的物体(须是可识别的80种固定类别物体,详见物体识别功能介绍,获取物体相关数据,可以读取的数据有:画面中可识别物体的总数、靠近HuskyLens 2摄像头画面中心的物体ID号、检测到的第一个物体。

示例程序如下。

#include "unihiker_k10.h"
#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2  huskylens;
UNIHIKER_K10 k10;
uint8_t      screen_dir=2;


// 主程序开始
void setup() {
	k10.begin();
	Wire.begin();
  while (!huskylens.begin(Wire)) {
    delay(100);
    }
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	huskylens.switchAlgorithm(ALGORITHM_OBJECT_RECOGNITION);
}
void loop() {
	huskylens.getResult(ALGORITHM_OBJECT_RECOGNITION);
	if ((huskylens.available(ALGORITHM_OBJECT_RECOGNITION))) {
		k10.canvas->canvasText((String("物体总数:") + String((huskylens.getCachedResultNum(ALGORITHM_OBJECT_RECOGNITION)))), 1, 0x0000FF);
		k10.canvas->canvasText((String("靠中心的物体:") + String((RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_OBJECT_RECOGNITION), Result, name)))), 3, 0x0000FF);
		k10.canvas->canvasText((String("第一个物体ID:") + String((RET_ITEM_NUM(huskylens.getCachedResultByIndex(ALGORITHM_OBJECT_RECOGNITION, 1 - 1), Result, ID)))), 5, 0x0000FF);
	}
	k10.canvas->updateCanvas();
	delay(50);
}

程序上传成功后HuskyLens 2进入物体识别功能。将HuskyLens 2的摄像头对准画面中的物体分别学习

学习完成后,对准该物体,可在K10屏幕上观察输出结果。

**运行结果:**可输出识别到的物体总数,可按要求输出相应物体ID号、名称等数据。如果符合要求的物体没有被学习,则ID号为0。

Interface Diagram

2. 获取画面中指定物体的相关数据

HuskyLens 2识别物体后,可获取画面中指定物体的相关数据。例如,判断某个指定的物体是否在画面中、指定物体的名称、可获取画面中指定同类物体的数量,当画面中出现多个同类物体时,可指定获取其中某个物体的相关参数,包括名称、X/Y坐标、宽度、高度。

示例程序如下:

#include "unihiker_k10.h"
#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2  huskylens;
UNIHIKER_K10 k10;
uint8_t      screen_dir=2;


// 主程序开始
void setup() {
	k10.begin();
	Wire.begin();
  while (!huskylens.begin(Wire)) {
    delay(100);
    }
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	huskylens.switchAlgorithm(ALGORITHM_OBJECT_RECOGNITION);
}
void loop() {
	huskylens.getResult(ALGORITHM_OBJECT_RECOGNITION);
	if ((huskylens.available(ALGORITHM_OBJECT_RECOGNITION))) {
		if (((huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2) != NULL))) {
			k10.canvas->canvasText((String("检测到几个ID2:") + String((huskylens.getCachedResultNumByID(ALGORITHM_OBJECT_RECOGNITION, 2)))), 1, 0x0000FF);
			k10.canvas->canvasText((String("ID2物体的名称:") + String((RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2), Result, name)))), 3, 0x0000FF);
			k10.canvas->canvasText("第一个ID2物体", 5, 0x0000FF);
			k10.canvas->canvasText((String("的坐标:") + String((String((RET_ITEM_NUM(huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1), Result, yCenter)))))))), 6, 0x0000FF);
		}
	}
	k10.canvas->updateCanvas();
	delay(50);
}

**运行结果:**如图所示,可获取到画面中的物体总数、画面中ID2物体数量、名称,以及检测到的第一个ID2物体的坐标位置。

Interface Diagram