未來板MicroPython編程16:KOI
導入 KOI 庫
需要先導入KOI的庫才可以使用KOI。
from futureKOI import KOI
KOI 基本應用
初始化KOI
koi = KOI(tx='P2',rx='P12',id=1)
初始化KOI
tx為模組藍色線,配合Robotbit Edu使用請填P2。
rx為模組綠色線,配合Robotbit Edu使用請填P12。
改變屏幕方向
# available modes
# 0,2
koi.screen_mode(mode, cmd='K6')
改變屏幕方向。
mode:0代表前置鏡頭,2代表後置鏡頭。
顯示字串
koi.text(x, y, delay, text, cmd="K4")
在屏幕顯示字串。
x和y: 文字左上角的座標。
text: 字串。
delay: 延時,字串顯示時間。
截圖
koi.screen_save(pic , cmd="K2")
用KOI拍照。
pic: 檔案名稱(.jpg)
顯示相片
koi.screen_show(pic, cmd="K1")
顯示相片。
pic: 檔案名稱(.jpg)
人臉追蹤
載入人臉模型
koi.face_yolo_load(cmd="K30")
載入人臉模型。
運行人臉追蹤(單個人臉)
x = koi.face_detect(cmd="K31")
運行人臉追蹤。
獲取人臉坐標
koi.get_re(cmd="K31")[0] #x
koi.get_re(cmd="K31")[1] #y
獲取人臉坐標。
運行人臉追蹤(多個人臉)
koi.face_count(cmd="K32")
運行人臉追蹤。
獲取人臉數量
koi.get_re(cmd="K32")[0]
獲取人臉數量。
人臉追蹤範例程式
from future import *
from futureKOI import KOI
screen.sync = 0
koi = KOI(tx='P2',rx='P12',id=1)
koi.screen_mode(2, cmd='K6')
koi.face_yolo_load(cmd='K30')
while True:
if koi.face_detect(cmd='K31'):
screen.fill((0, 0, 0))
screen.text("Face detected:",5,10,1,(255, 255, 255))
screen.text("X:",5,20,2,(255, 255, 255))
screen.text((koi.get_re(cmd='K31')[0]),5,40,3,(255, 255, 255))
screen.text("Y:",5,70,2,(255, 255, 255))
screen.text((koi.get_re(cmd='K31')[1]),5,90,3,(255, 255, 255))
screen.refresh()
else:
screen.fill((0, 0, 0))
screen.text("No face",5,10,1,(255, 255, 255))
screen.refresh()
sleep(0.5)
特徵分類器
初始化分類器
koi.init_cls()
初始化特徵分類器。
保存分類器模型
koi.cls_save_model(model,cmd="K43")
保存分類器模型。
model: 檔案名稱(.json/.bin)
載入分類器模型
koi.cls_load_model(model="abc.json",cmd="K44")
載入分類器模型。
model: 檔案名稱(.json/.bin)
添加標籤
koi.cls_add_tag(tag,cmd="K41")
提取特徵添加標籤。
tag: 物件標籤
執行特徵分類
koi.cls_run(cmd="K42")
返回特徵分類。
KOI特徵分類器範例程式(模型訓練)
from future import *
from futureKOI import KOI
items = []
i = 0
items.append('rock')
items.append('paper')
items.append('scissors')
i = 0
koi = KOI(tx='P2',rx='P12',id=1)
koi.init_cls() # init classifier
koi.screen_mode(2, cmd='K6')
screen.sync = 0
while True:
screen.fill((0, 0, 0))
if sensor.btnValue("a") and sensor.btnValue("b"):
koi.cls_save_model(model="model.json",cmd='K43') # saves the classifier model
buzzer.melody(1)
else:
if sensor.btnValue("a"):
sleep(0.2)
if not sensor.btnValue("b"):
koi.cls_add_tag(id=(items[int((i % 3 + 1) - 1)]),cmd='K41') # classifier add tag
buzzer.melody(4)
else:
if sensor.btnValue("b"):
sleep(0.2)
buzzer.tone(440,0.2)
if not sensor.btnValue("a"):
i += 1
screen.text("Now training:",0,10,1,(255, 255, 255))
screen.text((items[int((i % 3 + 1) - 1)]),0,30,2,(255, 255, 255))
screen.text("Press A to add tag",0,60,1,(255, 255, 255))
screen.text("Press B for next tag",0,80,1,(255, 255, 255))
screen.text("Press A+B to save",0,100,1,(255, 255, 255))
screen.refresh()
KOI特徵分類器範例程式(模型運行)
from future import *
from futureKOI import KOI
koi = KOI(tx='P2',rx='P12',id=1)
koi.screen_mode(2, cmd='K6')
koi.init_cls()
koi.cls_load_model(model="model.json",cmd='K44') # loads the classifier model
while True:
if sensor.btnValue("a"):
screen.clear()
screen.text((koi.cls_run(cmd='K42')),5,10,2,(255, 255, 255)) # displays the classified tag
screen.refresh()
顏色追蹤
顏色校正
koi.color_cali(name ,cmd="K16")
校正要追蹤的顏色。
name: 顏色
追蹤色塊
koi.color_tracking(name="name", cmd="K15")
# returns [cx,cy,w,h,name]
追蹤色塊,並返回色塊數值。
name: 顏色
獲取色塊數值
koi.get_re(cmd="K15")[0] #cx
koi.get_re(cmd="K15")[1] #cy
koi.get_re(cmd="K15")[2] #w
koi.get_re(cmd="K15")[3] #h
獲取色塊數值。
顏色追蹤範例程式
from future import *
from futureKOI import KOI
koi.screen_mode(2, cmd='K6')
koi = KOI(tx='P2',rx='P12',id=1)
while True:
if sensor.btnValue("a"):
koi.color_cali(name="red" ,cmd='K16')
sleep(0.3)
if sensor.btnValue("b"):
if koi.color_tracking(name="red", cmd='K15'):
screen.clear()
screen.text((koi.get_re(cmd='K15')[0]),5,10,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K15')[1]),5,20,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K15')[2]),5,30,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K15')[3]),5,40,1,(255, 255, 255))
screen.refresh()
sleep(0.3)
追蹤巡線
koi.line_tracking(name ,cmd="K12")
# returns [x1, y1, x2, y2, name]
追蹤巡線,並返回巡線數值。
name: 顏色
獲取巡線數值
koi.get_re(cmd="K12")[0] #x1
koi.get_re(cmd="K12")[1] #y1
koi.get_re(cmd="K12")[2] #x2
koi.get_re(cmd="K12")[3] #y2
獲取巡線數值。
追蹤巡線範例程式
from future import *
from futureKOI import KOI
koi.screen_mode(2, cmd='K6')
koi = KOI(tx='P2',rx='P12',id=1)
while True:
if sensor.btnValue("a"):
koi.color_cali(name="red" ,cmd='K16')
sleep(0.3)
if sensor.btnValue("b"):
if koi.line_tracking(name="red" ,cmd='K12'):
screen.clear()
screen.text((koi.get_re(cmd='K12')[0]),5,10,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K12')[1]),5,20,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K12')[2]),5,30,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K12')[3]),5,40,1,(255, 255, 255))
screen.refresh()
sleep(0.3)
幾何圖形識別
圓形追蹤
koi.circle_detect(threshold, cmd="K10")
追蹤畫面裡的圓形。
threshold: 臨界值,越高越難追蹤,一般建議4000。
獲取圓形數值
koi.get_re(cmd="K10")[0] #cx
koi.get_re(cmd="K10")[1] #cy
koi.get_re(cmd="K10")[2] #r
獲取圓形數值。
矩形追蹤
koi.rectangle_detect(th=4000,cmd="K11")
追蹤畫面裡的矩形。
threshold: 臨界值,越高越難追蹤,一般建議4000。
獲取矩形數值
koi.get_re(cmd="K11")[0]
koi.get_re(cmd="K11")[1]
koi.get_re(cmd="K11")[2]
koi.get_re(cmd="K11")[3]
獲取矩形數值。
幾何圖形識別範例程式
from futureKOI import KOI
from future import *
koi.screen_mode(2, cmd='K6')
koi = KOI(tx='P2',rx='P12',id=1)
while True:
if sensor.btnValue("a"):
if koi.circle_detect(th=4000, cmd='K10'):
screen.clear()
screen.text((koi.get_re(cmd='K10')[0]),5,10,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K10')[0]),5,20,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K10')[0]),5,30,1,(255, 255, 255))
screen.refresh()
sleep(0.3)
if sensor.btnValue("b"):
if koi.rectangle_detect(th=4000,cmd='K11'):
screen.clear()
screen.text((koi.get_re(cmd='K11')[0]),5,10,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K11')[1]),5,20,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K11')[2]),5,30,1,(255, 255, 255))
screen.text((koi.get_re(cmd='K11')[3]),5,40,1,(255, 255, 255))
screen.refresh()
sleep(0.3)
條碼識別
QR Code識別
koi.scan_qrcode(cmd="K20")
識別畫面裡的QR Code。
Barcode識別
koi.scan_barcode(cmd="K22")
識別畫面裡的Barcode。
AprilTag識別
koi.scan_Apriltag(cmd="K23")
識別畫面裡的AprilTag。
AprilTag數值
koi.get_re(cmd="K23")[0] #id
koi.get_re(cmd="K23")[1] #cx
koi.get_re(cmd="K23")[2] #cy
koi.get_re(cmd="K23")[3] #w
koi.get_re(cmd="K23")[4] #h
獲取AprilTag數值。
條碼識別範例程式
from future import *
from futureKOI import KOI
koi = KOI(tx='P2',rx='P12',id=1)
koi.screen_mode(2, cmd='K6')
while True:
if sensor.btnValue("a"):
screen.clear()
screen.text((koi.scan_qrcode(cmd='K20')),5,10,2,(255, 255, 255))
if sensor.btnValue("b"):
screen.clear()
screen.text((koi.scan_barcode(cmd='K22')),5,10,2,(255, 255, 255))
物聯網
連接網絡
koi.connect_wifi(router ,pwd ,cmd="K50")
連接WiFi網絡。
router: 網絡SSID
pwd: 網絡密碼
獲取IP地址
koi.get_ip(cmd="K54")
獲取IP地址。
百度AI
百度AI人臉辨識
koi.baiduAI_face_detect(cmd="K75")
# returns [face token, age, sex, mask, emotion]
運行百度AI人臉辨識並返回人臉數值。
獲取人臉特徵碼
koi.get_re(cmd="K75")[0]
獲取人臉特徵碼。
添加人臉到組別
koi.baiduAI_face_add(face_token="token" ,groupName="group" ,faceName="name" ,cmd="K76")
添加人臉到組別。
face_token: 人臉特徵碼
groupName: 組別名稱
faceName: 人臉名稱
在組別搜尋人臉
koi.baiduAI_face_search(face_token="token" ,groupName="group" ,cmd="K77")[0]
在組別搜尋人臉並返回人臉名稱。
face_token: 人臉特徵碼
groupName: 組別名稱
文字轉語音
koi.baiduAI_tts(text ,cmd="K78")
文字轉語音。
-text: 文字,不支援空白鍵
物聯網文字轉語音範例程式
from future import *
from futureKOI import KOI
koi = KOI(tx='P2',rx='P12',id=1)
koi.screen_mode(2, cmd='K6')
koi.connect_wifi(router="apname" ,pwd="password" ,cmd='K50')
while True:
if sensor.btnValue("a"):
koi.baiduAI_tts(txt='"hello"' ,cmd='K78')
sleep(0.2)
if sensor.btnValue("b"):
screen.clear()
screen.text((koi.get_ip(cmd='K54')),5,10,1,(255, 255, 255))
screen.refresh()
sleep(0.2)
語音辨識
錄製wav音頻檔
koi.audio_record(name)
錄製wav音頻檔。
name: 檔案名稱(.wav)
播放wav音頻檔
koi.audio_play(name)
播放wav音頻檔。
name: 檔案名稱(.wav)
校正環境噪音
koi.audio_noisetap()
校正環境噪音,語音辨識前必須運行。
語音辨識增加命令詞
koi.speech_add_tag(tag)
增加語音辨識命令詞。
tag: 命令詞
運行語音辨識
koi.speech_run(cmd="K65")
運行語音辨識,返回命令詞。
儲存語音模型
koi.speech_save_model(file)
儲存語音模型。
file: 檔案名稱(.json)
載入語音模型
koi.speech_load_model(file)
載入語音模型。
file: 檔案名稱(.json)
語音辨識模型訓練範例程式
from future import *
from futureKOI import KOI
items = []
i = 0
items.append('rock')
items.append('paper')
items.append('scissors')
i = 0
koi = KOI(tx='P2',rx='P12',id=1)
koi.audio_noisetap()
koi.screen_mode(2, cmd='K6')
screen.sync = 0
while True:
screen.fill((0, 0, 0))
if sensor.btnValue("a") and sensor.btnValue("b"):
buzzer.melody(1)
koi.speech_save_model("speech.json")
else:
if sensor.btnValue("a"):
sleep(0.2)
if not sensor.btnValue("b"):
koi.speech_add_tag((items[int((i % 3 + 1) - 1)]))
else:
if sensor.btnValue("b"):
sleep(0.2)
buzzer.tone(440,0.2)
if not sensor.btnValue("a"):
i += 1
screen.text("Now training:",0,10,1,(255, 255, 255))
screen.text((items[int((i % 3 + 1) - 1)]),0,30,2,(255, 255, 255))
screen.text("Press A to add tag",0,60,1,(255, 255, 255))
screen.text("Press B for next tag",0,80,1,(255, 255, 255))
screen.text("Press A+B to save",0,100,1,(255, 255, 255))
screen.refresh()
語音辨識模型運行範例程式
from future import *
from futureKOI import KOI
koi = KOI(tx='P2',rx='P12',id=1)
koi.audio_noisetap()
koi.speech_load_model("speech.json")
while True:
if sensor.btnValue("a"):
screen.clear()
screen.text((koi.speech_run(cmd='K65')),5,10,2,(255, 255, 255))
screen.refresh()
雜項
重設KOI
koi.reset(cmd='k99')
重設KOI
停止分類器
koi.stop_kpu(cmd='k98')
停止分類器
Last updated