tof --- Trình điều khiển cảm biến đo khoảng cách bằng thời gian bay¶
Mô-đun tof điều khiển các cảm biến đo khoảng cách time-of-flight (ToF) được gắn vào OpenMV Cam qua I2C. Mỗi khung hình trả về giá trị độ sâu theo điểm ảnh tính bằng milimet cho lưới 8x8 vùng (VL53L5CX / VL53L8CX), có thể được hiển thị như ảnh độ sâu độc lập với snapshot() hoặc chồng lên khung hình ánh sáng nhìn thấy từ cảm biến CSI với draw_depth(), thường qua bảng màu như image.PALETTE_DEPTH.
Ví dụ sử dụng:
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)
Nếu bạn muốn xoay mảng/ảnh độ sâu theo bội số của 90 độ, hãy truyền các tổ hợp hmirror/vflip/transpose sau cho read_depth, draw_depth, hoặc snapshot:
vflip=False, hmirror=False, transpose=False-> Xoay 0 độ
vflip=True, hmirror=False, transpose=True-> Xoay 90 độ
vflip=True, hmirror=True, transpose=False-> Xoay 180 độ
vflip=False, hmirror=True, transpose=True-> Xoay 270 độ
Hàm¶
- tof.init(type: int = -1) None¶
Khởi tạo cảm biến độ sâu tích hợp.
typechỉ định loại cảm biến TOF:tof.TOF_VL53LX: 8x8 điểm ảnh.
Mặc định
typelà-1, khiếntof.init()tự động quét và khởi tạo cảm biến TOF được gắn dựa trên địa chỉ I2C.
- tof.width() int¶
Trả về chiều rộng (độ phân giải ngang) của cảm biến độ sâu đang sử dụng. Phát sinh
RuntimeErrornếu cảm biến chưa được khởi tạo.
- tof.height() int¶
Trả về chiều cao (độ phân giải dọc) của cảm biến độ sâu đang sử dụng. Phát sinh
RuntimeErrornếu cảm biến chưa được khởi tạo.
- tof.type() int¶
Trả về loại cảm biến độ sâu đang sử dụng:
Phát sinh
RuntimeErrornếu cảm biến chưa được khởi tạo.
- tof.refresh() int¶
Trả về tốc độ làm mới (tính bằng Hz) của cảm biến độ sâu đang sử dụng:
tof.TOF_VL53LX: 15 Hz.
Phát sinh
RuntimeErrornếu cảm biến chưa được khởi tạo.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
Trả về một bộ chứa danh sách độ sâu (
width * heightsố thực tính bằng mm), giá trị độ sâu nhỏ nhất và lớn nhất quan sát được.hmirrornếuTruelật ngang mảng độ sâu.vflipnếuTruelật dọc mảng độ sâu.transposenếuTruechuyển vị mảng độ sâu.timeoutsố mili giây chờ khung hình mới trước khi phát sinhRuntimeError. Nếu bằng0thì chờ vô thời hạn.
- 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¶
Vẽ mảng
depth(như được trả về bởiread_depth) lênimagevới góc trên bên trái bắt đầu tại vị tríx,y.x_scalekiểm soát tỷ lệ phóng to/thu nhỏ của ảnh hiển thị theo chiều x (số thực). Nếu giá trị này âm thì ảnh sẽ bị lật ngang. Nếu không chỉ định thì nó khớp vớiy_scaleđể duy trì tỷ lệ khung hình.y_scalekiểm soát tỷ lệ phóng to/thu nhỏ của ảnh hiển thị theo chiều y (số thực). Nếu giá trị này âm thì ảnh sẽ bị lật dọc. Nếu không chỉ định thì nó khớp vớix_scaleđể duy trì tỷ lệ khung hình.roilà bộ hình chữ nhật vùng quan tâm (ROI)(x, y, w, h)của mảng độ sâu nguồn cần vẽ.rgb_channellà kênh RGB (0=R, 1=G, 2=B) để trích xuất từ nguồn.-1(mặc định) sử dụng tất cả các kênh.alphakiểm soát mức độ pha trộn của nguồn vào ảnh đích.255là không trong suốt,0không thay đổi gì. Phạm vi: 0-255.color_palettelà enum bảng màu (ví dụimage.PALETTE_DEPTH,image.PALETTE_RAINBOW) hoặc ảnh RGB565 256 điểm ảnh được dùng làm bảng tra cứu màu sắc cho giá trị độ sâu thang xám.alpha_palettenếu không phảiNonethì là ảnh GRAYSCALE 256 điểm ảnh dùng làm bảng tra cứu alpha điều biếnalphatheo từng điểm ảnh.hintlà phép OR logic của:image.AREA: Dùng tỷ lệ diện tích khi thu nhỏ.image.BILINEAR: Dùng tỷ lệ song tuyến.image.BICUBIC: Dùng tỷ lệ lưỡng khối.image.CENTER: Căn giữa ảnh trên đích.image.HMIRROR: Lật ngang.image.VFLIP: Lật dọc.image.TRANSPOSE: Chuyển vị (hoán đổi x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Áp dụng trích xuất rgb_channel trước khi tỷ lệ.image.APPLY_COLOR_PALETTE_FIRST: Áp dụng bảng màu trước khi tỷ lệ.image.SCALE_ASPECT_KEEP: Vừa khít trong đích giữ tỷ lệ khung hình.image.SCALE_ASPECT_EXPAND: Lấp đầy đích giữ tỷ lệ khung hình (cắt xén).image.SCALE_ASPECT_IGNORE: Lấp đầy đích bỏ qua tỷ lệ khung hình (kéo dãn).image.ROTATE_90: Xoay 90 độ.image.ROTATE_180: Xoay 180 độ.image.ROTATE_270: Xoay 270 độ.
scalelà bộ hai giá trị(min, max)kiểm soát độ sâu tối thiểu và tối đa (tính bằng mm) dùng để chia tỷ lệ ảnh độ sâu. Mặc định là giá trị min và max thực tế của mảng độ sâu.Ghi chú
read_depthghi nhớ nếu nó được gọi vớitranspose=Truevàdraw_depthsử dụng điều đó nội bộ để xác định kích thước mảng nguồn.
- 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¶
Đọc một khung hình từ cảm biến độ sâu và trả về một đối tượng
image.Imagemới, có thể làimage.GRAYSCALEhoặcimage.RGB565.hmirrornếuTruelật ngang ảnh mới.vflipnếuTruelật dọc ảnh mới.transposenếuTruechuyển vị ảnh mới.x_scalekiểm soát tỷ lệ phóng to/thu nhỏ của ảnh theo chiều x (số thực). Giá trị âm lật ngang. Nếu không chỉ định thì khớp vớiy_scale.y_scalekiểm soát tỷ lệ phóng to/thu nhỏ của ảnh theo chiều y (số thực). Giá trị âm lật dọc. Nếu không chỉ định thì khớp vớix_scale.roilà bộ hình chữ nhật vùng quan tâm (ROI)(x, y, w, h)của nguồn cần trích xuất.rgb_channellà kênh RGB (0=R, 1=G, 2=B) cần trích xuất.-1(mặc định) sử dụng tất cả các kênh.alphakiểm soát pha trộn nguồn-đích.255là không trong suốt,0giữ nguyên đích. Phạm vi: 0-255.color_palettelà enum bảng màu (ví dụimage.PALETTE_DEPTH) hoặc ảnh RGB565 256 điểm ảnh dùng làm bảng tra cứu màu sắc.alpha_palettenếu không phảiNonethì là ảnh GRAYSCALE 256 điểm ảnh dùng làm bảng tra cứu alpha.hintlà phép OR logic của:image.AREA: Dùng tỷ lệ diện tích khi thu nhỏ.image.BILINEAR: Dùng tỷ lệ song tuyến.image.BICUBIC: Dùng tỷ lệ lưỡng khối.image.CENTER: Căn giữa ảnh trên đích.image.HMIRROR: Lật ngang.image.VFLIP: Lật dọc.image.TRANSPOSE: Chuyển vị (hoán đổi x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Áp dụng trích xuất rgb_channel trước khi tỷ lệ.image.APPLY_COLOR_PALETTE_FIRST: Áp dụng bảng màu trước khi tỷ lệ.image.SCALE_ASPECT_KEEP: Vừa khít trong đích giữ tỷ lệ khung hình.image.SCALE_ASPECT_EXPAND: Lấp đầy đích giữ tỷ lệ khung hình (cắt xén).image.SCALE_ASPECT_IGNORE: Lấp đầy đích bỏ qua tỷ lệ khung hình (kéo dãn).image.ROTATE_90: Xoay 90 độ.image.ROTATE_180: Xoay 180 độ.image.ROTATE_270: Xoay 270 độ.
scalelà bộ hai giá trị(min, max)kiểm soát độ sâu tối thiểu và tối đa (tính bằng mm) dùng để chia tỷ lệ ảnh. Mặc định là giá trị min/max thực tế của khung hình.pixformatkiểm soát định dạng điểm ảnh của ảnh cuối cùng. Phải làimage.GRAYSCALEhoặcimage.RGB565.copy_to_fbnếuTrueghi ảnh mới vào bộ đệm khung hình thay vì cấp phát trên heap của MicroPython.timeoutsố mili giây chờ khung hình mới trước khi phát sinhRuntimeError. Nếu bằng0thì chờ vô thời hạn.