9. Contrôle du MarsCamBot et reconnaissance d’images avec Python

Objectif: Faire déplacer le MarsCamBot avec Python.

Âge

14 à 18 ans

Notions abordées

Robotique, programmation avec Python, condition, boucle.

Durée

4 heures

Dispositif pédagogiques

Par groupe de 2

Matériel

Un MarsCambot, Un laptop/tablette par groupe de 2, avec connexion à Internet

Prérequis

1. Connaissances de bases de Python (voir Activité 2 - Reconnaissance d’images avec Python)
2. Avoir construit le MarsCamBot et s’y être connecté avec VNC viewer (voir Activité 4 - Construction du rover)

9.1. Reconnaissance d’image

# Necessary import
import cv2 # cv2 is used to take image from the camera
import myfunctions # myfunctions helps for taking picture and making predictions
import matplotlib.pyplot as plt # matplotlib is used to deal with images
from PIL import Image # PIL is used to deal with images
import time # time is used for making the computer wait

# Get camera object
camera_object = cv2.VideoCapture(0)
camera_object.set(cv2.CAP_PROP_BUFFERSIZE, 3)

# Initialize model
interpreter = myfunctions.initialize_model(model_path='model.tflite')

# Infinite loop
while True:
    
    # Wait for one second
    time.sleep(1)
    
    # Take image from the camera
    picture_rgb = myfunctions.take_picture(camera_object)
    
    # Predict image class
    prediction, probability = myfunctions.model_prediction(interpreter, picture_rgb)
    
    # If prediction is class 0, class is 'Tube'
    if prediction == 0:
        
        print("Je reconnais la classe 'Tube'")
        
    # If prediction is class 1, class is 'Autre'
    if prediction == 1:
        
        print("Je reconnais la classe 'Other'")
        
        # If prediction is class 2, class is 'Bord'
    if prediction == 2:
        
        print("Je reconnais la classe 'Bord'")    
Je reconnais la classe 'Other'
Je reconnais la classe 'Other'
Je reconnais la classe 'Forward'
Je reconnais la classe 'Forward'
Je reconnais la classe 'Other'
Je reconnais la classe 'Other'
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
/var/folders/2y/mv3z1v0945b60_l2bzjwpzj80000gn/T/ipykernel_83580/618073387.py in <module>
     23 
     24     # Take image from the camera
---> 25     picture_rgb = myfunctions.take_picture(camera_object)
     26 
     27     # Predict image class

~/Projects/Scientotheque/fiches-ia/ai-rover-fr/03_Image_Recognition_Python/myfunctions.py in take_picture(camera_object, input_image_size)
      9 def take_picture(camera_object, input_image_size=(224,224)):
     10 
---> 11     return_status, picture = camera_object.read()
     12 
     13     picture_rgb = cv2.cvtColor(picture, cv2.COLOR_BGR2RGB)

KeyboardInterrupt: 
# Release camera
camera_object.release()

9.2. Contrôle le rover avec la reconnaissance d’image

# Necessary import
import cv2 # cv2 is used to take image from the camera
import myfunctions # myfunctions helps for taking picture and making predictions
import matplotlib.pyplot as plt # matplotlib is used to deal with images
from PIL import Image # PIL is used to deal with images
import time # time is used for making the computer wait

# Get camera object
camera_object = cv2.VideoCapture(0)
camera_object.set(cv2.CAP_PROP_BUFFERSIZE, 3)

# Initialize model
interpreter = myfunctions.initialize_model(model_path='model.tflite')

# Infinite loop
while True:
    
    # Wait for one second
    time.sleep(1)
    
    # Take image from the camera
    picture_rgb = myfunctions.take_picture(camera_object)
    
    # Predict image class
    prediction, probability = myfunctions.model_prediction(interpreter, picture_rgb)
    
    # If prediction is class 0, class is 'Tube'
    if prediction == 0:
        
        print("Je reconnais la classe 'Tube'")
        
    # If prediction is class 1, class is 'Autre'
    if prediction == 1:
        
        print("Je reconnais la classe 'Other'")
        
        # If prediction is class 2, class is 'Bord'
    if prediction == 2:
        
        print("Je reconnais la classe 'Bord'")    
    
# Release camera
camera_object.release()

9.3. Aller plus loin

  • Ajoute des classes avec des images de flèches vers la droite ou la gauche pour faire tourner la tortue à droite ou à gauche

  • Fais un classificateur qui utilise l’image de tube sur sol martien, et pour faire avancer la tortue si aucun tube n’est détecté, et fais s’arrêter la tortue lorsqu’un tube est détecté

9.4. Ressources utiles

  • Documentation pour la tortue Python: https://docs.python.org/fr/3/library/turtle.html

9.5. Notes sur les objectifs pédagogiques

Référentiel FMTTN:

  1. Lire un algorithme simple

  2. Écrire un algorithme simple

  3. Lire un programme simple

  4. Écrire un programme simple

  5. Identifier des éléments relatifs à la programmation et aux logigrammes.|