tof — upravljački program za time-of-flight senzor¶
Modul tof upravlja time-of-flight (ToF) senzorima za mjerenje udaljenosti spojenim na OpenMV Cam putem I2C-a. Svaka sličica vraća vrijednost dubine po pikselu u milimetrima za mrežu zona 8x8 (VL53L5CX / VL53L8CX), koja se može prikazati kao samostalna slika dubine pomoću snapshot() ili složiti na sličicu vidljivog svjetla s CSI senzora pomoću draw_depth(), obično kroz paletu boja kao što je image.PALETTE_DEPTH.
Primjer upotrebe:
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)
Ako želite zarotirati polje/sliku dubine za višekratnike od 90 stupnjeva, proslijedite sljedeće kombinacije hmirror/vflip/transpose funkcijama read_depth, draw_depth ili snapshot:
vflip=False, hmirror=False, transpose=False-> rotacija za 0 stupnjeva
vflip=True, hmirror=False, transpose=True-> rotacija za 90 stupnjeva
vflip=True, hmirror=True, transpose=False-> rotacija za 180 stupnjeva
vflip=False, hmirror=True, transpose=True-> rotacija za 270 stupnjeva
Funkcije¶
- tof.init(type: int = -1) None¶
Inicijalizira ugrađeni senzor dubine.
typeoznačava vrstu TOF senzora:tof.TOF_VL53LX: 8x8 piksela.
Prema zadanim postavkama
typeje-1što uzrokuje datof.init()automatski pretraži i inicijalizira spojeni TOF senzor na temelju I2C adrese.
- tof.width() int¶
Vraća širinu (vodoravnu razlučivost) senzora dubine koji se koristi. Podiže
RuntimeErrorako senzor nije inicijaliziran.
- tof.height() int¶
Vraća visinu (okomitu razlučivost) senzora dubine koji se koristi. Podiže
RuntimeErrorako senzor nije inicijaliziran.
- tof.type() int¶
Vraća vrstu senzora dubine koji se koristi:
Podiže
RuntimeErrorako senzor nije inicijaliziran.
- tof.refresh() int¶
Vraća brzinu osvježavanja (u Hz) senzora dubine koji se koristi:
tof.TOF_VL53LX: 15 Hz.
Podiže
RuntimeErrorako senzor nije inicijaliziran.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
Vraća n-torku koja sadrži listu dubina (
width * heightbrojeva s pomičnim zarezom u mm), najmanju zabilježenu dubinu i najveću zabilježenu dubinu.hmirrorako jeTruevodoravno zrcali polje dubine.vflipako jeTrueokomito preokreće polje dubine.transposeako jeTruetransponira polje dubine.timeoutkoliko milisekundi čekati na novu sličicu prije podizanjaRuntimeError. Ako je0čeka zauvijek.
- 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¶
Crta polje
depth(kao što ga vraćaread_depth) naimagečiji gornji lijevi kut počinje na lokacijix,y.x_scalekontrolira koliko se prikazana slika skalira u smjeru x (broj s pomičnim zarezom). Ako je ova vrijednost negativna, slika će se vodoravno preokrenuti. Ako nije navedena, podudara se sy_scaleradi održavanja omjera prikaza.y_scalekontrolira koliko se prikazana slika skalira u smjeru y (broj s pomičnim zarezom). Ako je ova vrijednost negativna, slika će se okomito preokrenuti. Ako nije navedena, podudara se sx_scaleradi održavanja omjera prikaza.roije n-torka pravokutnika područja interesa(x, y, w, h)izvornog polja dubine za crtanje.rgb_channelje RGB kanal (0=R, 1=G, 2=B) koji se izdvaja iz izvora.-1(zadano) koristi sve kanale.alphakontrolira koliko se izvora stapa u odredišnu sliku.255je neprozirno,0ne rezultira nikakvom izmjenom. Raspon: 0-255.color_paletteje enum palete boja (npr.image.PALETTE_DEPTH,image.PALETTE_RAINBOW) ili slika RGB565 od 256 piksela koja se koristi kao tablica za traženje boja na vrijednosti dubine u sivim tonovima.alpha_paletteako nijeNoneje slika GRAYSCALE od 256 piksela koja se koristi kao tablica za traženje alfa vrijednosti modulirajućialphapo pikselu.hintje logičko ILI od:image.AREA: Koristi skaliranje područja pri smanjivanju.image.BILINEAR: Koristi bilinearno skaliranje.image.BICUBIC: Koristi bikubično skaliranje.image.CENTER: Centrira sliku na odredištu.image.HMIRROR: Vodoravno zrcali.image.VFLIP: Okomito preokreće.image.TRANSPOSE: Transponira (zamjenjuje x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Primjenjuje izdvajanje rgb_channel prije skaliranja.image.APPLY_COLOR_PALETTE_FIRST: Primjenjuje paletu boja prije skaliranja.image.SCALE_ASPECT_KEEP: Uklapa unutar odredišta zadržavajući omjer prikaza.image.SCALE_ASPECT_EXPAND: Ispunjava odredište zadržavajući omjer prikaza (obrezuje).image.SCALE_ASPECT_IGNORE: Ispunjava odredište zanemarujući omjer prikaza (rasteže).image.ROTATE_90: Rotira za 90 stupnjeva.image.ROTATE_180: Rotira za 180 stupnjeva.image.ROTATE_270: Rotira za 270 stupnjeva.
scaleje n-torka s dvije vrijednosti(min, max)koja kontrolira najmanju i najveću dubinu (u mm) koja se koristi za skaliranje slike dubine. Zadano je stvarni min i max polja dubine.Napomena
read_depthpamti je li pozvan stranspose=Trueidraw_depthto interno koristi za određivanje veličine izvornog polja.
- 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¶
Čita sličicu sa senzora dubine i vraća novi
image.Imageobjekt koji je iliimage.GRAYSCALEiliimage.RGB565.hmirrorako jeTruevodoravno zrcali novu sliku.vflipako jeTrueokomito preokreće novu sliku.transposeako jeTruetransponira novu sliku.x_scalekontrolira koliko se slika skalira u smjeru x (broj s pomičnim zarezom). Negativne vrijednosti vodoravno preokreću. Ako nije navedeno, podudara se sy_scale.y_scalekontrolira koliko se slika skalira u smjeru y (broj s pomičnim zarezom). Negativne vrijednosti okomito preokreću. Ako nije navedeno, podudara se sx_scale.roije n-torka pravokutnika područja interesa(x, y, w, h)izvora za izdvajanje.rgb_channelje RGB kanal (0=R, 1=G, 2=B) za izdvajanje.-1(zadano) koristi sve kanale.alphakontrolira stapanje izvora u odredište.255je neprozirno,0ostavlja odredište nepromijenjeno. Raspon: 0-255.color_paletteje enum palete boja (npr.image.PALETTE_DEPTH) ili slika RGB565 od 256 piksela koja se koristi kao tablica za traženje boja.alpha_paletteako nijeNoneje slika GRAYSCALE od 256 piksela koja se koristi kao tablica za traženje alfa vrijednosti.hintje logičko ILI od:image.AREA: Koristi skaliranje područja pri smanjivanju.image.BILINEAR: Koristi bilinearno skaliranje.image.BICUBIC: Koristi bikubično skaliranje.image.CENTER: Centrira sliku na odredištu.image.HMIRROR: Vodoravno zrcali.image.VFLIP: Okomito preokreće.image.TRANSPOSE: Transponira (zamjenjuje x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Primjenjuje izdvajanje rgb_channel prije skaliranja.image.APPLY_COLOR_PALETTE_FIRST: Primjenjuje paletu boja prije skaliranja.image.SCALE_ASPECT_KEEP: Uklapa unutar odredišta zadržavajući omjer prikaza.image.SCALE_ASPECT_EXPAND: Ispunjava odredište zadržavajući omjer prikaza (obrezuje).image.SCALE_ASPECT_IGNORE: Ispunjava odredište zanemarujući omjer prikaza (rasteže).image.ROTATE_90: Rotira za 90 stupnjeva.image.ROTATE_180: Rotira za 180 stupnjeva.image.ROTATE_270: Rotira za 270 stupnjeva.
scaleje n-torka s dvije vrijednosti(min, max)koja kontrolira najmanju i najveću dubinu (u mm) koja se koristi za skaliranje slike. Zadano je stvarni min/max sličice.pixformatkontrolira konačni format piksela slike. Mora bitiimage.GRAYSCALEiliimage.RGB565.copy_to_fbako jeTruezapisuje novu sliku u međuspremnik slike umjesto da je dodjeljuje na MicroPython gomili.timeoutkoliko milisekundi čekati na novu sličicu prije podizanjaRuntimeError. Ako je0čeka zauvijek.