tof — driver pentru senzor time-of-flight¶
Modulul tof acționează senzorii de distanță time-of-flight (ToF) atașați la o OpenMV Cam prin I2C. Fiecare cadru returnează o valoare de adâncime per pixel în milimetri pentru o grilă de zone 8x8 (VL53L5CX / VL53L8CX), care poate fi redată ca imagine de adâncime de sine stătătoare cu snapshot() sau compusă peste un cadru în lumină vizibilă de la senzorul CSI cu draw_depth(), în mod normal printr-o paletă de culori precum image.PALETTE_DEPTH.
Exemplu de utilizare:
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)
Dacă doriți să rotiți matricea/imaginea de adâncime cu multipli de 90 de grade, transmiteți următoarele combinații hmirror/vflip/transpose către read_depth, draw_depth sau snapshot:
vflip=False, hmirror=False, transpose=False-> rotație de 0 grade
vflip=True, hmirror=False, transpose=True-> rotație de 90 de grade
vflip=True, hmirror=True, transpose=False-> rotație de 180 de grade
vflip=False, hmirror=True, transpose=True-> rotație de 270 de grade
Funcții¶
- tof.init(type: int = -1) None¶
Inițializează un senzor de adâncime de pe placă.
typeindică tipul senzorului TOF:tof.TOF_VL53LX: 8x8 pixeli.
În mod implicit
typeeste-1, ceea ce face catof.init()să scaneze și să inițializeze automat un senzor TOF atașat pe baza adresei I2C.
- tof.width() int¶
Returnează lățimea (rezoluția orizontală) a senzorului de adâncime utilizat. Generează o eroare
RuntimeErrordacă senzorul nu este inițializat.
- tof.height() int¶
Returnează înălțimea (rezoluția verticală) a senzorului de adâncime utilizat. Generează o eroare
RuntimeErrordacă senzorul nu este inițializat.
- tof.type() int¶
Returnează tipul senzorului de adâncime utilizat:
Generează o eroare
RuntimeErrordacă senzorul nu este inițializat.
- tof.refresh() int¶
Returnează rata de reîmprospătare (în Hz) a senzorului de adâncime utilizat:
tof.TOF_VL53LX: 15 Hz.
Generează o eroare
RuntimeErrordacă senzorul nu este inițializat.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
Returnează un tuplu care conține lista de adâncimi (
width * heightnumere zecimale în mm), adâncimea minimă observată și adâncimea maximă observată.hmirrordacă esteTrueoglindește orizontal matricea de adâncime.vflipdacă esteTrueîntoarce vertical matricea de adâncime.transposedacă esteTruetranspune matricea de adâncime.timeoutcâte milisecunde să aștepte noul cadru înainte de a genera o eroareRuntimeError. Dacă este0așteaptă la nesfârșit.
- 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¶
Desenează o matrice
depth(așa cum este returnată deread_depth) peimage, al cărei colț din stânga sus începe la locațiax,y.x_scalecontrolează cât de mult este scalată imaginea afișată pe direcția x (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă orizontal. Dacă nu este specificată, se potrivește cuy_scalepentru a menține raportul de aspect.y_scalecontrolează cât de mult este scalată imaginea afișată pe direcția y (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă vertical. Dacă nu este specificată, se potrivește cux_scalepentru a menține raportul de aspect.roieste tuplul dreptunghiular al regiunii de interes(x, y, w, h)din matricea de adâncime sursă de desenat.rgb_channeleste canalul RGB (0=R, 1=G, 2=B) de extras din sursă.-1(implicit) utilizează toate canalele.alphacontrolează cât de mult din sursă este amestecat în imaginea de destinație.255este opac,0nu produce nicio modificare. Interval: 0-255.color_paletteeste o enumerare de paletă de culori (de ex.image.PALETTE_DEPTH,image.PALETTE_RAINBOW) sau o imagine RGB565 de 256 de pixeli utilizată ca tabel de căutare a culorilor pe valoarea de adâncime în tonuri de gri.alpha_palettedacă nu esteNoneeste o imagine GRAYSCALE de 256 de pixeli utilizată ca tabel de căutare alfa care moduleazăalphala nivel de pixel.hinteste un SAU logic între:image.AREA: Utilizează scalarea pe arie la reducerea dimensiunii.image.BILINEAR: Utilizează scalarea biliniară.image.BICUBIC: Utilizează scalarea bicubică.image.CENTER: Centrează imaginea pe destinație.image.HMIRROR: Oglindește orizontal.image.VFLIP: Întoarce vertical.image.TRANSPOSE: Transpune (interschimbă x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplică extragerea rgb_channel înainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplică paleta de culori înainte de scalare.image.SCALE_ASPECT_KEEP: Încadrează în destinație păstrând raportul de aspect.image.SCALE_ASPECT_EXPAND: Umple destinația păstrând raportul de aspect (decupează).image.SCALE_ASPECT_IGNORE: Umple destinația ignorând raportul de aspect (întinde).image.ROTATE_90: Rotește cu 90 de grade.image.ROTATE_180: Rotește cu 180 de grade.image.ROTATE_270: Rotește cu 270 de grade.
scaleeste un tuplu cu două valori(min, max)care controlează adâncimea minimă și maximă (în mm) utilizată pentru a scala imaginea de adâncime. Implicit este min și max real al matricei de adâncime.Notă
read_depthreține dacă a fost apelată cutranspose=True, iardraw_depthutilizează acest lucru intern pentru a dimensiona matricea sursă.
- 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¶
Citește un cadru de la senzorul de adâncime și returnează un nou obiect
image.Imagecare este fieimage.GRAYSCALE, fieimage.RGB565.hmirrordacă esteTrueoglindește orizontal noua imagine.vflipdacă esteTrueîntoarce vertical noua imagine.transposedacă esteTruetranspune noua imagine.x_scalecontrolează cât de mult este scalată imaginea pe direcția x (număr zecimal). Valorile negative întorc orizontal. Dacă nu este specificată, se potrivește cuy_scale.y_scalecontrolează cât de mult este scalată imaginea pe direcția y (număr zecimal). Valorile negative întorc vertical. Dacă nu este specificată, se potrivește cux_scale.roieste tuplul dreptunghiular al regiunii de interes(x, y, w, h)din sursă de extras.rgb_channeleste canalul RGB (0=R, 1=G, 2=B) de extras.-1(implicit) utilizează toate canalele.alphacontrolează amestecarea de la sursă la destinație.255este opac,0lasă destinația neschimbată. Interval: 0-255.color_paletteeste o enumerare de paletă de culori (de ex.image.PALETTE_DEPTH) sau o imagine RGB565 de 256 de pixeli utilizată ca tabel de căutare a culorilor.alpha_palettedacă nu esteNoneeste o imagine GRAYSCALE de 256 de pixeli utilizată ca tabel de căutare alfa.hinteste un SAU logic între:image.AREA: Utilizează scalarea pe arie la reducerea dimensiunii.image.BILINEAR: Utilizează scalarea biliniară.image.BICUBIC: Utilizează scalarea bicubică.image.CENTER: Centrează imaginea pe destinație.image.HMIRROR: Oglindește orizontal.image.VFLIP: Întoarce vertical.image.TRANSPOSE: Transpune (interschimbă x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplică extragerea rgb_channel înainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplică paleta de culori înainte de scalare.image.SCALE_ASPECT_KEEP: Încadrează în destinație păstrând raportul de aspect.image.SCALE_ASPECT_EXPAND: Umple destinația păstrând raportul de aspect (decupează).image.SCALE_ASPECT_IGNORE: Umple destinația ignorând raportul de aspect (întinde).image.ROTATE_90: Rotește cu 90 de grade.image.ROTATE_180: Rotește cu 180 de grade.image.ROTATE_270: Rotește cu 270 de grade.
scaleeste un tuplu cu două valori(min, max)care controlează adâncimea minimă și maximă (în mm) utilizată pentru a scala imaginea. Implicit este min/max real al cadrului.pixformatcontrolează formatul final al pixelilor imaginii. Trebuie să fieimage.GRAYSCALEsauimage.RGB565.copy_to_fbdacă esteTruescrie noua imagine în tamponul de cadre în loc să o aloce pe heap-ul MicroPython.timeoutcâte milisecunde să aștepte noul cadru înainte de a genera o eroareRuntimeError. Dacă este0așteaptă la nesfârșit.