tof --- مشغل مستشعر زمن الرحلة¶
تقود الوحدة tof مستشعرات قياس المدى بزمن الرحلة (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¶
تُعيد معدل التحديث (بالهرتز) لمستشعر العمق المستخدم:
tof.TOF_VL53LX: 15 هرتز.
تُطلق
RuntimeErrorإذا لم يكن المستشعر مُهيّأً.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
تُعيد صفًا يحتوي على قائمة العمق (عدد
width * heightمن القيم العشرية بالمليمتر)، وأدنى عمق مرئي، وأقصى عمق مرئي.hmirrorإذا كانتTrueتعكس مصفوفة العمق أفقيًا.vflipإذا كانتTrueتقلب مصفوفة العمق رأسيًا.transposeإذا كانتTrueتُحوِّل مصفوفة العمق (تبديل).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هو تعداد لوحة ألوان (مثلimage.PALETTE_DEPTHوimage.PALETTE_RAINBOW) أو صورة RGB565 بحجم 256 بكسل تُستخدم كجدول بحث للألوان على قيمة العمق ذات تدرج الرمادي.alpha_paletteإذا لم تكنNoneفهي صورة GRAYSCALE بحجم 256 بكسل تُستخدم كجدول بحث ألفا يُعدّلalphaلكل بكسل.hintهو OR منطقي من:image.AREA: استخدام تحجيم المساحة عند التصغير.image.BILINEAR: استخدام التحجيم ثنائي الخط.image.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)يتحكم في أدنى وأقصى عمق (بالمليمتر) المستخدم لتحجيم صورة العمق. القيمة الافتراضية هي أدنى وأقصى قيمة فعلية لمصفوفة العمق.ملاحظة
تتذكر
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هو تعداد لوحة ألوان (مثلimage.PALETTE_DEPTH) أو صورة RGB565 بحجم 256 بكسل تُستخدم كجدول بحث للألوان.alpha_paletteإذا لم تكنNoneفهي صورة GRAYSCALE بحجم 256 بكسل تُستخدم كجدول بحث ألفا.hintهو OR منطقي من:image.AREA: استخدام تحجيم المساحة عند التصغير.image.BILINEAR: استخدام التحجيم ثنائي الخط.image.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)يتحكم في أدنى وأقصى عمق (بالمليمتر) المستخدم لتحجيم الصورة. القيمة الافتراضية هي أدنى/أقصى قيمة فعلية للإطار.pixformatيتحكم في صيغة بكسل الصورة النهائية. يجب أن تكونimage.GRAYSCALEأوimage.RGB565.copy_to_fbإذا كانتTrueتكتب الصورة الجديدة في مخزن الإطارات بدلًا من تخصيصها على كومة MicroPython.timeoutكم عدد المللي ثانية للانتظار من أجل الإطار الجديد قبل إطلاقRuntimeError. إذا كانت0فالانتظار إلى الأبد.