串口指令集
通过其他主控诸如meowbit、掌控板、microbit、Arduino等给KOI发送串口K指令来驱动,达到项目式人工智能的目的。
危险
- 如果串口指令调试KOI,需要将KOI作为模块,通过侧面PH2.0 4PIN端子口与主控板连接。
- 确保KOI不与电脑连接(否则KOI将进入主控模式,该模式下无法采用串口指令调试)
范例
- 主控:microbit
- 功能:人脸追踪为例子
#/bin/python
from microbit import *
re_list = []
'''
K30 初始化人脸模型
K31 执行人脸追踪,会导致KOI返回坐标数据格式"K31 x y
'''
# 串口接收部分
def argument_gen():
global re_list
if uart.any():
re = str(uart.readline(), 'UTF-8') # 转字节为字符串
re = re.strip() # 去掉首尾空格换行符
re_list = re.split(' ') # 已空格为分隔符分割放在列表
cmd = re_list[0]
if cmd == 'K31':
face_callback()
# 单独抽离人脸监测返回值执行任务部分
def face_callback():
global re_list
if len(re_list)>1:
display.scroll(re_list[1])
# 串口初始化
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
uart.write('\n\n')
sleep(1000)
uart.write('K30\r\n')
sleep(500)
while True:
# KOI加载人脸模型
uart.write('K31\r\n')
sleep(50)
# 接收并处理来自KOI返回的数据
if 'argument_gen' in dir():
argument_gen()
串口指令
指令 | 描述 | 参数 | 返回 |
---|---|---|---|
K0 | 返回KOI固件版本信息 | "K0 version" | |
K1 pic | 显示.jpg格式图片 | pic : name.jpg | |
K2 pic | 截取显示帧存储为.jpg格式图片 | pic : name.jpg | |
K3 | 读取按键状态 | "K3 0 0" (顺序是A、B,按下状态为1) | |
K4 x y delay text | 显示英文字符 | x y :坐标 delay: 延时(ms) text: 英文或数字字符串 | |
K6 dir | 根据摄像头方向自行更改屏幕显示方式 | dir: 0前置 2后置 | |
K10 th | 识别圆型并标记识别框 | th:阈值(推荐2000) 越小越易识别但误差越大 | "K10 圆心x 圆心y 半径" |
K11 th | 识别矩型并标记识别框 | th:阈值(推荐6000) 越小越易识别但误差越大 | "K11 中心x 中心y 宽 高" |
K12 name | 通过颜色进行线条追踪( | name: 自行取名 主要是好辨认,比如黑线就取black | "K12 x1 y1 x2 y2" |
K15 name | 追踪色块(需要先颜色校准) | name: 自行取名 主要是好辨认,比如黑线就取black | "K15 中心x 中心y 宽 高" |
K16 name | 颜色校准 | name: 自行取名 主要是好辨认,比如黑线就取black | |
K20 | 识别二维码 | "K20 信息" | |
K22 | 识别条形码 | "K22 信息" | |
K23 | 识别AprilTag | AprilTag识别 返回值:ID x y width height rx ry rz(轴旋转角) | "K23 id 中心x 中心y 宽 高 tx ty tz(偏移)" |
K30 | 人脸识别Yolo模型初始化 | ||
K31 | 人脸追踪并标记识别框(当前有个bug每次都会返回上一次识别的框框和信息,待解决) | "K31 中心x 中心y" | |
K32 | 返回检测到的人脸数量 | "K32 数量" | |
K40 | 重置(初始化)特征分类型 | ||
K41 tagName | 添加分类标签,上限40个素材,每个分类可录制多个素材 | tagName: 自行取名方便记录,比如pen,apple | |
K42 | 运行分类,识别物体并返回标签名 | "K42 标签名" | |
K43 path | 保存特征分类模型 | path: 相对路径,一般直接填模型名称即可,如:model.json | |
K44 path | 加载特征分类模型 | path: 将保存的模型再加载出来 | |
K45 path | 加载KNN模型,需要结合Kittenblock训练模型并导出使用 | path: 相对路径,一般直接填模型名称即可,如:model.kmodel | |
K46 | 运行KNN分类 | "K42 标签名" | |
K50 routerName password | KOI连接路由器网络(不支持5G,账号和密码尽量不要有特殊符号) | 不支持5G信号,路由器名称不要带空格,尽量英文字母开头 | |
K51 host clientID port [user][password] | 加入MQTT服务器 user和password选填 | host: MQTT服务器地址 clientID: 自由起名 Port:端口号(一般为1883) | |
K52 topic | 订阅话题 | topic: 一般会用/起头,如/temperature. (前往iot.kittenbot.cn添加属于自己的话题) | |
K53 topic data | 向话题发送消息 | topic: 话题 data: 消息,也许不支持中文 | |
K54 | 获取ip地址 | "K54 ip" | |
K55 topic | 接收话题里的消息 | topic: 话题 | "K55 消息" (消息会堆积) |
K56 | 获取网络时间 (需要先连接wifi) | "K56 time" (time是个数组) (year, month, day, hour, minute, second, week-1, passed from 1.1) | |
K61 name | 录制一段3s左右的音频并存储 | name: name.wav | |
K62 name | 播放录制或存储在SD卡中的wav音频文件 | name: name.wav (wav音频文件要求:单通道,16K采样率,16bit样本位,3s内) | |
K63 | 自动校准环境噪声,作为识别的基准环境音。(尽量保持安静) 同样也会清空当前缓存里的分类 | ||
K64 tagName | 添加命令词,并附带标签名。若成功添加,屏幕会返回绿色,红色则失败 | tagName: 自行取名方便记录,比如open、close | |
K65 | 命令词听取,成功KOI显示绿色屏幕,并返回标签名 | "K65 tagName" | |
K66 path | 保存语音分类模型 | path: 相对路径,一般直接填模型名称即可,如:speech.json | |
K67 path | 加载语音分类模型 | path: 将保存的模型再加载出来 | |
K75 | 执行一次百度AI人脸识别 | "K75 人脸token 性别 年龄 是否带口罩 表情" | |
K76 token groupName faceName | 将人脸token添加到云端人脸组 | token: K75获得的token groupName: 组名(尽量独特一些,大家共用的) faceName: 起个人脸名 | |
K77 token groupName | 在指定的人脸组中搜索最后一次识别返回的人脸token | token: K75获得的token groupNamel: 要搜索人脸的组名 | "K77 faceName" |
K78 str | 文字转语音,尽量别超过6个字 | ||
K98 | 停止KPU(特征分类和人脸追踪) 不常用 | ||
K99 | 软件复位 |
更新摘要
- 2020-12-4
根据 最新KOI固件 v1.12.0版本 对串口指令描述做了更新