tof — pilote de capteur temps de vol

Le module tof pilote les capteurs de mesure de distance temps de vol (ToF) connectés à une OpenMV Cam via I2C. Chaque trame renvoie une valeur de profondeur par pixel en millimètres pour une grille de zones 8x8 (VL53L5CX / VL53L8CX), qui peut être rendue comme une image de profondeur autonome avec snapshot() ou composée sur une trame en lumière visible provenant du capteur CSI avec draw_depth(), normalement via une palette de couleurs telle que image.PALETTE_DEPTH.

Exemple d’utilisation

import csi
import tof

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

tof.init()

while True:
    img = csi0.snapshot()
    depth, depth_min, depth_max = tof.read_depth()
    tof.draw_depth(img, depth)
    print("====================")
    print("Min depth in mm seen: %0.2f" % depth_min)
    print("Max depth in mm seen: %0.2f" % depth_max)

Si vous souhaitez faire pivoter le tableau/l’image de profondeur par multiples de 90 degrés, passez les combinaisons hmirror/vflip/transpose suivantes à read_depth, draw_depth ou snapshot :

  • vflip=False, hmirror=False, transpose=False -> rotation de 0 degré

  • vflip=True,  hmirror=False, transpose=True -> rotation de 90 degrés

  • vflip=True,  hmirror=True,  transpose=False -> rotation de 180 degrés

  • vflip=False, hmirror=True,  transpose=True -> rotation de 270 degrés

Fonctions

tof.init(type: int = -1) None

Initialise un capteur de profondeur embarqué.

type indique le type de capteur TOF :

Par défaut, type vaut -1, ce qui amène tof.init() à scanner et initialiser automatiquement un capteur TOF connecté en fonction de l’adresse I2C.

tof.reset() None

Réinitialise l’état du capteur de profondeur.

tof.deinit() None

Désinitialise le capteur de profondeur en libérant les ressources.

tof.width() int

Renvoie la largeur (résolution horizontale) du capteur de profondeur utilisé. Lève une RuntimeError si le capteur n’est pas initialisé.

tof.height() int

Renvoie la hauteur (résolution verticale) du capteur de profondeur utilisé. Lève une RuntimeError si le capteur n’est pas initialisé.

tof.type() int

Renvoie le type du capteur de profondeur utilisé :

Lève une RuntimeError si le capteur n’est pas initialisé.

tof.refresh() int

Renvoie la fréquence de rafraîchissement (en Hz) du capteur de profondeur utilisé :

Lève une RuntimeError si le capteur n’est pas initialisé.

tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]

Renvoie un tuple contenant la liste des profondeurs (width * height flottants en mm), la profondeur minimale observée et la profondeur maximale observée.

hmirror si True effectue un miroir horizontal du tableau de profondeur.

vflip si True retourne verticalement le tableau de profondeur.

transpose si True transpose le tableau de profondeur.

timeout nombre de millisecondes à attendre pour la nouvelle trame avant de lever une RuntimeError. Si 0, attend indéfiniment.

tof.draw_depth(image: image.Image, depth: List[float], x: int = 0, y: int = 0, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int = image.PALETTE_DEPTH, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None

Dessine un tableau depth (tel que renvoyé par read_depth) sur image, dont le coin supérieur gauche commence à l’emplacement x, y.

x_scale contrôle le facteur de mise à l’échelle de l’image affichée dans la direction x (flottant). Si cette valeur est négative, l’image sera retournée horizontalement. Si elle n’est pas spécifiée, elle correspond à y_scale pour préserver le rapport d’aspect.

y_scale contrôle le facteur de mise à l’échelle de l’image affichée dans la direction y (flottant). Si cette valeur est négative, l’image sera retournée verticalement. Si elle n’est pas spécifiée, elle correspond à x_scale pour préserver le rapport d’aspect.

roi est le tuple rectangle de la région d’intérêt (x, y, w, h) du tableau de profondeur source à dessiner.

rgb_channel est le canal RGB (0=R, 1=G, 2=B) à extraire de la source. -1 (par défaut) utilise tous les canaux.

alpha contrôle la proportion de la source mélangée dans l’image de destination. 255 est opaque, 0 n’entraîne aucune modification. Plage : 0-255.

color_palette est une énumération de palette de couleurs (par ex. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) ou une image RGB565 de 256 pixels utilisée comme table de correspondance de couleurs sur la valeur de profondeur en niveaux de gris.

alpha_palette si elle n’est pas None est une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha modulant alpha par pixel.

hint est un OU logique de :

scale est un tuple à deux valeurs (min, max) contrôlant la profondeur minimale et maximale (en mm) utilisée pour mettre à l’échelle l’image de profondeur. Par défaut, les valeurs min et max réelles du tableau de profondeur.

Note

read_depth mémorise s’il a été appelé avec transpose=True, et draw_depth l’utilise en interne pour dimensionner le tableau source.

tof.snapshot(hmirror: bool = False, vflip: bool = False, transpose: bool = False, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int = image.PALETTE_DEPTH, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None, pixformat: int = image.RGB565, copy_to_fb: bool = False, timeout: int = 100) image.Image

Lit une trame du capteur de profondeur et renvoie un nouvel objet image.Image qui est soit image.GRAYSCALE, soit image.RGB565.

hmirror si True effectue un miroir horizontal de la nouvelle image.

vflip si True retourne verticalement la nouvelle image.

transpose si True transpose la nouvelle image.

x_scale contrôle le facteur de mise à l’échelle de l’image dans la direction x (flottant). Les valeurs négatives provoquent un retournement horizontal. Si elle n’est pas spécifiée, elle correspond à y_scale.

y_scale contrôle le facteur de mise à l’échelle de l’image dans la direction y (flottant). Les valeurs négatives provoquent un retournement vertical. Si elle n’est pas spécifiée, elle correspond à x_scale.

roi est le tuple rectangle de la région d’intérêt (x, y, w, h) de la source à extraire.

rgb_channel est le canal RGB (0=R, 1=G, 2=B) à extraire. -1 (par défaut) utilise tous les canaux.

alpha contrôle le mélange source-vers-destination. 255 est opaque, 0 laisse la destination inchangée. Plage : 0-255.

color_palette est une énumération de palette de couleurs (par ex. image.PALETTE_DEPTH) ou une image RGB565 de 256 pixels utilisée comme table de correspondance de couleurs.

alpha_palette si elle n’est pas None est une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha.

hint est un OU logique de :

scale est un tuple à deux valeurs (min, max) contrôlant la profondeur minimale et maximale (en mm) utilisée pour mettre à l’échelle l’image. Par défaut, les valeurs min/max réelles de la trame.

pixformat contrôle le format de pixel final de l’image. Doit être image.GRAYSCALE ou image.RGB565.

copy_to_fb si True écrit la nouvelle image dans le tampon d’image au lieu de l’allouer sur le tas MicroPython.

timeout nombre de millisecondes à attendre pour la nouvelle trame avant de lever une RuntimeError. Si 0, attend indéfiniment.

Constantes

tof.TOF_VL53LX: int

Capteur TOF VL53L5CX ou VL53L8CX (8x8 pixels).