tof — controlador de sensor time-of-flight¶
O módulo tof controla sensores de distância time-of-flight (ToF) ligados a uma OpenMV Cam via I2C. Cada fotograma devolve um valor de profundidade por pixel em milímetros para uma grelha de zonas 8x8 (VL53L5CX / VL53L8CX), que pode ser apresentada como imagem de profundidade autónoma com snapshot() ou composta sobre um fotograma de luz visível do sensor CSI com draw_depth(), normalmente através de uma paleta de cores como image.PALETTE_DEPTH.
Exemplo de utilização:
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)
Para rodar o array/imagem de profundidade em múltiplos de 90 graus, passe as seguintes combinações de hmirror/vflip/transpose a read_depth, draw_depth ou snapshot:
vflip=False, hmirror=False, transpose=False-> rotação de 0 graus
vflip=True, hmirror=False, transpose=True-> rotação de 90 graus
vflip=True, hmirror=True, transpose=False-> rotação de 180 graus
vflip=False, hmirror=True, transpose=True-> rotação de 270 graus
Funções¶
- tof.init(type: int = -1) None¶
Inicializa um sensor de profundidade integrado.
typeindica o tipo de sensor TOF:tof.TOF_VL53LX: 8x8 pixels.
Por predefinição,
typeé-1, o que faz com quetof.init()procure e inicialize automaticamente um sensor TOF ligado com base no endereço I2C.
- tof.width() int¶
Devolve a largura (resolução horizontal) do sensor de profundidade em uso. Lança um
RuntimeErrorse o sensor não estiver inicializado.
- tof.height() int¶
Devolve a altura (resolução vertical) do sensor de profundidade em uso. Lança um
RuntimeErrorse o sensor não estiver inicializado.
- tof.type() int¶
Devolve o tipo de sensor de profundidade em uso:
Lança um
RuntimeErrorse o sensor não estiver inicializado.
- tof.refresh() int¶
Devolve a taxa de atualização (em Hz) do sensor de profundidade em uso:
tof.TOF_VL53LX: 15 Hz.
Lança um
RuntimeErrorse o sensor não estiver inicializado.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
Devolve uma tupla contendo a lista de profundidades (
width * heightvalores float em mm), a profundidade mínima observada e a profundidade máxima observada.hmirrorseTrueespelha horizontalmente o array de profundidade.vflipseTrueinverte verticalmente o array de profundidade.transposeseTruetranspõe o array de profundidade.timeoutnúmero de milissegundos a aguardar pelo novo fotograma antes de lançar umRuntimeError. Se0aguarda indefinidamente.
- 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¶
Desenha um array
depth(tal como devolvido porread_depth) sobreimage, com o canto superior esquerdo na localizaçãox,y.x_scalecontrola o fator de escala da imagem apresentada na direção x (float). Se o valor for negativo, a imagem será espelhada horizontalmente. Se não for especificado, corresponde ay_scalepara manter a proporção.y_scalecontrola o fator de escala da imagem apresentada na direção y (float). Se o valor for negativo, a imagem será espelhada verticalmente. Se não for especificado, corresponde ax_scalepara manter a proporção.roié a tupla de retângulo de região de interesse(x, y, w, h)do array de profundidade de origem a desenhar.rgb_channelé o canal RGB (0=R, 1=G, 2=B) a extrair da origem.-1(predefinição) utiliza todos os canais.alphacontrola a quantidade de origem misturada na imagem de destino.255é opaco;0não produz qualquer modificação. Intervalo: 0-255.color_paletteé um enum de paleta de cores (p. ex.image.PALETTE_DEPTH,image.PALETTE_RAINBOW) ou uma imagem RGB565 de 256 pixels utilizada como tabela de consulta de cores sobre o valor de profundidade em escala de cinzentos.alpha_palettese não forNone, é uma imagem GRAYSCALE de 256 pixels utilizada como tabela de consulta de alfa que modulaalphapor pixel.hinté um OR lógico de:image.AREA: Usar escalonamento por área ao reduzir.image.BILINEAR: Usar escalonamento bilinear.image.BICUBIC: Usar escalonamento bicúbico.image.CENTER: Centrar a imagem no destino.image.HMIRROR: Espelhar horizontalmente.image.VFLIP: Inverter verticalmente.image.TRANSPOSE: Transpor (trocar x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplicar extração de rgb_channel antes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplicar paleta de cores antes do escalonamento.image.SCALE_ASPECT_KEEP: Ajustar dentro do destino mantendo a proporção.image.SCALE_ASPECT_EXPAND: Preencher o destino mantendo a proporção (corta).image.SCALE_ASPECT_IGNORE: Preencher o destino ignorando a proporção (estica).image.ROTATE_90: Rodar 90 graus.image.ROTATE_180: Rodar 180 graus.image.ROTATE_270: Rodar 270 graus.
scaleé uma tupla de dois valores(min, max)que controla a profundidade mínima e máxima (em mm) utilizada para escalar a imagem de profundidade. Por predefinição, corresponde ao mínimo e máximo efetivos do array de profundidade.Nota
read_depthrecorda se foi chamado comtranspose=Trueedraw_depthutiliza isso internamente para dimensionar o array de origem.
- 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ê um fotograma do sensor de profundidade e devolve um novo objeto
image.Imageque éimage.GRAYSCALEouimage.RGB565.hmirrorseTrueespelha horizontalmente a nova imagem.vflipseTrueinverte verticalmente a nova imagem.transposeseTruetranspõe a nova imagem.x_scalecontrola o fator de escala da imagem na direção x (float). Valores negativos espelham horizontalmente. Se não for especificado, corresponde ay_scale.y_scalecontrola o fator de escala da imagem na direção y (float). Valores negativos espelham verticalmente. Se não for especificado, corresponde ax_scale.roié a tupla de retângulo de região de interesse(x, y, w, h)da origem a extrair.rgb_channelé o canal RGB (0=R, 1=G, 2=B) a extrair.-1(predefinição) utiliza todos os canais.alphacontrola a mistura da origem para o destino.255é opaco;0deixa o destino inalterado. Intervalo: 0-255.color_paletteé um enum de paleta de cores (p. ex.image.PALETTE_DEPTH) ou uma imagem RGB565 de 256 pixels utilizada como tabela de consulta de cores.alpha_palettese não forNone, é uma imagem GRAYSCALE de 256 pixels utilizada como tabela de consulta de alfa.hinté um OR lógico de:image.AREA: Usar escalonamento por área ao reduzir.image.BILINEAR: Usar escalonamento bilinear.image.BICUBIC: Usar escalonamento bicúbico.image.CENTER: Centrar a imagem no destino.image.HMIRROR: Espelhar horizontalmente.image.VFLIP: Inverter verticalmente.image.TRANSPOSE: Transpor (trocar x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplicar extração de rgb_channel antes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplicar paleta de cores antes do escalonamento.image.SCALE_ASPECT_KEEP: Ajustar dentro do destino mantendo a proporção.image.SCALE_ASPECT_EXPAND: Preencher o destino mantendo a proporção (corta).image.SCALE_ASPECT_IGNORE: Preencher o destino ignorando a proporção (estica).image.ROTATE_90: Rodar 90 graus.image.ROTATE_180: Rodar 180 graus.image.ROTATE_270: Rodar 270 graus.
scaleé uma tupla de dois valores(min, max)que controla a profundidade mínima e máxima (em mm) utilizada para escalar a imagem. Por predefinição, corresponde ao mínimo/máximo efetivo do fotograma.pixformatcontrola o formato de pixel da imagem final. Deve serimage.GRAYSCALEouimage.RGB565.copy_to_fbseTrueescreve a nova imagem no buffer de fotograma em vez de a alocar na heap do MicroPython.timeoutnúmero de milissegundos a aguardar pelo novo fotograma antes de lançar umRuntimeError. Se0aguarda indefinidamente.