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é.
typeindique le type de capteur TOF :tof.TOF_VL53LX: 8x8 pixels.
Par défaut,
typevaut-1, ce qui amènetof.init()à scanner et initialiser automatiquement un capteur TOF connecté en fonction de l’adresse I2C.
- tof.width() int¶
Renvoie la largeur (résolution horizontale) du capteur de profondeur utilisé. Lève une
RuntimeErrorsi le capteur n’est pas initialisé.
- tof.height() int¶
Renvoie la hauteur (résolution verticale) du capteur de profondeur utilisé. Lève une
RuntimeErrorsi le capteur n’est pas initialisé.
- tof.type() int¶
Renvoie le type du capteur de profondeur utilisé :
Lève une
RuntimeErrorsi le capteur n’est pas initialisé.
- tof.refresh() int¶
Renvoie la fréquence de rafraîchissement (en Hz) du capteur de profondeur utilisé :
tof.TOF_VL53LX: 15 Hz.
Lève une
RuntimeErrorsi 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 * heightflottants en mm), la profondeur minimale observée et la profondeur maximale observée.hmirrorsiTrueeffectue un miroir horizontal du tableau de profondeur.vflipsiTrueretourne verticalement le tableau de profondeur.transposesiTruetranspose le tableau de profondeur.timeoutnombre de millisecondes à attendre pour la nouvelle trame avant de lever uneRuntimeError. Si0, 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é parread_depth) surimage, dont le coin supérieur gauche commence à l’emplacementx,y.x_scalecontrô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_scalepour préserver le rapport d’aspect.y_scalecontrô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_scalepour préserver le rapport d’aspect.roiest le tuple rectangle de la région d’intérêt(x, y, w, h)du tableau de profondeur source à dessiner.rgb_channelest le canal RGB (0=R, 1=G, 2=B) à extraire de la source.-1(par défaut) utilise tous les canaux.alphacontrôle la proportion de la source mélangée dans l’image de destination.255est opaque,0n’entraîne aucune modification. Plage : 0-255.color_paletteest 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_palettesi elle n’est pasNoneest une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha modulantalphapar pixel.hintest un OU logique de :image.AREA: Utilise la mise à l’échelle par surface lors de la réduction.image.BILINEAR: Utilise la mise à l’échelle bilinéaire.image.BICUBIC: Utilise la mise à l’échelle bicubique.image.CENTER: Centre l’image sur la destination.image.HMIRROR: Miroir horizontal.image.VFLIP: Retournement vertical.image.TRANSPOSE: Transposition (échange x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Applique l’extraction de rgb_channel avant la mise à l’échelle.image.APPLY_COLOR_PALETTE_FIRST: Applique la palette de couleurs avant la mise à l’échelle.image.SCALE_ASPECT_KEEP: Ajuste à l’intérieur de la destination en préservant le rapport d’aspect.image.SCALE_ASPECT_EXPAND: Remplit la destination en préservant le rapport d’aspect (rogne).image.SCALE_ASPECT_IGNORE: Remplit la destination en ignorant le rapport d’aspect (étire).image.ROTATE_90: Rotation de 90 degrés.image.ROTATE_180: Rotation de 180 degrés.image.ROTATE_270: Rotation de 270 degrés.
scaleest 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_depthmémorise s’il a été appelé avectranspose=True, etdraw_depthl’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.Imagequi est soitimage.GRAYSCALE, soitimage.RGB565.hmirrorsiTrueeffectue un miroir horizontal de la nouvelle image.vflipsiTrueretourne verticalement la nouvelle image.transposesiTruetranspose la nouvelle image.x_scalecontrô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_scalecontrô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.roiest le tuple rectangle de la région d’intérêt(x, y, w, h)de la source à extraire.rgb_channelest le canal RGB (0=R, 1=G, 2=B) à extraire.-1(par défaut) utilise tous les canaux.alphacontrôle le mélange source-vers-destination.255est opaque,0laisse la destination inchangée. Plage : 0-255.color_paletteest 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_palettesi elle n’est pasNoneest une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha.hintest un OU logique de :image.AREA: Utilise la mise à l’échelle par surface lors de la réduction.image.BILINEAR: Utilise la mise à l’échelle bilinéaire.image.BICUBIC: Utilise la mise à l’échelle bicubique.image.CENTER: Centre l’image sur la destination.image.HMIRROR: Miroir horizontal.image.VFLIP: Retournement vertical.image.TRANSPOSE: Transposition (échange x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Applique l’extraction de rgb_channel avant la mise à l’échelle.image.APPLY_COLOR_PALETTE_FIRST: Applique la palette de couleurs avant la mise à l’échelle.image.SCALE_ASPECT_KEEP: Ajuste à l’intérieur de la destination en préservant le rapport d’aspect.image.SCALE_ASPECT_EXPAND: Remplit la destination en préservant le rapport d’aspect (rogne).image.SCALE_ASPECT_IGNORE: Remplit la destination en ignorant le rapport d’aspect (étire).image.ROTATE_90: Rotation de 90 degrés.image.ROTATE_180: Rotation de 180 degrés.image.ROTATE_270: Rotation de 270 degrés.
scaleest 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.pixformatcontrôle le format de pixel final de l’image. Doit êtreimage.GRAYSCALEouimage.RGB565.copy_to_fbsiTrueécrit la nouvelle image dans le tampon d’image au lieu de l’allouer sur le tas MicroPython.timeoutnombre de millisecondes à attendre pour la nouvelle trame avant de lever uneRuntimeError. Si0, attend indéfiniment.