from sense_hat import SenseHat
from time import sleep
import threading
# Our new APIs:
import vision
from bestiary import Chirp

# initialize SenseHat instance and clear the LED matrix
sense = SenseHat()
sense.set_pixels(Chirp.STANDING)

# animate the raspimon
def dance():
  sense.set_pixels(Chirp.WINGS_UP)
  sleep(0.3)
  sense.set_pixels(Chirp.STANDING)
  sleep(0.3)

# redraw the raspimon in response to detected faces
def react_to_faces(faces):
  print(len(faces), 'faces visible')
  if len(faces) > 0 and threading.active_count() == 1:
    thread = threading.Thread(target=dance)
    thread.start()

# load the neural network model (obfuscates use of TF and Edge TPU)
detector = vision.Detector(vision.FACE_DETECTION_MODEL)

# run a loop to run the model in real-time
for frame in vision.get_frames():

  faces = detector.get_objects(frame)

  # Draw bounding boxes on the frame and display it
  vision.draw_objects(frame, faces)

  # Pass faces to function that controls raspimon
  react_to_faces(faces)
