这个库提供了一个在Arduino兼容板上驱动二哈识图V2的接口。它支持UART和I2C通信协议,并提供各种计算机视觉算法,如物体识别、人脸检测、巡线等功能。
- 从GitHub下载库文件
- 解压zip文件
- 将解压后的文件夹移动到您的Arduino库目录
- 重启Arduino IDE
- 在您的ino文件中包含库:
#include <DFRobot_HuskylensV2.h>
或者,您也可以通过Arduino库管理器搜索"DFRobot_HuskylensV2"来安装此库。
/**
* @fn begin
* @brief 使用UART通信初始化二哈识图V2
* @param streamInput 用于通信的串口
* @return 初始化成功返回true,否则返回false
*/
bool begin(Stream &streamInput);
/**
* @fn begin
* @brief 使用I2C通信初始化二哈识图V2
* @param streamInput 用于通信的I2C接口
* @return 初始化成功返回true,否则返回false
*/
bool begin(TwoWire &streamInput);
/**
* @fn knock
* @brief 检查二哈识图V2是否已连接
* @return 二哈识图V2已连接返回true,否则返回false
*/
bool knock(void);/**
* @fn switchAlgorithm
* @brief 切换二哈识图V2的算法,如果是自己安装的算法,请到目标算法UI的菜单中中找到Algo ID
* @param algo 要切换的算法
* @return 算法切换成功返回true,否则返回false
*/
bool switchAlgorithm(eAlgorithm_t algo);
/**
* @fn getResult
* @brief 获取二哈识图V2的识别结果
* @param algo 要获取结果的算法
* @return 成功返回COMMAND_RETURN_ARGS,retValue==0,其他值表示错误
*/
int8_t getResult(eAlgorithm_t &algo);
/**
* @fn available
* @brief 检查特定算法是否有结果可用
* @param algo 要检查的算法
* @return 有结果可用返回true,否则返回false
*/
bool available(eAlgorithm_t algo);/**
* @fn popCachedResult
* @brief 从结果队列中弹出一个缓存的结果
* @param algo 要获取结果的算法
* @return 指向结果的指针,如果没有可用结果则返回NULL
*/
Result *popCachedResult(eAlgorithm_t algo);
/**
* @fn getCachedCenterResult
* @brief 获取最接近屏幕中心的结果
* @param algo 要获取结果的算法
* @return 指向中心结果的指针,如果没有可用结果则返回NULL
*/
Result *getCachedCenterResult(eAlgorithm_t algo);
/**
* @fn getCachedResultByIndex
* @brief 通过索引获取缓存的结果
* @param algo 要获取结果的算法
* @param index 结果的索引
* @return 指向结果的指针,如果指定索引处没有可用结果则返回NULL
*/
Result *getCachedResultByIndex(eAlgorithm_t algo, int16_t index);
/**
* @fn getCachedResultByID
* @brief 通过ID获取缓存的结果
* @param algo 要获取结果的算法
* @param ID 要检索的对象ID
* @return 指向结果的指针,如果没有指定ID的结果则返回NULL
*/
Result *getCachedResultByID(eAlgorithm_t algo, int16_t ID);
/**
* @fn getCachedResultNum
* @brief 获取缓存结果的数量
* @param algo 要获取结果的算法
* @return 缓存结果的数量
*/
int16_t getCachedResultNum(eAlgorithm_t algo);
/**
* @fn getCachedResultLearnedNum
* @brief 获取已学习结果的数量
* @param algo 要获取结果的算法
* @return 已学习结果的数量
*/
int16_t getCachedResultLearnedNum(eAlgorithm_t algo);/**
* @fn learn
* @brief 使用当前算法学习对象
* @param algo 用于学习的算法
* @return 学习成功返回true,否则返回false
*/
bool learn(eAlgorithm_t algo);
/**
* @fn learnBlock
* @brief 学习特定的区块
* @param algo 用于学习的算法
* @param x 区块左上角的x坐标
* @param y 区块左上角的y坐标
* @param width 区块的宽度
* @param height 区块的高度
* @return 学习成功返回true,否则返回false
*/
bool learnBlock(eAlgorithm_t algo, int16_t x, int16_t y, int16_t width, int16_t height);
/**
* @fn forget
* @brief 忘记特定算法的所有已学习对象
* @param algo 要忘记已学习对象的算法
* @return 忘记成功返回true,否则返回false
*/
bool forget(eAlgorithm_t algo);
/**
* @fn saveKnowledges
* @brief 将已学习的知识保存到特定的知识ID
* @param algo 要保存知识的算法
* @param knowledgeID 保存知识的ID
* @return 保存成功返回true,否则返回false
*/
bool saveKnowledges(eAlgorithm_t algo, uint8_t knowledgeID);
/**
* @fn loadKnowledges
* @brief 从特定的知识ID加载已学习的知识
* @param algo 要加载知识的算法
* @param knowledgeID 加载知识的ID
* @return 加载成功返回true,否则返回false
*/
bool loadKnowledges(eAlgorithm_t algo, uint8_t knowledgeID);/**
* @fn drawRect
* @brief 在二哈识图显示屏上绘制矩形
* @param algo 算法上下文
* @param colorID 矩形的颜色ID
* @param lineWidth 矩形的线宽
* @param x 左上角的x坐标
* @param y 左上角的y坐标
* @param width 矩形的宽度
* @param height 矩形的高度
* @return 绘制成功返回true,否则返回false
*/
bool drawRect(eAlgorithm_t algo, uint8_t colorID, uint8_t lineWidth, int16_t x, int16_t y, int16_t width, int16_t height);
/**
* @fn drawRect
* @brief 在二哈识图显示屏上唯一矩形,执行这个函数时,之前绘制的矩形会被自动擦除
* @param algo 算法上下文
* @param colorID 矩形的颜色ID
* @param lineWidth 矩形的线宽
* @param x 左上角的x坐标
* @param y 左上角的y坐标
* @param width 矩形的宽度
* @param height 矩形的高度
* @return 绘制成功返回true,否则返回false
*/
bool drawUniqueRect(eAlgorithm_t algo, uint8_t colorID, uint8_t lineWidth, int16_t x, int16_t y, int16_t width, int16_t height);
/**
* @fn drawText
* @brief 在二哈识图显示屏上绘制文本
* @param algo 算法上下文
* @param colorID 文本的颜色ID
* @param fontSize 文本的字体大小
* @param x 文本位置的x坐标
* @param y 文本位置的y坐标
* @param text 要绘制的文本
* @return 绘制成功返回true,否则返回false
*/
bool drawText(eAlgorithm_t algo, uint8_t colorID, uint8_t fontSize, int16_t x, int16_t y, String text);
/**
* @fn clearRect
* @brief 清除二哈识图显示屏上的所有矩形
* @param algo 算法上下文
* @return 清除成功返回true,否则返回false
*/
bool clearRect(eAlgorithm_t algo);
/**
* @fn clearText
* @brief 清除二哈识图显示屏上的所有文本
* @param algo 算法上下文
* @return 清除成功返回true,否则返回false
*/
bool clearText(eAlgorithm_t algo);/**
* @fn setMultiAlgorithm
* @brief 设置多个算法同时运行(仅适用于大内存开发板)
* @param algo0 第一个算法id
* @param algo1 第二个算法id
* @param algo2 第三个算法id(默认:ALGORITHM_ANY)
* @return 设置成功返回true,否则返回false
*/
bool setMultiAlgorithm(eAlgorithm_t algo0, eAlgorithm_t algo1, eAlgorithm_t algo2 = ALGORITHM_ANY);
/**
* @fn setMultiAlgorithmRatio
* @brief 设置多个算法同时运行(仅适用于大内存开发板)
* @param ratio0 第一个算法时间占用比
* @param ratio1 第二个算法时间占用比
* @param ratio2 第三个算法时间占用比(默认:0)
* @return 设置成功返回true,否则返回false
*/
bool setMultiAlgorithmRatio(uint8_t ratio0, uint8_t ratio1, uint8_t ratio2 = 0);二哈识图V2包含多种算法,每种算法在结果中产生不同的元素。 有关上述API中algo和result形参允许的实参,请参见下表。
| 算法枚举 | 算法说明 | 结果元素 |
|---|---|---|
| ALGORITHM_ANY | 任意算法 | 根据活动算法而变化 |
| ALGORITHM_FACE_RECOGNITION | 人脸识别 | ID、name、xCenter、yCenter、width、height、眼睛坐标、嘴巴坐标、鼻子坐标 |
| ALGORITHM_OBJECT_TRACKING | 物体追踪 | ID、name、xCenter、yCenter、width、height |
| ALGORITHM_OBJECT_RECOGNITION | 物体识别 | ID、name、xCenter、yCenter、width、height |
| ALGORITHM_LINE_TRACKING | 巡线追踪 | xTarget、yTarget、angle、length |
| ALGORITHM_COLOR_RECOGNITION | 颜色识别 | ID、name、xCenter、yCenter、width、height |
| ALGORITHM_TAG_RECOGNITION | 标签识别 | ID、name、xCenter、yCenter、width、height、content |
| ALGORITHM_SELF_LEARNING_CLASSIFICATION | 自学习分类 | ID、name |
| ALGORITHM_OCR_RECOGNITION | 光学字符识别 | ID、name、xCenter、yCenter、width、height、content |
| ALGORITHM_LICENSE_RECOGNITION | 车牌识别 | ID、name、xCenter、yCenter、width、height、content |
| ALGORITHM_QRCODE_RECOGNITION | 二维码识别 | ID、name、xCenter、yCenter、width、height、content |
| ALGORITHM_BARCODE_RECOGNITION | 条形码识别 | ID、name、xCenter、yCenter、width、height、content |
| ALGORITHM_EMOTION_RECOGNITION | 表情识别 | ID、name、xCenter、yCenter、width、height |
| ALGORITHM_POSE_RECOGNITION | 姿态识别 | ID、name、xCenter、yCenter、width、height、身体关节坐标 |
| ALGORITHM_HAND_RECOGNITION | 手势识别 | ID、name、xCenter、yCenter、width、height、手部关节坐标 |
| ALGORITHM_SEGMENT | 实例分割 | ID、name、xCenter、yCenter、width、height |
| 开发板 | 正常运行 | 运行失败 | 未测试 | 备注 |
|---|---|---|---|---|
| Arduino UNO | √ | |||
| Arduino Mega | √ | |||
| Arduino Leonardo | √ | |||
| ESP32 | √ | 大内存支持 | ||
| ESP8266 | √ | 大内存支持 | ||
| Raspberry Pi Pico | √ | |||
| micro:bit | √ | 大内存支持 |
- 2025/11/08 - 版本1.0.0发布。
Written by Ouki.Wang(ouki.wang@dfrobot.com), 2025.11.08 (欢迎访问我们的网站)