Object Tracking Example

HUSKYLENS 2 object tracking is like giving your camera a label printer that continuously reports each tracked target’s ID, name, center x‑y position, width, and height on the UNIHIKER K10 screen. The sample Arduino code initializes K10, connects HUSKYLENS over I2C, switches to object tracking algorithm, then in loop reads the cached center result and prints these parameters in blue text before refreshing the canvas, after you first box the target and point the camera at it.

1. Object Tracking Code Example

Before You Start:

1.1 Track Object Output Related Data

When HUSKYLENS 2 detects a trackable target object, related tracking data can be obtained. The available data includes: object ID, name, xy coordinates, width, and height.

Example program is as follows.

#include "unihiker_k10.h"
#include "DFRobot_HuskylensV2.h"

// Create objects: Huskylens (tracking) & UNIHIKER K10 (screen)
HuskylensV2  huskylens;
UNIHIKER_K10 k10;
uint8_t      screen_dir = 2;  // Screen display direction (adjust as needed)


// Main program initialization
void setup() {
  k10.begin();          // Initialize UNIHIKER K10 hardware
  Wire.begin();         // Initialize I2C for Huskylens communication

  // Wait for Huskylens to connect (retry every 100ms until success)
  while (!huskylens.begin(Wire)) {
    delay(100);
  }

  k10.initScreen(screen_dir);       // Initialize screen with set direction
  k10.creatCanvas();                // Create canvas for screen display
  huskylens.switchAlgorithm(ALGORITHM_OBJECT_TRACKING);  // Set Huskylens to tracking mode
}

void loop() {
  huskylens.getResult(ALGORITHM_OBJECT_TRACKING);  // Fetch latest tracking data

  // Check if valid tracking data is available
  if (huskylens.available(ALGORITHM_OBJECT_TRACKING)) {
    // Get center object's data (simplify repeated calls)
    auto centerObj = huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING);
    
    // Display object info (blue color: 0x0000FF)
    k10.canvas->canvasText(String("Obj ID: ") + String(RET_ITEM_NUM(centerObj, Result, ID)), 1, 0x0000FF);
    k10.canvas->canvasText(String("Obj Name: ") + String(RET_ITEM_STR(centerObj, Result, name)), 3, 0x0000FF);
    k10.canvas->canvasText(String("(x,y): ") + String(RET_ITEM_NUM(centerObj, Result, xCenter)) + String(","), 5, 0x0000FF);
    k10.canvas->canvasText(String(RET_ITEM_NUM(centerObj, Result, yCenter)), 6, 0x0000FF);  // Split coords to avoid line overflow
    k10.canvas->canvasText(String("(w,h): ") + String(RET_ITEM_NUM(centerObj, Result, width)) + String(","), 7, 0x0000FF);
    k10.canvas->canvasText(String(RET_ITEM_NUM(centerObj, Result, height)), 8, 0x0000FF);   // Split size to avoid line overflow
  }

  k10.canvas->updateCanvas();  // Refresh screen to show latest info
  delay(50);                   // Short delay to stabilize data reading
}

After uploading the program and waiting for completion, align the HUSKYLENS 2 camera with the target object (you must first box the target object, refer to the Object Tracking usage instructions: Color Recognition. Once boxed, aim at the target object to be tracked and observe the output.

Running Result:Outputs include the tracked object ID, name, xy coordinates, width, and height. The object name defaults to "Object". You can change the name in Settings.

Interface Diagram

Was this article helpful?

TOP