KOI MicroPython API
KOI也支援使用MicroPython編程,可以實現純文字的編程。
導入KOI庫
需要先導入KOI庫才可以使用KOI。
from koi import *基本應用
改變屏幕方向
lcd.rotation(0)改變屏幕方向。
屏幕方向:0代表前置鏡頭,1代表橫置鏡頭,2代表後置鏡頭。
顯示字串
drawString(x, y, string, delay)在屏幕顯示字串。
x和y代表文字左上角的座標。
string代表字串。
delay代表延時,字串顯示時間。
截圖和顯示
img.save("s1.jpg")
loadImage("s1.jpg")用KOI拍照和顯示相片。
獲取按鍵數值
btnAValue()
btnBValue()獲取A和B按鍵數值。
當按下時返回數值為1,否則為0。
示範程式
#/bin/python
from koi import *
from time import sleep
x = 0
lcd.rotation(2) #改變屏幕方向
sleep(1)
lcd.rotation(0) #改變屏幕方向
sleep(1)
drawString(5,5,"hello world",500) #顯示字串
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue() == 1:
img.save("s1.jpg") #KOI拍照
if btnBValue() == 1:
loadImage("s1.jpg") #顯示相片特徵分類器
初始化分類器
cla.reset()初始化特徵分類器。
特徵提取
cla.addImage("tag")提取特徵添加標籤。
tag代表物件標籤,最多支援40張圖片,40件物件。
執行特徵分類
cla.getImageTag()運行一次分類器。
分類器返回觸發事件
while cla.getImageTag()=='tag':
pass分類器返回標籤為tag時觸發事件。
保存和載入分類器
cla.save("abc.json")
cla.load("abc.json")保存分類器模型和載入分類器模型。
示範程式
#模型訓練與保存
from koi import *
x=0
cla.reset()
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
cla.addImage('apple') #提取特徵添加標籤
if btnBValue():
cla.addImage('orange') #提取特徵添加標籤
if btnAValue() and btnBValue():
cla.save('fruit.json') #保存分類器
time.sleep(0.1)#模型載入與運行
from koi import *
x=0
cla.reset() #初始化分類器
cla.load("fruit.json") #載入分類器
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
tag=cla.getImageTag() #執行特徵分類
if tag=='orange':
print('I like oranges.')
elif tag=='apple':
print('Apples are healthy.')
time.sleep(0.1)人臉追蹤
載入人臉模型
yoloinit()載入人臉模型。
運行人臉追蹤
trackface()運行人臉追蹤。
示範程式
#/bin/python
from koi import *
x = 0
face_prop=[0,0]
yoloinit() #載入人臉模型
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
r = trackface() #人臉追蹤
if r:
is_face=1
drawString(5,5,r,500)
face_prop[0]=(r[0][2]+r[0][0])/2
face_prop[1]=(r[0][3]+r[0][1])/2
else:
is_face=0
while is_face:
print('X: '+str(face_prop[0]))
print('Y: '+str(face_prop[1]))
is_face=0
time.sleep(0.5)幾何圖形識別
線條追蹤
findLines()追蹤畫面裡的線條。返回一個列表。
圓形追蹤
findCircle(threshold)追蹤畫面裡的圓形。
threshold代表臨界值,越高越難追蹤,一般建議4000。返回一個列表。
矩形追蹤
findRect(threshold)追蹤畫面裡的矩形。
threshold代表臨界值,越高越難追蹤,一般建議4000。返回一個列表。
示範程式
from koi import *
x=0
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue() and btnBValue():
line_prop = findLines() #線條追蹤
print(line_prop[0])
time.sleep(0.1)
elif btnAValue():
circle_prop = findCircle(4000) #圓形追蹤
print(circle_prop[0])
time.sleep(0.1)
elif btnBValue():
rect_prop = findRects(4000) #矩形追蹤
print(rect_prop[0])
time.sleep(0.1)顏色追蹤
顏色校正
colorCalibrate()校正要追蹤的顏色。
追蹤色塊
findBlob()追蹤色塊。
追蹤巡線
findLinearRegress()追蹤巡線。
示範程式
from koi import *
x=0
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
colorCalibrate() #顏色校正
time.sleep(0.1)
elif btnBValue():
blob_prop=findBlob() #追蹤色塊
print(blob_prop[0])
time.sleep(0.1)
elif btnAValue() and btnBValue():
line_prop=findLinearRegress() #追蹤巡線
print(line_prop[0])
time.sleep(0.1)條碼識別
QR Code識別
findQRCode()識別畫面裡的QR Code。
Barcode識別
findBarcode()識別畫面裡的Barcode。
AprilTag識別
findAprilTag()識別畫面裡的AprilTag。
示範程式
from koi import *
x=0
lcd.rotation(2)
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
barcode=findBarCode() #Barcode識別
print(barcode[0][4])
time.sleep(0.1)
if btnBValue():
qrcode=findQRCode() #QR Code識別
print(qrcode[0][4])
time.sleep(0.1)
if btnAValue() and btnBValue():
april=findAprilTag() #AprilTag識別
print(april[0])
time.sleep(0.1)語音辨識
錄音與播放
speech.recordWav('hi.wav')
speech.playWav('hi.wav')錄製與播放wav音頻檔。
設立噪音基準
speech.noiseTap()設立噪音基準,語音辨識前必須運行。
增加命令詞
speech.addCommand('hi')增加語音辨識命令詞。
運行語音辨識
speech.getCommand()運行語音辨識,返回命令詞。
儲存語音模型
speech.saveClass('name.json')儲存語音模型,檔案必須為json檔。
載入語音模型
speech.loadClass('name.json')載入語音模型,檔案必須為json檔。
參考程式
# 錄音與播放
from koi import *
x=0
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
speech.recordWav('hi.wav') #錄製wav音頻檔
time.sleep(0.1)
if btnBValue():
speech.playWav('hi.wav') #播放wav音頻檔
time.sleep(0.1)#語音辨識
from koi import *
x=0
speech.noiseTap() #設立噪音基準
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
speech.addCommand("hello") #增加命令詞
time.sleep(0.1)
if btnBValue():
speech.addCommand("bye") #增加命令詞
time.sleep(0.1)
if btnAValue() and btnBValue():
print(speech.getCommand()) #運行語音辨識
time.sleep(0.1)物聯網
連接網絡
wifi.joinap(str("apname"),str("password"))連接WiFi網絡。
IP地址
wifi.ipaddr()獲取IP地址。
連接MQTT伺服器
wifi.mqtthost(host)連接MQTT伺服器。
host代表伺服器地址。
訂閱話題
wifi.mqttsub(topic)訂閱MQTT話題。
topic代表話題。
發佈信息
wifi.mqttsub(topic, message)發佈信息到話題。
topic代表話題。
message代表信息。
讀取訊息
wifi.mqttread(topic)讀取話題信息。
topic代表話題。
參考程式
from koi import *
wifi.joinap(str("apname"),str("password")) #連接網絡
time.sleep(2)
print(wifi.ipaddr()) #獲取IP地址
time.sleep(2)
wifi.mqtthost("127.0.0.1") #連接MQTT伺服器
wifi.mqttsub("test01") #訂閱話題
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
wifi.mqttpub("test01","hello world") #發佈信息
if btnBValue():
msg=wifi.mqttread("test01") #讀取訊息
print("Message: "+msg[0])
print("Topic: "+msg[1])人臉辨識
運行一次人臉辨識
face=baiduFace(op=1)運行一次人臉辨識。(需要網絡連線)
人臉參數
face['parameter']獲取人臉辨識的參數。
parameter代表參數,可以獲得的參數有:
face_token:人臉特徵碼
location: 人臉的位置信息,包括座標和大小等
gender:性別
expression:表情
angle:人臉傾斜角度
mask:人臉是否有佩戴口罩
age:年齡
添加人臉到組別
baiduFace(op=2, token=face['face_token'], group="group", name="name")將人臉的名稱添加到組別。
在組別搜尋人臉
baiduFace(op=3, token=face['face_token'], group="group")在組別搜尋人臉,返回人臉的名字和準確度。
參考程式
from koi import *
wifi.joinap(str("apname"),str("password"))
time.sleep(2)
while True:
img=sensor.snapshot() #屏幕刷新
lcd.display(img) #屏幕刷新
if btnAValue():
face=baiduFace(op=1)
time.sleep(5)
baiduFace(op=2, token=face['face_token'], group="group", name="name") #添加人臉到組別
if btnBValue():
face=baiduFace(op=1)
time.sleep(5)
result=baiduFace(op=3, token=face['face_token'], group="name") #在組別搜尋人臉
print("Name: "+faceResult['result']['user_list'][0]['user_id'])
print("Confidence: "+str(faceResult['result']['user_list'][0]['score']))Q&A
問:為什麼我KOI運行時候畫面會十分卡?
答:因為你沒有刷新屏幕,只需在程式無限運行的部分中加入刷新屏幕的程式就可以了。
問:為什麼我上傳程式到KOI之後,KOI沒有即時反應的呢?
答:因為KOI還在運行原本的程式,只需要重啟KOI(KOI左下的按鍵)就可以了。
問:KOI的4PIN接口可以用來連接其他模組嗎?
答:不可以的,接口只是作連接Microbit之用。
問:為什麼KOI的屏幕方向反了?
答:屏幕方向不會自動歸回前置鏡頭,所以假如你之前轉變過KOI屏幕方向的話,必須重新設置方向。
Last updated