开始之前:

1. 识别标签输出相关数据

HUSKYLENS 2能识别出现在画面中的AprilTag标签,可以通过编程获取画面中检测到的标签相关数据。可以读取的标签数据有:指定标签的数据,包括标签ID、标签内容、标签宽度、标签高度以及标签中心点的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_OCR_RECOGNITION);
}
void loop() {
	huskylens.getResult(ALGORITHM_OCR_RECOGNITION);
	if ((huskylens.available(ALGORITHM_OCR_RECOGNITION))) {
		k10.canvas->canvasText((String("文字块数量:") + String((huskylens.getCachedResultNum(ALGORITHM_OCR_RECOGNITION)))), 1, 0x0000FF);
		k10.canvas->canvasText((String("靠近中心的文字ID:") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION), Result, ID)))), 3, 0x0000FF);
		k10.canvas->canvasText("靠近中心的文字内容:", 5, 0x0000FF);
		k10.canvas->canvasText((RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION), Result, content)), 6, 0x0000FF);
		k10.canvas->canvasText("靠近中心的文字块", 8, 0x0000FF);
		k10.canvas->canvasText((String("的中心坐标:") + String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION), Result, width))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION), Result, height)))))))), 9, 0x0000FF);
		k10.canvas->canvasText("靠中心的文字块", 11, 0x0000FF);
		k10.canvas->canvasText((String("的宽高:") + String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION), Result, yCenter)))))))), 12, 0x0000FF);
	}
	k10.canvas->updateCanvas();
	delay(50);
}

上传程序,等待程序上传完成后。

将HuskyLens 2的摄像头对准画面中的标签可进行学习,如何学习标签详细操作请看:标签识别功能-学习标签

将HUSKYLENS 2的摄像头对准标签码,观察K10屏幕显示的结果。

**运行结果:**如图所示,可输出检测到的标签码数量(无论是否该标签码已学习)、可输出指定的标签ID,未学习的标签码则为0。

Interface Diagram

2. 获取画面中指定标签的相关数据

HuskyLens 2识别标签后,可获取画面中指定标签的相关数据。例如,判断某个指定ID的标签是否在画面中、可获取画面中相同ID的标签数量,当画面中出现多个相同ID的标签时,可指定获取其中某个标签的相关参数,包括名称、内容、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_TAG_RECOGNITION);
}
void loop() {
	huskylens.getResult(ALGORITHM_TAG_RECOGNITION);
	if ((huskylens.available(ALGORITHM_TAG_RECOGNITION))) {
		if (((huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 0) != NULL))) {
			k10.canvas->canvasText((String("ID0标签总数:") + String((huskylens.getCachedResultNumByID(ALGORITHM_TAG_RECOGNITION, 0)))), 1, 0x0000FF);
			k10.canvas->canvasText("第一个ID0标签", 3, 0x0000FF);
			k10.canvas->canvasText((String("内容:") + String((RET_ITEM_STR(huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 1-1), Result, content)))), 4, 0x0000FF);
			k10.canvas->canvasText("第二个ID0标签", 6, 0x0000FF);
			k10.canvas->canvasText((String("的坐标:") + String((String((RET_ITEM_NUM(huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 2-1), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 2-1), Result, yCenter)))))))), 7, 0x0000FF);
		}
	}
	k10.canvas->updateCanvas();
	delay(50);
}

**运行结果:**如图所示,画面中有两个未学习的标签码(ID为0),第一个ID0标签是左边的,该标签的内容是48,第二个ID0标签是右边的,该标签的坐标是(505,263)。

Interface Diagram