v5.0.0

الإصدار v5.0.0 هو إصدار رئيسي. أبرز ما فيه: رابط المضيف OpenMV Protocol V2 المعاد بناؤه، وواجهة برمجية للكاميرا قائمة على الفئات csi تتوسع لتشمل اللوحات متعددة الكاميرات، وهدف محاكاة قابل للتشغيل، وتقدير الوضعية أحادية الوضع MoveNet، وMicroPython 1.28، ومجموعة كبيرة من إصلاحات الكاميرا والتعلم الآلي وToF. كما يجلب عددًا من تغييرات الواجهة البرمجية الكاسرة — كل تغيير مرئي للمستخدم منذ v4.8.1 مدرج أدناه، مع شرح دقيق لكيفية الترحيل.

أبرز النقاط

  • OpenMV Protocol V2. أُعيد بناء رابط المضيف/IDE من الصفر: مؤطّر، ومتسلسل، ومدقّق بـCRC، مع قنوات متعددة الإرسال لـstdio ومعاينة التدفق وبيانات المستخدم. تتيح وحدة protocol جديدة للبرامج النصية إنشاء وسائل نقل وقنوات بيانات خاصة بها. راجع تغييرات وحدة protocol.

  • واجهة برمجية للكاميرا csi قائمة على الفئات. يصبح import sensor هو import csi / csi.CSI، مع دعم أصلي لتعدد الكاميرات. راجع ترحيل csi.

  • هدف المحاكاة. يُبنى البرنامج الثابت ويعمل الآن تحت محاكي Arm FVP / QEMU (MPS2/MPS3)، بما في ذلك محاكاة NPU وROMFS وPSRAM — يمكن تشغيل برامج الرؤية والتعلم الآلي بدون أي عتاد متصل.

  • تقدير الوضعية MoveNet. معالج لاحق جديد MoveNet بالإضافة إلى نموذج movenet_singlepose_192.tflite مرفق على OpenMV AE3 وN6.

  • MicroPython 1.28 وulab 6.12.0 وأدوات ST Edge AI 4.0 وOpenMV SDK المُخرجة إلى الخارج (راجع تغييرات البناء / الأدوات).

ميزات جديدة

  • وحدة protocol — أنشئ وسائل نقل وقنوات بيانات مخصصة من Python: protocol.init() وprotocol.register() وprotocol.is_active()، وفئة protocol.ProtocolChannel مع send_event()، بالإضافة إلى الثوابت CHANNEL_FLAG_* وCHANNEL_ID_*. التوقيع النهائي لـprotocol.init() موثّق في تغييرات وحدة protocol.

  • protocol.CBORChannel — حزمة امتداد مجمّدة لـprotocol تُسلسل الحقول المسماة إلى CBOR مع عناصر عرض (تسمية، عمق) وعناصر تحكم تفاعلية (تبديل، شريط تمرير، تحديد).

  • استبطان ذاكرة المضيف والتدفق — أمر بروتوكول جديد SYS_MEMORY يكشف إحصاءات ذاكرة وقت التشغيل لكل مجمّع إلى IDE، وعنصر تحكم تدفق ioctl جديد STREAM_SOURCE يتيح للمضيف اختيار الكاميرا التي تغذي المعاينة على اللوحات متعددة الكاميرات (إصدار البروتوكول 1.0.1).

  • تدفق متعدد الكاميرات — تأخذ csi.CSI وسيطًا stream= يحدد المستشعر الذي يغذي معاينة IDE؛ يحمل ترويسة إطار التدفق الآن معدل إطارات FPS مُنعَّمًا بـEMA حتى يعرض IDE معدل الإطارات دون نموذج clock.fps() المتكرر. راجع ترحيل csi ومتابعات csi.

  • مستشعر الأحداث GenX320 — مرشح تباين مكاني-زماني جديد (csi.IOCTL_GENX320_SET_STC مع الأوضاع csi.GENX320_STC_DISABLE وcsi.GENX320_STC_ONLY وcsi.GENX320_STC_TRAIL_ONLY وcsi.GENX320_STC_TRAIL) وقراءة الأحداث الخام (csi.IOCTL_GENX320_READ_EVENTS_RAW)، مع برامج نصية أمثلة جديدة.

  • MoveNet — معالج لاحق جديد لتقدير الوضعية أحادية الوضع من MediaPipe (الوسائط المفتاحية threshold وnms_threshold وnms_sigma) يُرجع ((x, y, w, h), score, keypoints) مع مصفوفة نقاط مفتاحية COCO من 17 مفصلًا؛ يُرفق نموذج movenet_singlepose_192.tflite ومثال على AE3 وN6.

  • ml.utils.draw_predictions() — وسيط اختياري جديد scores= يُلحق الثقة لكل تسمية، ويتدرج حجم الخط وسماكة المربع تلقائيًا الآن مع عرض الصورة، ووضع جديد format="point" يرسم علامة مركزية لكواشف نقطة المركز/الذروة.

  • فئة display.TVDisplay الجديدة (مع ioctl() عام) تحل محل وحدة tv المستقلة. راجع تغييرات وحدة display.

  • كاشف find_line_segments() جديد (ED-Lines) — متاح الآن في جميع عمليات البناء، مع وسيط جديد threshold=. راجع تغييرات وحدة image.

تغييرات وتحسينات أخرى

  • تم تحديث MicroPython إلى 1.28.0 من قاعدة v4.8.1. يضيف وضع بطاقة SD عالي السرعة على H5/H7/N6، وتوقيت AHB5 في وضع الطاقة المنخفضة، ودبابيس JTAG قابلة للتحكم كـGPIOs على OPENMV_AE3.

  • تم تحديث ulab إلى 6.12.0 — معامل % أصلي على ndarrays (تمت إزالة المساعد ml.utils.mod()؛ راجع تغييرات مكتبة ML).

  • تم تحديث أدوات ST Edge AI إلى 4.0 — يؤثر على تجميع ونشر نماذج ST على الجهاز.

  • ml.Model — تمت إزالة الوسيط المفتاحي load_to_fb؛ تتم إدارة ذاكرة النموذج تلقائيًا بواسطة المخصص الموحد.

  • image.Image.scale() في المكان — توسيع صورة في المكان (على سبيل المثال img.scale(x_scale=2.0, y_scale=2.0)) يُنمّي الآن مخزن الإطارات ليتسع بدلًا من الفشل.

  • مخزن stdio أكبر — نما مخزن النص الافتراضي إلى IDE من 512 إلى 1024 بايت على OpenMV 2/3/4 وNicla Vision وAE3 وN6، حتى لا تُقتطع دفعات print() الأكبر.

  • تدفق أحداث مضيف أكثر سلاسة — تُخنق أحداث NOTIFY الخاصة بـstdout إلى المضيف إلى واحد كحد أقصى لكل قراءة مضيف بدلًا من واحد لكل عبور print() لعلامة المخزن الحلقي.

  • عمليات طويلة قابلة للمقاطعة — تخدم الآن حلقات الانتظار الطويلة لرسم الصور وGPU (Nema/Dave2D) وNPU الأحداث على فترة حتمية، حتى تظل البرامج النصية مستجيبة لزر الإيقاف في IDE أثناء العمل الثقيل.

إصلاحات الأخطاء

الكاميرا والمستشعرات:

  • find_apriltags() لم يعد يُفسد النتائج على لوحات D-cache/GPU (N6 وAE3)، ويعمل الآن على AE3.

  • تم إصلاح خرج صورة Bayer من STM32 N6 ISP بعد تبديل تنسيقات البكسل.

  • تم إصلاح انفجار توازن الأبيض التلقائي الأخضر في المشاهد الساطعة وحالة إحصاءات AWB غير المهيأة في الإطار الأول؛ ورُفع حد قص جاما لـSTM32 ISP (من 32 إلى 63) لمدى أوسع من جاما/التباين/السطوع.

  • لم يعد التعريض التلقائي لـPS5520 يتذبذب في الضوء الساطع؛ وأُعيدت صياغة سلوك AEC/AGC لـPAG7936 (تحكم مدمج، وسقف كسب مصحح).

  • تمت استعادة تحميل البرنامج الثابت للتركيز التلقائي لـOV5640 على Portenta/Nicla (إصلاح MIMXRT I2C SUSPEND).

  • تم إصلاح جمود التقاط الكاميرا عندما يُجمع حد معدل الإطارات مع التقاط JPEG (STM32).

  • لم تعد قراءات GenX320 csi.IOCTL_GENX320_READ_EVENTS_RAW تشوّش معاينة IDE.

  • FLIR Lepton csi.IOCTL_LEPTON_SET_MODE عبر csi.CSI.ioctl() يعمل الآن عند استدعائه بوسيط واحد.

معالجة الصور:

  • تم إصلاح مزج ألفا في draw_image() / blend() عند توفير قناع.

  • تم إصلاح ترتيب البتات في ترميز/فك ترميز PNG أحادي البت (BINARY) وفك ترميز تدرج الرمادي من بت واحد.

  • تم إصلاح بيانات تعريف مدة/معدل إطارات تسجيل mjpeg.Mjpeg.

  • تم إصلاح تجاوز مكدس فك ترميز JPEG البرمجي على اللوحات ذات المكدس الصغير (OpenMV M7).

  • تم إصلاح الكشف التلقائي لتنسيق ملفات JPEG/PNG على المضيفين غير ARM (المحاكي).

زمن الطيران (Time-of-Flight):

  • tof.read_depth() لم يعد يطلق استثناءً عند أخطاء القياس العابرة ويتعافى تلقائيًا من أعطال الناقل؛ المهلة الافتراضية لـtof.read_depth() / tof.snapshot() هي الآن 100 ميلي ثانية (راجع تغييرات tof).

  • تم إصلاح تلف بيانات العمق متعددة المناطق في VL53L5CX / VL53L8CX.

التعلم الآلي والنظام:

  • يتم تنظيف NPU بشكل صحيح عند مقاطعة الاستدلال على N6.

  • تمت استعادة الاستيقاظ من النوم العميق / الاستعداد على N6؛ وأُصلح تعليق القفز إلى محمّل الإقلاع في AE3.

  • تم إصلاح تسريبات الذاكرة عند إعادة التعيين الناعمة (STM32 Nema GPU) ومخزن إطارات مساعد مُجمّع قبل أوانه.

  • تبقى قنوات بروتوكول Python المخصصة الآن سليمة بعد إعادة التشغيل الناعمة، ويتعافى وسيط نقل USB من إعادة تعيين الناقل / نقاط النهاية المتعطلة، وأُصلح فيضان مقاطعة USB SOF.

دعم العتاد واللوحات

  • OpenMV N6 — تمكين Ethernet (شبكات سلكية)؛ ودمج NPU AXI SRAM (1.75 ميغابايت) في مجمّع عابر مشترك لمزيد من RAM بين عمليات الاستدلال؛ والاستيقاظ من النوم العميق/الاستعداد؛ ونماذج TFLite ومصنّفات Haar المتتالية المرفقة في ROMFS.

  • OpenMV AE3 — نماذج ومصنّفات متتالية مرفقة في ROMFS؛ وcbor2 مُجمّد في البرنامج الثابت.

  • Alif (AE3 وN6) — استيقاظ machine.RTC منخفض الطاقة.

  • AprilTags عالية الدقةfind_apriltags() بدقة المستشعر الكاملة على AE3 وArduino Giga وArduino Portenta H7.

  • أهداف المحاكي — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU)، مع محاكاة NPU وROMFS وPSRAM.

تغييرات الواجهة البرمجية الكاسرة

كسور الواجهة البرمجية المرئية للمستخدم بين v4.8.1 وv5.0.0. النطاق: وحدات C الخاصة بـPython في modules/ ومكتبات Python في scripts/libraries/.

كل تغيير موسوم بأثره:

  • رئيسي — تحتاج معظم البرامج النصية إلى تعديلات.

  • ثانوي — واجهة برمجية ضيقة؛ تؤثر فقط على البرامج النصية التي استخدمتها.

  • سلوكي — نفس الواجهة البرمجية، نتائج مختلفة؛ أعد فحص البرامج النصية المضبوطة.

  • أدوات — تؤثر فقط على البناء من المصدر / النسخ المتفرعة اللاحقة.

التغييرات مجمّعة حسب الأثر بهذا الترتيب — رئيسي أولًا، ثم ثانوي، وسلوكي، وأدوات. إذا كنت تريد فقط نقل شيفرتك، انتقل إلى قائمة مراجعة الترحيل في النهاية للحصول على قائمة مهام مكثفة. يرتبط كل تجزئة تثبيت (hash) بفرقها (diff) على GitHub.

sensor مستبدلة بـ csi (رئيسي)

أُعيدت كتابة كل مثال رسمي لإسقاط import sensor لصالح import csi. الواجهة البرمجية الوظيفية القديمة على مستوى الوحدة (sensor.reset() وsensor.set_pixformat() ...) أصبحت متجاوَزة بالواجهة البرمجية القائمة على الفئات csi.CSI، التي تتوسع بشكل طبيعي للوحات ذات الكاميرات المتعددة (csi0 وcsi1 ...) ومطلوبة لجميع الميزات الجديدة (الوسيط المفتاحي stream= والتدفق متعدد المستشعرات ...).

لا تزال qstr الخاصة بـsensor موصولة في modules/py_csi.c لعمليات بناء البرنامج الثابت المتوافقة مع الإصدارات السابقة، لكنها لن تكتسب ميزات جديدة، وتفترض جميع الأمثلة والوثائق وشيفرة المكتبة الآن csi.

عمليات التثبيت: 945c5853c، 61f835b7e

من وحدة إلى فئة

قبل (sensor):

import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()

بعد (csi):

import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()

أزواج الضابط/الجالب مدمجة في وصول مدمج

في الواجهة البرمجية الجديدة، الطريقة المستدعاة بدون وسائط تُرجع القيمة الحالية؛ والمستدعاة مع قيمة تضبطها. اختفت البادئتان set_*/get_*. كما فقدت أسماء الطرق اللاحقة ing حيث كانت زائدة (windowingwindow). يرتبط عمود الواجهة البرمجية الجديدة بوثائق المرجع.

sensor (قديم)

csi.CSI (جديد)

set_pixformat(fmt) / get_pixformat()

pixformat([fmt])

set_framesize(sz) / get_framesize()

framesize([sz])

set_framerate(fps) / get_framerate()

framerate([fps])

set_windowing(roi) / get_windowing()

window([roi])

set_framebuffers(n) / get_framebuffers()

framebuffers([n])

set_gainceiling(g)

gainceiling([g])

set_brightness(v)

brightness([v])

set_contrast(v)

contrast([v])

set_saturation(v)

saturation([v])

set_quality(v)

quality([v])

set_colorbar(b)

colorbar([b])

set_special_effect(e)

special_effect([e])

set_lens_correction(...)

lens_correction(...)

set_hmirror(b) / get_hmirror()

hmirror([b])

set_vflip(b) / get_vflip()

vflip([b])

set_transpose(b) / get_transpose()

transpose([b])

set_auto_rotation(b) / get_auto_rotation()

auto_rotation([b])

set_auto_gain(b, [db, ceiling]) / get_gain_db()

auto_gain(...) / gain_db()

set_auto_exposure(b, [us]) / get_exposure_us()

auto_exposure(...) / exposure_us()

set_auto_whitebal(b, [rgb]) / get_rgb_gain_db()

auto_whitebal(...) / rgb_gain_db()

set_auto_blc(b, [regs]) / get_blc_regs()

auto_blc(...) / blc_regs()

set_color_palette(p) / get_color_palette()

color_palette([p])

set_frame_callback(cb)

frame_callback(cb)

set_vsync_callback(cb)

vsync_callback(cb)

get_id()

cid()

دوال بلا مكافئ مباشر

sensor (مُزالة)

ما يُستخدم بدلًا منها

sensor.alloc_extra_fb(w, h, pixfmt) / sensor.dealloc_extra_fb()

image.Image (w, h, pixfmt) — صورة عادية مخصصة على الكومة (heap). لم يعد مخزن الإطارات يُقطّع لمخازن المستخدم.

sensor.skip_frames(time=..., frames=...)

csi.CSI.snapshot() — تخطّي الإطارات مدمج في snapshot عبر وسائطها time= / frames=.

sensor.disable_delays(...) / sensor.disable_full_flush(...)

نُقلت إلى مُنشئ csi.CSI: csi.CSI(delays=False) / csi.CSI(fflush=False).

sensor.get_frame_available()

csi.CSI.readable()

sensor.get_fb()

مُزالة. الصورة التي تُرجعها csi.CSI.snapshot() هي المقبض القانوني.

sensor.set_framebuffers(n, expand=True)

csi.CSI.framebuffers() — أُزيل الوسيط expand (راجع متابعات csi).

جديد في csi.CSI

  • csi.CSI(stream=True|False) — محدِّد وقت الإنشاء يختار أي CSI يغذي مخزن إطارات المعاينة (يحل محل الوسيط المفتاحي update= لكل لقطة، راجع متابعات csi).

  • csi.CSI(cid=N) / csi.devices() — دعم متعدد لـCSI للوحات ذات أكثر من مستشعر صورة واحد.

وحدة image — إصلاح شامل للتوقيعات (رئيسي)

شهدت وحدة image أوسع تغيير في الواجهة البرمجية بعد csi — تغيرت توقيعات الرسم وكائنات النتائج وعدة كواشف.

يجب أن تكون وسائط الإحداثيات صفوفًا (tuples)

أُعيدت كتابة modules/py_image.c فوق mp_arg_parse_all. جميع طرق الرسم / البكسل التي كانت تأخذ سابقًا وسائط موضعية منفصلة x, y, ... تتطلب الآن تجميع تلك الإحداثيات في صف (tuple) واحد.

عمليات التثبيت: d18bbc472، 0c60c94b9 (PR #3061)

قبل

بعد

img.draw_arrow(x0, y0, x1, y1, color=...)

img.draw_arrow((x0, y0, x1, y1), color=...)

img.draw_line(x0, y0, x1, y1, ...)

img.draw_line((x0, y0, x1, y1), ...)

img.draw_cross(x, y, ...)

img.draw_cross((x, y), ...)

img.draw_circle(x, y, r, ...)

img.draw_circle((x, y, r), ...)

img.draw_rectangle(x, y, w, h, ...)

img.draw_rectangle((x, y, w, h), ...)

img.draw_string(x, y, "txt", ...)

img.draw_string((x, y), "txt", ...)

img.draw_ellipse(x, y, rx, ry, rot, ...)

img.draw_ellipse((x, y, rx, ry, rot), ...)

img.flood_fill(x, y, ...)

img.flood_fill((x, y), ...)

img.get_pixel(x, y, rgbtuple=...)

img.get_pixel((x, y), rgbtuple=...)

img.set_pixel(x, y, color)

img.set_pixel((x, y), color)

كلها طرق من image.Image.

كائنات النتائج محوّلة إلى attrtuple

هذه الأنواع أصبحت الآن كائنات attrtuple في MicroPython: similarity وstatistics وpercentile وthreshold وline وcircle وrect وqrcode وapriltag وdatamatrix وbarcode وdisplacement وkptmatch. الوصول إلى السمات بدون أقواس أصبح الآن قانونيًا.

عملية التثبيت: 3399d302e

قبل (بأسلوب الطرق):

img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())

بعد (بأسلوب السمات):

img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)

blob وhistogram دون تغيير — تحتفظان بأنواعهما الحالية وبأدوات الوصول () (لا يمكن لـattrtuple التعبير عن القيم المحسوبة بكسل (lazily) لكتلة أو عن أدوات الوصول الآخذة للوسائط في مدرج تكراري).

إعادة تسمية معامل haar في find_features

image.Image.find_features() — أُعيدت تسمية scale_factor= إلى scale=.

عملية التثبيت: be4c5cd73

get_regression — أصبح متينًا دائمًا، وأُضيف target_size

image.Image.get_regression() يستخدم الآن دائمًا الانحدار المتين (Theil-Sen). أُزيل المسار القديم السريع للمربعات الصغرى، لذا اختفى الوسيط المفتاحي robust= — ما كان يتطلب robust=True هو الآن السلوك الوحيد. وسيط مفتاحي جديد target_size=(w, h) (الافتراضي (80, 60)) يقلّص منطقة الاهتمام مساحيًا قبل ملاءمة Theil-Sen ذات التعقيد O(N^2) حتى يعمل دائمًا على حجم صورة معقول؛ تُعاد نقاط نهاية الخط الملائم إلى إحداثيات المصدر. حُذف المثال linear_regression_robust.py وأُعيدت تسمية linear_regression_fast.py إلى linear_regression.py.

عمليات التثبيت: c7c2e69a0، 0ff2afa72

find_line_segments — خوارزمية جديدة

image.Image.find_line_segments() — استُبدل كاشف LSD القديم بـED-Lines، واكتسب وسيطًا مفتاحيًا جديدًا threshold=50. سيختلف خرج البرامج النصية المضبوطة سابقًا.

عمليات التثبيت: 87da2a7b7، 2c47b5735

استُبدلت مكتبة AprilTag

image.Image.find_apriltags() — استُبدل كاشف AprilTag بتنفيذ جديد. تغيرت مجموعة العائلات:

عملية التثبيت: e813bada7

متابعة وحدة csi (ثانوي)

متابعات أصغر لـcsi فوق ترحيل csi.

أُزيل snapshot(update=...)

اختفى الوسيط المفتاحي update في csi.CSI.snapshot(). لمنع جهاز CSI من تغذية مخزن إطارات المعاينة، الغِ الاشتراك وقت الإنشاء:

csi0 = csi.CSI(stream=False)                  # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img)  # was: ...(update=False, ...)

عمليات التثبيت: 9a8077827، 26b79a2c5

أُزيل وسيط expand في framebuffers()

csi.CSI.framebuffers() — اختفى الوسيط الموضعي الثالث (expand)؛ التوقيع الآن هو framebuffers([count]).

عملية التثبيت: 86cb3a5de

وحدة protocol (ثانوي)

تؤثر فقط على البرامج النصية التي قادت رابط المضيف مباشرة. راجع protocol.

أُعيدت تسمية timer_ms إلى poll_ms

protocol.init() — أُعيدت تسمية الوسيط timer_ms إلى poll_ms.

protocol.init(..., poll_ms=10)   # was: timer_ms=10

عمليات التثبيت: 8a0635e8c، 95a290607

أُزيل protocol.poll()

تُجدوَل مهمة البروتوكول داخليًا الآن. ستطلق استدعاءات protocol.poll() خطأ AttributeError.

عملية التثبيت: 8a0635e8c

أُزيل وسيط تكوين soft_reboot

protocol.init() — اختفى الوسيط soft_reboot. تتحمل جميع وسائل النقل الحالية إعادة التشغيل الناعمة، لذا أصبح السلوك الآن غير مشروط.

عملية التثبيت: 0bf766aa2

وحدات display (ثانوي)

يمر خرج التلفزيون الآن عبر كائن display.TVDisplay بدلًا من وحدة tv المستقلة. كما اكتسبت display دالة ioctl() عامة.

عمليات التثبيت: f0accb389، 1a5a87121، 920c097a0، 9eac55098

وحدة tof (سلوكي)

نفس الواجهة البرمجية كما كانت؛ تغيرت الإعدادات الافتراضية ومعالجة الأخطاء. راجع tof.

تغيرت المهلة الافتراضية

tof.read_depth() وtof.snapshot() (المستدعاة بـtimeout=-1) تتخلفان الآن إلى 100 ميلي ثانية بدلًا من الانتظار إلى ما لا نهاية. مرّر قيمة أكبر صريحة إذا كنت بحاجة إلى السلوك القديم.

عملية التثبيت: b6772b80d

التعافي التلقائي

يعيد المشغّل الآن تعيين ناقل I2C والمستشعر بشكل صارم عند أخطاء القياس/المهلة. لم تعد الأمثلة تستدعي tof.reset() في معالجات الاستثناءات الخاصة بها — يجب على شيفرة المستخدم التي قامت بالتعافي اليدوي إزالته (سيتعارض مع التعافي التلقائي الجديد).

عمليات التثبيت: b6772b80d، 80ffaa5c3

مكتبة ML (سلوكي)

نفس الواجهة البرمجية، أرقام مختلفة — أعد فحص أي خط أنابيب ML مضبوط.

المعالجة المسبقة الآن تشد بدلًا من التأطير (letterbox)

Normalization تستخدم الآن image.SCALE_ASPECT_IGNORE (شد) بدلًا من image.SCALE_ASPECT_EXPAND (تأطير). كما تحوّلت المعالجة اللاحقة NMS إلى قياس مستقل لـx/y.

ملاحظة

الأثر. تتحسن عمومًا كواشف نمط YOLO ومنحدرات النقاط المفتاحية. تتطلب الآن أمثلة BlazeFace وBlazePalm وFaceLandmarks وHandLandmarks اقتصاصًا مربعًا يدويًا على منطقة الاهتمام في المدخل — حُدّثت البرامج النصية للأمثلة؛ ويجب على شيفرة المستخدم المخصصة فعل الشيء نفسه.

عملية التثبيت: 68dc29a33

أُزيل المساعد ml.utils.mod()

يدعم ulab 6.12.0 معامل % على ndarrays أصليًا. يجب على الشيفرة التي استوردت mod من ml.utils أن تستخدم a % b.

عمليات التثبيت: 35ece5728، 82fbd858c

البناء / الأدوات (أدوات)

لا شيء من هذا يؤثر على برامج MicroPython النصية. يتطلب بناء البرنامج الثابت من المصدر الآن OpenMV SDK الخارجي (1.6.0، كان سابقًا داخل الشجرة). أُزيلت عدة أدوات بناء داخل الشجرة وانتقل N6 إلى مكدس TinyUSB؛ ينبغي للنسخ المتفرعة اللاحقة مراجعة تاريخ مستودع البرنامج الثابت — لا سيما توقيع file_open() الذي أسقط وسيطه buffered.

قائمة مراجعة الترحيل

للحصول على نقل نظيف إلى v5.0.0، العمل المعتاد هو:

  1. استبدل import sensor بـ import csi; csi0 = csi.CSI() وترجم كل استدعاء set_*/get_* إلى أداة الوصول المقابلة في csi.CSI (ترحيل csi).

  2. غلّف وسائط الإحداثيات لـimg.draw_* وget_pixel() وset_pixel() في صفوف (tuples) (تغييرات وحدة image).

  3. أسقط () من أدوات الوصول لنتائج attrtuple إذا أردت الصيغة الاصطلاحية الجديدة، أو اترك الأسلوب القديم كما هو لأن attrtuples لا تزال تدعم أدوات الوصول القابلة للاستدعاء (تغييرات وحدة image).

  4. راجع find_line_segments() وget_regression() وأي اختيار عائلة find_apriltags() (تغييرات وحدة image).

  5. أعد تسمية timer_mspoll_ms في استدعاءات protocol.init()؛ وأزل protocol.poll() وsoft_reboot= (تغييرات وحدة protocol).

  6. لسير أعمال ML: أعد النظر في أي نموذج احتاج إلى مدخل مؤطّر (letterboxed) (تغييرات مكتبة ML).