v2.4.0¶
يعيد الإصدار v2.4.0 كتابة find_lines() كاشفًا قائمًا على تحويل Hough، ويضيف find_line_segments() و find_datamatrices() لفك ترميز مصفوفات البيانات و sensor.set_vsync_output()، وقراءة/كتابة شرائح الصورة، والعديد من أحجام الإطارات المُقاسة الجديدة لمعدلات إطارات أعلى. وقد تغيّرت find_lines() و match_descriptor() و skip_frames() — اقرأ التغييرات الكاسرة أدناه.
أبرز النقاط¶
find_lines()— أُعيدت كتابتها كاشفَ خطوط قائمًا على تحويل Hough يُرجع كائنات خطوط (تعمل الآن على RGB565 وليس على تدرج الرمادي فقط).find_line_segments()— كشف القطع المستقيمة المنتهية.find_datamatrices()— فك ترميز مصفوفات البيانات.sensor.set_vsync_output()— تشغيل VSYNC على دبوس إدخال/إخراج لمزامنة الكاميرا.مزيد من أحجام الإطارات — العديد من الدقات المُقاسة الإضافية لمعدلات إطارات أعلى.
كاسر: تغيّرت
find_lines()وmatch_descriptor()وskip_frames()— راجع التغييرات الكاسرة.
ميزات جديدة¶
image.find_line_segments()— العثور على القطع المستقيمة غير اللانهائية؛ واكتسبت كائنات الخطوط مُوصِّل.length().image.find_datamatrices()— فك ترميز مصفوفات البيانات، مع برامج نصية مثالية.sensor.set_vsync_output(pin)— إخراج إشارة VSYNC على دبوس GPIO لمزامنة الكاميرا (OpenMV 2 / OpenMV 3).شرائح الصورة — أصبح فهرس الصورة / بروتوكول المخزن المؤقت يدعم الآن قراءة وكتابة شرائح من بيانات الصورة.
أُضيفت العديد من تركيبات الدقة / حجم الإطار المُقاسة الإضافية لدعم معدلات إطارات أعلى؛ وأصبحت
clock.fps()تعيد ضبط مُجمِّعاتها كل ثانيتين بحيث يتتبّع معدل الإطارات المُبلَّغ المعدلَ الأخير.
تغييرات وتحسينات أخرى¶
يُقتطَع OV7725 إلى QVGA عندما تكون الدقة ≤ VGA (إطارات مفقودة أقل عند معدلات التقاط عالية)، وضُبط PLL الخاص به على 6× مع تقليل ساعة خارجية (OpenMV 2 بسرعة 48 MHz، و OpenMV 3 بسرعة 54 MHz)، مما يغيّر توقيت إطارات المستشعر.
إصلاحات الأخطاء¶
التصوير:
إصلاح خطأ حجم المخزن المؤقت في
compress_for_ide()(علامة البداية/النهاية)، وفك ترميز QR (بالإضافة إلى إصلاحات في quirc الأصلية لفهرسة خريطة بتات الخلية وحدود نمط المحاذاة).
المستشعر والاتصال:
خُفّضت ساعة مستشعر OpenMV 2 لتعمل مع PLL الأعلى للمستشعر (تهيئة/مزامنة الكاميرا)، وجُعلت
socket.recvfrom()في WINC تُرجع الحجم المستقبَل الفعلي (مع إثارة خطأ عند حجم غير موجب بدلًا من إرجاع قيمة قديمة).
دعم العتاد واللوحات¶
إخراج VSYNC على دبوس GPIO (OpenMV 2 / OpenMV 3) داعمًا
sensor.set_vsync_output().OpenMV 3 — تفعيل
pyb.UARTUART1.
تغييرات كاسرة في API¶
تغييرات كاسرة في API ظاهرة للمستخدم بين v2.3.0 و v2.4.0. النطاق: وحدات Python بلغة C في modules/ ومكتبات Python في scripts/libraries/.
كل تغيير موسوم بتأثيره:
رئيسي — يؤثر على معظم البرامج النصية التي استخدمت الميزة؛ ستحتاج إلى نقل الشيفرة.
ثانوي — واجهة API ضيقة؛ يؤثر فقط على البرامج النصية التي استخدمتها.
سلوك — واجهة API نفسها، نتائج مختلفة؛ أعد التحقق من البرامج النصية المضبوطة.
التغييرات مجمّعة حسب التأثير بهذا الترتيب. إذا كنت تريد فقط نقل شيفرتك، انتقل إلى قائمة تحقق النقل في النهاية. كل تجزئة لتأكيد commit ترتبط بفرق التغيير الخاص بها على GitHub.
أُعيدت كتابة find_lines() كاشف Hough (رئيسي)¶
أُعيدت كتابة image.find_lines() كاشفًا قائمًا على تحويل Hough. فهي لم تعد تُرجع قائمة من صفوف (x1, y1, x2, y2) — بل تُرجع كائنات خطوط (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — وتعمل الآن أيضًا على RGB565 (وليس على تدرج الرمادي فقط). تغيّرت وسيطة threshold من عدد عشري بين 0.0 و 1.0 إلى مجموع عددي صحيح لمقدار الحافة، وأصبح line.magnitude الآن عددًا صحيحًا، وأُضيفت كلمتان مفتاحيتان جديدتان theta_margin / rho_margin. انقل الشيفرة التي تفكّك الصفوف إلى كائنات الخطوط وأعد ضبط threshold.
تُرجع match_descriptor() كائن مطابقة (ثانوي)¶
أصبحت image.match_descriptor() (ORB) تُرجع الآن كائن kptmatch بمُوصِّلات .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() بدلًا من صفّ بسيط من 8 عناصر. لا يزال الكائن قابلًا للفهرسة/التقطيع لذا يستمر عمل الفهرسة الموضعية، لكن الشيفرة التي استخدمت isinstance(result, tuple) (أو استخدمت دوال الصفوف) يجب أن تستخدم المُوصِّلات الجديدة.
التأكيدات: e960546b6
أصبحت sensor.skip_frames() قائمة على الزمن (سلوك)¶
أُعيد تصميم sensor.skip_frames() لقبول كلمة مفتاحية time= (الافتراضي ~300 ملي ثانية) وأصبحت الآن قائمة على الزمن افتراضيًا بدلًا من تنفيذ عدد إطارات ثابت، فتتوقف مبكرًا بمجرد انقضاء الزمن. أما البرامج النصية التي اعتمدت على عدد إطارات محدد بدقة فينبغي أن تمرّر عددًا صريحًا و/أو تضبط time= تبعًا لذلك.
التأكيدات: a039b5d1c
قائمة تحقق النقل¶
للنقل النظيف إلى v2.4.0 يكون العمل المعتاد كما يلي:
انقل تفكيك صفوف
find_lines()إلى كائنات الخطوط وأعد ضبطthresholdالعددي الصحيح (إعادة كتابة find_lines).استخدم مُوصِّلات
kptmatchبدلًا من معاملة نتائجmatch_descriptor()كصفّ (تغيير match_descriptor).مرّر عددًا صريحًا و/أو
time=إلىsensor.skip_frames()إذا كنت تعتمد على عدد إطارات ثابت (تغيير skip_frames).
تعمل جميع البرامج النصية الأخرى دون تعديل.