AI Camera KOI Guide - 07 KOI MicroPython API

  • KOI

 Go back to Product Documents Navigation 

 Go back to KOI Documents Navigation 

 

Please refer to this page on how to utilize the various functions of the KOI using micropython.

 

Importing KOI library

from koi import *

 

Basics

LCD Orientation

lcd.rotation(0)

Changes LCD orientation.

  • 0 for front facing, 1 for back facing.

Drawing Strings

drawString(x, y, string, delay)

Draws a string on the LCD.

  • X, Y: Coordinates represent top left corner of string.
  • String: String.
  • Delay: Text duration.

Taking and showing pictures

img.save("s1.jpg")
loadImage("s1.jpg")

Taking and showing pictures.

Getting button values

btnAValue()
btnBValue()

Obtains button values.

  • Returns 1 when pressed, 0 when not pressed.

Sample Program

#/bin/python
from koi import *

from time import sleep

x = 0

lcd.rotation(2) #Change LCD orientation
sleep(1)
lcd.rotation(0) #Change LCD orientation
sleep(1)
drawString(5,5,"hello world",500) #Show String
while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue() == 1:
            img.save("s1.jpg") #Takes picture
      if btnBValue() == 1:
            loadImage("s1.jpg") #Shows picture

 

Image Classifier

Initiate Classifier

cla.reset()

Initiates the classifier.

Feature extraction

cla.addImage("tag")

Extract features and add tag.

  • tag: object name, maximum 40 items, 40 pictures

Image Classifying

cla.getImageTag()

Classify the image, returns tag.

Classifier Event Triggers

while cla.getImageTag()=='tag':
pass

Triggers an event on classification.

Saving and Loading Classifier Models

cla.save("abc.json")
cla.load("abc.json")

Save or load classifier models.

Sample Program

#Model Training
from koi import *

x=0

cla.reset() #Init classifier

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue():
            cla.addImage('apple') #Add tag
      if btnBValue():
            cla.addImage('orange') #Add tag
      if btnAValue() and btnBValue():
            cla.save('fruit.json') #Save Model
      time.sleep(0.1)

 


 

#Model Running
from koi import *

x=0
cla.reset() #init classifier
cla.load("fruit.json") #Load Model

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue():
            tag=cla.getImageTag() #Classify
            if tag=='orange':
                  print('I like oranges.')
            elif tag=='apple':
                  print('Apples are healthy.')
      time.sleep(0.1)

 

Face Detection

Classifier Event Triggers

yoloinit()

Load face model.

Track face

trackface()

Tracks the face, returns a list.

Sample Program

#/bin/python
from koi import *

x = 0
face_prop=[0,0]

yoloinit() #Load Face model
while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      r = trackface() #Tracks the face
      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)

 

Geometric Shape Tracking

Track Lines

findLines()

Find lines, returns a list.

Track Circles

findCircle(threshold)

Find circles, returns a list.

  • threshold: adjust this value to adjust sensitivity, default is 4000.

Track Rectangles

findRect(threshold)

Find rectangles, returns a list.

  • threshold: adjust this value to adjust sensitivity, default is 4000.

Sample Program

from koi import *

x=0

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue() and btnBValue():
            line_prop = findLines() #Find lines
            print(line_prop[0])
            time.sleep(0.1)
      elif btnAValue():
            circle_prop = findCircle(4000) #Find Circles
            print(circle_prop[0])
            time.sleep(0.1)
      elif btnBValue():
            rect_prop = findRects(4000) #Find Rectangles
            print(rect_prop[0])
            time.sleep(0.1)

 

Color Blob Tracking

Calibrates Color

colorCalibrate()

Calibrates color for tracking.

Finds Color Blob

findBlob()

Finds color blob, returns a list.

Finds Line

findLinearRegress()

Finds line, returns a list.

Sample Program

from koi import *

x=0

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue():
            colorCalibrate() #Color Calibration
            time.sleep(0.1)
      elif btnBValue():
            blob_prop=findBlob() # Finds Color Blob
            print(blob_prop[0])
            time.sleep(0.1)
      elif btnAValue() and btnBValue():
            line_prop=findLinearRegress() #Finds Line
            print(line_prop[0])
            time.sleep(0.1)

Barcode and QR code Recognition

QR Code Recognition

findQRCode()

Finds QR code, returns content of QR code.

Barcode Recognition

findBarcode()

Finds Barcode, returns content of barcode.

AprilTag Recognition

findAprilTag()

Finds Apriltag, returns content of Apriltag.

Sample Program

from koi import *

x=0

lcd.rotation(2)

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      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)

Voice Recognition

Record and Play

speech.recordWav('hi.wav')
speech.playWav('hi.wav')

Records and plays a wav file.

Calibrates Noise Level

speech.noiseTap()

Calibrates the noise level, mandatory before voice recognition.

Adds Voice Command

speech.addCommand('hi')

Adds a voice command.

Recognizes Voice Command

speech.getCommand()

Recognizes and returns the command.

Saves Voice Model

speech.saveClass('name.json')

Saves the voice model.

Loads Voice Model

speech.loadClass('name.json')

Loads the voice model.

Sample Program

# Rec and Play
from koi import *

x=0

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue():
            speech.recordWav('hi.wav') #Record
            time.sleep(0.1)
      if btnBValue():
            speech.playWav('hi.wav') #Play
            time.sleep(0.1)

 


 

#Voice Recognition
from koi import *

x=0

speech.noiseTap() #Calibrate

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue():
            speech.addCommand("hello") #Add command
            time.sleep(0.1)
      if btnBValue():
            speech.addCommand("bye") #Add command
            time.sleep(0.1)
      if btnAValue() and btnBValue():
            print(speech.getCommand()) #Recognize
            time.sleep(0.1)

IoT

Connecting to WiFi

wifi.joinap(str("apname"),str("password"))

Connects to WiFi.

IP Address

wifi.ipaddr()

Return IP address.

Connects to MQTT Broker.

wifi.mqtthost(host)

Connects to MQTT Broker.

  • host: MQTT host address

Subscribes Topic

wifi.mqttsub(topic)

Connects to MQTT Broker.

  • topic: topic to subscribe

Publishes Message to Topic

wifi.mqttsub(topic, message)

Publishes a message to topic.

  • topic: topic to publish.
  • message: message to publish.

Reads MQTT message

wifi.mqttread(topic)

Reads topic message.

  • topic: topic to read from, returns a list.

Sample Program

from koi import *

wifi.joinap(str("apname"),str("password")) #WiFi
time.sleep(2)
print(wifi.ipaddr()) #IP
time.sleep(2)
wifi.mqtthost("127.0.0.1") #MQTT
wifi.mqttsub("test01") #Subscribe

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue():
            wifi.mqttpub("test01","hello world") #Publish
      if btnBValue():
            msg=wifi.mqttread("test01") #Read
            print("Message: "+msg[0])
            print("Topic: "+msg[1])

Face Recognition

Face Recognition

face=baiduFace(op=1)

Runs face recognition once.(WiFi required)

Face Parameters

face['parameter']

Returns result from face recognition.
parameter:

  • face_token: unique face token for each face
  • location: coordinates, size of face
  • gender: gender of person
  • expression: emotion of person
  • angle: tilt angle of face
  • mask: true if person is wearing a mask
  • age: age of person

Adding Faces to a Group

baiduFace(op=2, token=face['face_token'], group="group", name="name")

Adds a face to the face group.

Searching Faces from a Group

baiduFace(op=3, token=face['face_token'], group="group")

Searches a face from a group, returns name and confidence.

Sample Program

from koi import *

wifi.joinap(str("apname"),str("password"))
time.sleep(2)

while True:
      img=sensor.snapshot() #Enables screen refresh
      lcd.display(img) #Enables screen refresh
      if btnAValue():
            face=baiduFace(op=1)
            time.sleep(5)
            baiduFace(op=2, token=face['face_token'], group="group", name="name") #add face
      if btnBValue():
            face=baiduFace(op=1)
            time.sleep(5)
            result=baiduFace(op=3, token=face['face_token'], group="name") #search face
            print("Name: "+faceResult['result']['user_list'][0]['user_id'])
            print("Confidence: "+str(faceResult['result']['user_list'][0]['score']))

 

Q&A

Q1: KOI’s display is laggy.

A1: Please enable the screen refresh.

Q2: KOI does not run the program I uploaded.

A2: Please restart the KOI because it was still running the original main.py.

Q3: Can I connect other modules using the 4-Pin Port?

A3: No, this port is for connecting to Micro:bit only.

Q4: KOI’s LCD is reversed.

A4: Please use the LCD orientation command.

 

If you have any question, please feel free to contact us at Discord, we will always be there to help.

 

KittenBot Team

 

 Go back to Product Documents Navigation 

 Go back to KOI Documents Navigation 

Leave a comment

Please note, comments need to be approved before they are published.

SUBHEADING

Blog posts