tof — מנהל התקן חיישן time-of-flight¶
המודול tof מניע חיישני טווח time-of-flight (ToF) המחוברים ל-OpenMV Cam דרך I2C. כל פריים מחזיר ערך עומק לכל פיקסל במילימטרים עבור רשת אזורים בגודל 8x8 (VL53L5CX / VL53L8CX), אותו ניתן לעבד כתמונת עומק עצמאית באמצעות snapshot(), או להרכיב על גבי פריים באור נראה מחיישן ה-CSI באמצעות draw_depth(), בדרך כלל דרך לוח צבעים כגון image.PALETTE_DEPTH.
דוגמת שימוש:
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)
אם ברצונך לסובב את מערך/תמונת העומק בכפולות של 90 מעלות, העבר את הצירופים הבאים של hmirror/vflip/transpose אל read_depth, draw_depth או snapshot:
vflip=False, hmirror=False, transpose=False-> סיבוב של 0 מעלות
vflip=True, hmirror=False, transpose=True-> סיבוב של 90 מעלות
vflip=True, hmirror=True, transpose=False-> סיבוב של 180 מעלות
vflip=False, hmirror=True, transpose=True-> סיבוב של 270 מעלות
פונקציות¶
- tof.init(type: int = -1) None¶
מאתחלת חיישן עומק מובנה.
typeמציין את סוג חיישן ה-TOF:tof.TOF_VL53LX: 8x8 פיקסלים.
כברירת מחדל
typeהוא-1, מה שגורם ל-tof.init()לסרוק ולאתחל אוטומטית חיישן TOF מחובר על בסיס כתובת ה-I2C.
- tof.width() int¶
מחזירה את הרוחב (רזולוציה אופקית) של חיישן העומק שבשימוש. מעלה
RuntimeErrorאם החיישן אינו מאותחל.
- tof.height() int¶
מחזירה את הגובה (רזולוציה אנכית) של חיישן העומק שבשימוש. מעלה
RuntimeErrorאם החיישן אינו מאותחל.
- tof.refresh() int¶
מחזירה את קצב הרענון (ב-Hz) של חיישן העומק שבשימוש:
tof.TOF_VL53LX: 15 Hz.
מעלה
RuntimeErrorאם החיישן אינו מאותחל.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
מחזירה טאפל המכיל את רשימת העומק (
width * heightמספרים ממשיים ב-mm), העומק המינימלי שנצפה, והעומק המקסימלי שנצפה.hmirrorאםTrueמשקף אופקית את מערך העומק.vflipאםTrueהופך אנכית את מערך העומק.transposeאםTrueמשחלף (transposes) את מערך העומק.timeoutכמה מילישניות להמתין לפריים החדש לפני העלאתRuntimeError. אם0ממתין לנצח.
- 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¶
מצייר מערך
depth(כפי שמוחזר על ידיread_depth) על גביimageאשר הפינה השמאלית-עליונה שלו מתחילה במיקוםx,y.x_scaleשולט בכמה התמונה המוצגת מוקטנת/מוגדלת בכיוון ה-x (מספר ממשי). אם ערך זה שלילי, התמונה תהפוך אופקית. אם לא צוין, הוא תואם ל-y_scaleכדי לשמר את יחס הממדים.y_scaleשולט בכמה התמונה המוצגת מוקטנת/מוגדלת בכיוון ה-y (מספר ממשי). אם ערך זה שלילי, התמונה תהפוך אנכית. אם לא צוין, הוא תואם ל-x_scaleכדי לשמר את יחס הממדים.roiהוא טאפל מלבן אזור העניין(x, y, w, h)של מערך העומק המקורי שיש לצייר.rgb_channelהוא ערוץ ה-RGB (0=R, 1=G, 2=B) שיש לחלץ מהמקור.-1(ברירת מחדל) משתמש בכל הערוצים.alphaשולט בכמה מהמקור ימוזג אל תמונת היעד.255הוא אטום,0אינו מביא לשינוי כלשהו. טווח: 0-255.color_paletteהוא enum של לוח צבעים (למשלimage.PALETTE_DEPTH,image.PALETTE_RAINBOW) או תמונת RGB565 בת 256 פיקסלים המשמשת כטבלת חיפוש צבעים על ערך העומק בגווני אפור.alpha_paletteאם אינוNoneהוא תמונת GRAYSCALE בת 256 פיקסלים המשמשת כטבלת חיפוש אלפא המווסתת אתalphaלכל פיקסל.hintהוא OR לוגי של:image.AREA: השתמש בקנה מידה לפי שטח בעת הקטנה.image.BILINEAR: השתמש בקנה מידה דו-קווי (bilinear).image.BICUBIC: השתמש בקנה מידה דו-קוּבּי (bicubic).image.CENTER: מרכז את התמונה ביעד.image.HMIRROR: שיקוף אופקי.image.VFLIP: היפוך אנכי.image.TRANSPOSE: שחלוף (החלפת x/y).image.EXTRACT_RGB_CHANNEL_FIRST: החל את חילוץ rgb_channel לפני שינוי קנה המידה.image.APPLY_COLOR_PALETTE_FIRST: החל את לוח הצבעים לפני שינוי קנה המידה.image.SCALE_ASPECT_KEEP: התאם לתוך היעד תוך שמירה על יחס הממדים.image.SCALE_ASPECT_EXPAND: מלא את היעד תוך שמירה על יחס הממדים (חיתוך).image.SCALE_ASPECT_IGNORE: מלא את היעד תוך התעלמות מיחס הממדים (מתיחה).image.ROTATE_90: סובב ב-90 מעלות.image.ROTATE_180: סובב ב-180 מעלות.image.ROTATE_270: סובב ב-270 מעלות.
scaleהוא טאפל בן שני ערכים(min, max)השולט בעומק המינימלי והמקסימלי (ב-mm) המשמשים לשינוי קנה המידה של תמונת העומק. ברירת המחדל היא הערכים המינימליים והמקסימליים בפועל של מערך העומק.הערה
read_depthזוכר אם נקרא עםtranspose=Trueו-draw_depthמשתמש בכך פנימית כדי לקבוע את גודל מערך המקור.
- 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¶
קורא פריים מחיישן העומק ומחזיר אובייקט
image.Imageחדש שהואimage.GRAYSCALEאוimage.RGB565.hmirrorאםTrueמשקף אופקית את התמונה החדשה.vflipאםTrueהופך אנכית את התמונה החדשה.transposeאםTrueמשחלף את התמונה החדשה.x_scaleשולט בכמה התמונה מוקטנת/מוגדלת בכיוון ה-x (מספר ממשי). ערכים שליליים הופכים אופקית. אם לא צוין, הוא תואם ל-y_scale.y_scaleשולט בכמה התמונה מוקטנת/מוגדלת בכיוון ה-y (מספר ממשי). ערכים שליליים הופכים אנכית. אם לא צוין, הוא תואם ל-x_scale.roiהוא טאפל מלבן אזור העניין(x, y, w, h)של המקור שיש לחלץ.rgb_channelהוא ערוץ ה-RGB (0=R, 1=G, 2=B) שיש לחלץ.-1(ברירת מחדל) משתמש בכל הערוצים.alphaשולט במיזוג ממקור ליעד.255הוא אטום,0משאיר את היעד ללא שינוי. טווח: 0-255.color_paletteהוא enum של לוח צבעים (למשלimage.PALETTE_DEPTH) או תמונת RGB565 בת 256 פיקסלים המשמשת כטבלת חיפוש צבעים.alpha_paletteאם אינוNoneהוא תמונת GRAYSCALE בת 256 פיקסלים המשמשת כטבלת חיפוש אלפא.hintהוא OR לוגי של:image.AREA: השתמש בקנה מידה לפי שטח בעת הקטנה.image.BILINEAR: השתמש בקנה מידה דו-קווי (bilinear).image.BICUBIC: השתמש בקנה מידה דו-קוּבּי (bicubic).image.CENTER: מרכז את התמונה ביעד.image.HMIRROR: שיקוף אופקי.image.VFLIP: היפוך אנכי.image.TRANSPOSE: שחלוף (החלפת x/y).image.EXTRACT_RGB_CHANNEL_FIRST: החל את חילוץ rgb_channel לפני שינוי קנה המידה.image.APPLY_COLOR_PALETTE_FIRST: החל את לוח הצבעים לפני שינוי קנה המידה.image.SCALE_ASPECT_KEEP: התאם לתוך היעד תוך שמירה על יחס הממדים.image.SCALE_ASPECT_EXPAND: מלא את היעד תוך שמירה על יחס הממדים (חיתוך).image.SCALE_ASPECT_IGNORE: מלא את היעד תוך התעלמות מיחס הממדים (מתיחה).image.ROTATE_90: סובב ב-90 מעלות.image.ROTATE_180: סובב ב-180 מעלות.image.ROTATE_270: סובב ב-270 מעלות.
scaleהוא טאפל בן שני ערכים(min, max)השולט בעומק המינימלי והמקסימלי (ב-mm) המשמשים לשינוי קנה המידה של התמונה. ברירת המחדל היא הערכים המינימליים/מקסימליים בפועל של הפריים.pixformatשולט בפורמט הפיקסלים הסופי של התמונה. חייב להיותimage.GRAYSCALEאוimage.RGB565.copy_to_fbאםTrueכותב את התמונה החדשה אל חוצץ הפריימים במקום להקצות אותה על ערימת (heap) ה-MicroPython.timeoutכמה מילישניות להמתין לפריים החדש לפני העלאתRuntimeError. אם0ממתין לנצח.