tof — drivrutin för time-of-flight-sensor¶
Modulen tof driver time-of-flight-avståndssensorer (ToF) som är anslutna till en OpenMV Cam över I2C. Varje bildruta returnerar ett djupvärde per pixel i millimeter för ett 8x8-zonrutnät (VL53L5CX / VL53L8CX), som kan renderas som en fristående djupbild med snapshot() eller sammanfogas på en synligt ljus-bildruta från CSI-sensorn med draw_depth(), vanligtvis genom en färgpalett som image.PALETTE_DEPTH.
Exempel på användning:
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)
Om du vill rotera djuparrayen/-bilden i multiplar av 90 grader skickar du följande kombinationer av hmirror/vflip/transpose till read_depth, draw_depth eller snapshot:
vflip=False, hmirror=False, transpose=False-> 0 graders rotation
vflip=True, hmirror=False, transpose=True-> 90 graders rotation
vflip=True, hmirror=True, transpose=False-> 180 graders rotation
vflip=False, hmirror=True, transpose=True-> 270 graders rotation
Funktioner¶
- tof.init(type: int = -1) None¶
Initierar en inbyggd djupsensor.
typeanger typen av TOF-sensor:tof.TOF_VL53LX: 8x8 pixlar.
Som standard är
type-1vilket gör atttof.init()automatiskt söker efter och initierar en ansluten TOF-sensor baserat på I2C-adressen.
- tof.width() int¶
Returnerar bredden (horisontell upplösning) för den djupsensor som används. Utlöser ett
RuntimeErrorom sensorn inte är initierad.
- tof.height() int¶
Returnerar höjden (vertikal upplösning) för den djupsensor som används. Utlöser ett
RuntimeErrorom sensorn inte är initierad.
- tof.type() int¶
Returnerar typen av den djupsensor som används:
Utlöser ett
RuntimeErrorom sensorn inte är initierad.
- tof.refresh() int¶
Returnerar uppdateringsfrekvensen (i Hz) för den djupsensor som används:
tof.TOF_VL53LX: 15 Hz.
Utlöser ett
RuntimeErrorom sensorn inte är initierad.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
Returnerar en tupel som innehåller djuplistan (
width * heightflyttal i mm), det minsta uppmätta djupet och det största uppmätta djupet.hmirroromTruespeglar djuparrayen horisontellt.vflipomTruevänder djuparrayen vertikalt.transposeomTruetransponerar djuparrayen.timeouthur många millisekunder som ska väntas på den nya bildrutan innan ettRuntimeErrorutlöses. Om0väntas för alltid.
- 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¶
Ritar en
depth-array (som returneras avread_depth) påimagevars övre vänstra hörn börjar vid platsenx,y.x_scalestyr hur mycket den visade bilden skalas i x-riktningen (flyttal). Om detta värde är negativt vänds bilden horisontellt. Om det inte anges matchar dety_scaleför att bibehålla bildförhållandet.y_scalestyr hur mycket den visade bilden skalas i y-riktningen (flyttal). Om detta värde är negativt vänds bilden vertikalt. Om det inte anges matchar detx_scaleför att bibehålla bildförhållandet.roiär intresseområdets rektangeltupel(x, y, w, h)för den käll-djuparray som ska ritas.rgb_channelär den RGB-kanal (0=R, 1=G, 2=B) som ska extraheras från källan.-1(standard) använder alla kanaler.alphastyr hur mycket av källan som blandas in i destinationsbilden.255är ogenomskinlig,0ger ingen ändring. Intervall: 0-255.color_paletteär en färgpalettenum (t.ex.image.PALETTE_DEPTH,image.PALETTE_RAINBOW) eller en 256-pixlars RGB565-bild som används som en färguppslagstabell på det gråskalade djupvärdet.alpha_paletteom inteNoneär en 256-pixlars GRAYSCALE-bild som används som en alfauppslagstabell vilken moduleraralphaper pixel.hintär en logisk OR av:image.AREA: Använd areaskalning vid nedskalning.image.BILINEAR: Använd bilinjär skalning.image.BICUBIC: Använd bikubisk skalning.image.CENTER: Centrera bilden på destinationen.image.HMIRROR: Spegla horisontellt.image.VFLIP: Vänd vertikalt.image.TRANSPOSE: Transponera (byt x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Tillämpa rgb_channel-extraktion före skalning.image.APPLY_COLOR_PALETTE_FIRST: Tillämpa färgpalett före skalning.image.SCALE_ASPECT_KEEP: Anpassa inuti destinationen med bibehållet bildförhållande.image.SCALE_ASPECT_EXPAND: Fyll destinationen med bibehållet bildförhållande (beskär).image.SCALE_ASPECT_IGNORE: Fyll destinationen utan hänsyn till bildförhållande (sträcker ut).image.ROTATE_90: Rotera 90 grader.image.ROTATE_180: Rotera 180 grader.image.ROTATE_270: Rotera 270 grader.
scaleär en tupel med två värden(min, max)som styr det minsta och största djupet (i mm) som används för att skala djupbilden. Standardvärdet är djuparrayens faktiska min och max.Anteckning
read_depthkommer ihåg om den anropades medtranspose=Trueochdraw_depthanvänder detta internt för att dimensionera källarrayen.
- 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¶
Läser en bildruta från djupsensorn och returnerar ett nytt
image.Image-objekt som är antingenimage.GRAYSCALEellerimage.RGB565.hmirroromTruespeglar den nya bilden horisontellt.vflipomTruevänder den nya bilden vertikalt.transposeomTruetransponerar den nya bilden.x_scalestyr hur mycket bilden skalas i x-riktningen (flyttal). Negativa värden vänder horisontellt. Om det inte anges matchar dety_scale.y_scalestyr hur mycket bilden skalas i y-riktningen (flyttal). Negativa värden vänder vertikalt. Om det inte anges matchar detx_scale.roiär intresseområdets rektangeltupel(x, y, w, h)för källan som ska extraheras.rgb_channelär den RGB-kanal (0=R, 1=G, 2=B) som ska extraheras.-1(standard) använder alla kanaler.alphastyr blandning från källa till destination.255är ogenomskinlig,0lämnar destinationen oförändrad. Intervall: 0-255.color_paletteär en färgpalettenum (t.ex.image.PALETTE_DEPTH) eller en 256-pixlars RGB565-bild som används som en färguppslagstabell.alpha_paletteom inteNoneär en 256-pixlars GRAYSCALE-bild som används som en alfauppslagstabell.hintär en logisk OR av:image.AREA: Använd areaskalning vid nedskalning.image.BILINEAR: Använd bilinjär skalning.image.BICUBIC: Använd bikubisk skalning.image.CENTER: Centrera bilden på destinationen.image.HMIRROR: Spegla horisontellt.image.VFLIP: Vänd vertikalt.image.TRANSPOSE: Transponera (byt x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Tillämpa rgb_channel-extraktion före skalning.image.APPLY_COLOR_PALETTE_FIRST: Tillämpa färgpalett före skalning.image.SCALE_ASPECT_KEEP: Anpassa inuti destinationen med bibehållet bildförhållande.image.SCALE_ASPECT_EXPAND: Fyll destinationen med bibehållet bildförhållande (beskär).image.SCALE_ASPECT_IGNORE: Fyll destinationen utan hänsyn till bildförhållande (sträcker ut).image.ROTATE_90: Rotera 90 grader.image.ROTATE_180: Rotera 180 grader.image.ROTATE_270: Rotera 270 grader.
scaleär en tupel med två värden(min, max)som styr det minsta och största djupet (i mm) som används för att skala bilden. Standardvärdet är bildrutans faktiska min/max.pixformatstyr den slutliga bildens pixelformat. Måste varaimage.GRAYSCALEellerimage.RGB565.copy_to_fbomTrueskrivs den nya bilden in i bildbufferten istället för att allokeras på MicroPython-heapen.timeouthur många millisekunder som ska väntas på den nya bildrutan innan ettRuntimeErrorutlöses. Om0väntas för alltid.