# Programming with MicroPython: KOI

### Import KOI Library

Import KOI library to make use of its functions.

```
from futureKOI import KOI
```

### KOI Basic Operations

#### Initiate KOI

```
koi = KOI(tx='P2',rx='P12',id=1)
```

Initiates the KOI port.

* tx: Tx Pin, use P2 for Robotbit Edu.
* rx: Rx Pin, use P12 for Robotbit Edu.

#### Set KOI Camera Orientation

```
# available modes
# 0,2

koi.screen_mode(mode, cmd='K6')
```

Sets the KOI camera orientation.

* mode: 0 for front, 2 for back

#### Display text

```
koi.text(x, y, delay, text, cmd="K4")
```

Displays a text on the KOI screen.

* x: X coordinate of the text.
* y: Y coordinate of the text.
* delay: Duration of the text in ms.
* text: The string to be displayed.

#### KOI Screen Capture

```
koi.screen_save(pic , cmd="K2")
```

Captures the screen and save to SD card.

* pic: Filename on the SD card in jpg format.

#### KOI Displays JPG

```
koi.screen_show(pic, cmd="K1")
```

Displays a jpg on the screen.

* pic: Filename on the SD card in jpg format.

### Face Detection

#### Load Face Yolo

```
koi.face_yolo_load(cmd="K30")
```

Loads the face yolo model.

#### Single Face Detection

```
x = koi.face_detect(cmd="K31")
```

Runs the single face detection.

#### Obtain Face Coordinates

```
koi.get_re(cmd="K31")[0]  #x
koi.get_re(cmd="K31")[1]  #y
```

Returns the X or Y coordinate of the face detected.

#### Multi Face Detection

```
koi.face_count(cmd="K32")
```

Runs the multi face detection.

#### Obtain Number of Faces

```
koi.get_re(cmd="K32")[0]
```

Returns the number of faces detected.

### Face Detection Sample Program

```
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)
```

### Machine Learning Image Classifier

#### Initiate Image Classifier

```
koi.init_cls()
```

Starts image classifier mode.

#### Save the Classifier Model

```
koi.cls_save_model(model,cmd="K43")
```

Saves the model to the SD Card.

* model: The filename on the SD card.

#### Load a Classifier Model

```
koi.cls_load_model(model="abc.json",cmd="K44")
```

Loads the model from the SD Card.

* model: The filename on the SD card.

#### Classifier Add Tag

```
koi.cls_add_tag(tag,cmd="K41")
```

Add an image tag.

* tag: Name of the tag.

#### Run Image Classifier

```
koi.cls_run(cmd="K42")
```

Returns the tag for the classified object.

### KOI Classifier Model Training Sample Program

```
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 Image Classification Sample Program

```
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()
```

### Colour Blob and Line Tracking

#### Calibrate a Colour to Track

```
koi.color_cali(name ,cmd="K16")
```

Calibrates a colour to track.

* name: The name for this colour.

#### Tracks a Colour Blob

```
koi.color_tracking(name="name", cmd="K15")
# returns [cx,cy,w,h,name]
```

Returns a list containing the values of the colour blob.

* name: the name of the colour to track.

#### Obtain Colour Blob Values

```
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
```

Returns the specific value of the colour blob.

### Blob Detection Sample Program

```
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)
```

#### Tracks a line

```
koi.line_tracking(name ,cmd="K12")
# returns [x1, y1, x2, y2, name]
```

Returns a list containing the values of the line.

* name: the name of the colour to track.

#### Obtain Line Values

```
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
```

Returns the specific value of the line.

### Line Detection Sample Program

```
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)
```

### Shape Detection

#### Circle Detection

```
koi.circle_detect(threshold, cmd="K10")
```

Runs the circle detection.

* threshold: The threshold for circle, typical value is about 2000, adjust to achieve best results.

#### Obtain Circle Values

```
koi.get_re(cmd="K10")[0] #cx
koi.get_re(cmd="K10")[1] #cy
koi.get_re(cmd="K10")[2] #r
```

Returns the specific value of the circle.

#### Rectangle Detection

```
 koi.rectangle_detect(th=4000,cmd="K11")
```

Runs the rectangle detection.

* threshold: The threshold for rectangle, typical value is about 1000, adjust to achieve best results.

#### Obtain Rectangle Values

```
koi.get_re(cmd="K11")[0]
koi.get_re(cmd="K11")[1]
koi.get_re(cmd="K11")[2]
koi.get_re(cmd="K11")[3]
```

Returns the specific value of the rectangle.

### Shape Detection Sample Program

```
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)
```

### Code Scanner

#### QR Code Scanner

```
koi.scan_qrcode(cmd="K20")
```

Returns the QR Code data.

#### Barcode Scanner

```
koi.scan_barcode(cmd="K22")
```

Returns the Barcode data.

#### Apriltag Scanner

```
koi.scan_Apriltag(cmd="K23")
```

Runs the scanner for Apriltag.

#### Obtains Apriltag data

```
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
```

Returns the specific data of the Apriltag.

### Code Scanner Sample Program

```
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))
```

### Wifi Connection

#### Connect to Wifi

```
koi.connect_wifi(router ,pwd ,cmd="K50")
```

Connects to a Wifi network.

* router: The SSID.
* pwd: The password.

#### Displays IP Address

```
koi.get_ip(cmd="K54")
```

Displays the IP Address.

### BaiduAI

#### BaiduAI Face Recognition

```
koi.baiduAI_face_detect(cmd="K75")
# returns [face token, age, sex, mask, emotion]
```

Returns a list of values from the BaiduAI Face Recognition.

#### BaiduAI Face Token

```
koi.get_re(cmd="K75")[0]
```

Returns the face token.

#### BaiduAI Add Face to Group

```
koi.baiduAI_face_add(face_token="token" ,groupName="group" ,faceName="name" ,cmd="K76")
```

Adds the face token to a group.

* face\_token: The token to be added.
* groupName: The group name.
* faceName: The name of the person.

#### BaiduAI Search Face in Group

```
koi.baiduAI_face_search(face_token="token" ,groupName="group" ,cmd="K77")[0]
```

Searches the face in a group and returns the person name.

* face\_token: The token to be searched.
* groupName: The group name.

#### BaiduAi Text to Speech

```
koi.baiduAI_tts(text ,cmd="K78")
```

Generates a speech using BaiduAI.

-text: The text to be spoken.

### Wifi and Baidu TTS Sample Program

```
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)
```

### Audio

#### Record Wav File

```
koi.audio_record(name)
```

Record and saves the wav file to the SD card.

* name: The file name in wav format.

#### Play Wav File

```
koi.audio_play(name)
```

Plays a wav file from the SD card.

* name: The file name in wav format.

#### Calibrate Ambient Noise

```
koi.audio_noisetap()
```

Calibrates the ambient noise for speech recognition.

#### Speech Recognition Add Tag

```
koi.speech_add_tag(tag)
```

Adds a speech tag.

* tag: The tag name.

#### Get Speech Recognition Tag

```
koi.speech_run(cmd="K65")
```

Runs the speech recognition and returns the tag.

#### Save Speech Model

```
koi.speech_save_model(file)
```

Saves the speech model to the SD card.

* file: The filename.

#### Load Speech Model

```
koi.speech_load_model(file)
```

Loads a speech model.

* file: The filename.

### Speech Recognition Training Sample Program

```
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()
```

### Speech Recognition Sample Program

```
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()
```

### Miscellaneous

#### Reset KOI

```
koi.reset(cmd='k99')
```

Resets the KOI.

#### Stop Classifier and Face Yolo

```
koi.stop_kpu(cmd='k98')
```

Stops the KPU from running Classifier and Face Yolo.
