v2.1.0¶
v2.1.0 هو إصدار ضخم لتحديث واجهة برمجة التطبيقات. فهو يستبدل واصف النقاط المفتاحية FREAK بـ ORB، ويعيد صياغة find_blobs() / المدرجات التكرارية / الإحصاءات إلى واجهات قائمة على الكائنات، ويعيد تسمية دوال التعريض / الكسب / موازنة البياض التلقائية في sensor، ويضيف كشف رموز QR وتصحيح عدسة OV7725، ويجلب الدعم الأولي للوحة OpenMV Cam M7. تغيّرت العديد من الواجهات — اقرأ التغييرات الجذرية أدناه.
أبرز النقاط¶
النقاط المفتاحية ORB — استُبدل واصف FREAK بـ ORB (أُعيدت صياغة
find_keypoints()/match_descriptor()).واجهات الكائنات — تُرجع
find_blobs()وget_histogram()وget_statistics()الآن كائنات بمُوصِّلات مُسمّاة.رموز QR — أُضيف كشف
image.find_qrcodes().OpenMV Cam M7 — دعم أولي للوحة.
المستشعر —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(أُعيدت تسميتها) وset_lens_correction().تغيير جذري: تغيّرت واجهات النقطة المفتاحية / الواصف، والكتلة / المدرج التكراري / الإحصاءات، ودالة المستشعر التلقائية، وعدة واجهات أخرى — راجع التغييرات الجذرية.
ميزات جديدة¶
OpenMV Cam M7 — أُضيف الدعم الأولي للوحة OpenMV 3 (M7).
رموز QR — أُضيف
image.find_qrcodes()مع مثالqrcodes.py.النقاط المفتاحية ORB — نظام واصف ORB جديد:
find_keypoints()مع وسيطcorner_detector(CORNER_FAST/CORNER_AGAST)، وmax_keypoints/scale_factor؛ وmatch_descriptor()مع كلمة مفتاحيةfilter_outliersوتقدير للدوران؛ وحفظ / تحميل النقاط المفتاحية.واجهات الكائنات — تُرجع
image.get_histogram()/get_statistics()/get_percentile()كائنات مدرج تكراري / إحصاءات؛ وتُرجعfind_blobs()كائنات كتلة (rect()/cx()/cy()/code()/area()/pixels()) معarea_threshold/pixels_threshold/merge/margin/invertوx_stride/y_stride.المستشعر — أُضيف
sensor.set_lens_correction(enable, radi, coef)لتظليل عدسة OV7725، وأصبحsensor.set_windowing()يقبل الآن أيضًا صفًا(w, h)(يُتمركز تلقائيًا)، وimage.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).أُضيفت برامج نصية أمثلة لتتبع الألوان، ووضع SPI/I2C-slave مع Arduino، والنقاط المفتاحية، والمدرج التكراري / الإحصاءات.
تغييرات وتحسينات أخرى¶
أصبح بإمكان IDE الآن مقاطعة
main.pyقيد التشغيل؛ وfind_blobs()/find_qrcodes()/get_statistics()أسرع؛ ويستخدم ORB مسافة هامنغ بطريقة popcount؛ ويستخدم تصحيح العدسة ذاكرة RAM أقل؛ وقاعدةudevفي Linux تمنع ModemManager من الاستيلاء على المنفذ التسلسلي.
إصلاحات الأخطاء¶
الكاميرا والتصوير:
إصلاح تنظيف / إبطال ذاكرة DMA المخبئية في M7 (الإطارات التالفة)، وسطر إضافي زائف في نهاية كل إطار، وحدود تجاوز مخزن إطارات JPEG، وتحرير مخزن الإطارات عند فشل
compress()، ودقة ORB / منطقة الاهتمام (ROI) / معالجة المجموعة الفارغة، وهندسةload_image(copy_to_fb=True).
النظام:
إصلاح دعم ADC في F7، واسم سجل في OV7725، وتوقيت محمّل الإقلاع / USB، واستخدام WFI أثناء انتظار اللقطات، وجعل مثال باث MJPEG غير حاجب مع مهلات لكل عميل.
دعم العتاد واللوحات¶
OpenMV Cam M7 (OpenMV 3) — دعم أولي للوحة.
OV7725 — دعم تصحيح العدسة (التظليل).
تغييرات جذرية في واجهة برمجة التطبيقات¶
تغييرات جذرية في واجهة برمجة التطبيقات المرئية للمستخدم بين v2.0.0 و v2.1.0. النطاق: وحدات Python C في modules/ ومكتبات Python في scripts/libraries/.
كل تغيير موسوم بأثره:
رئيسي — يؤثر على معظم البرامج النصية التي استخدمت الميزة؛ ستحتاج إلى نقل الشيفرة.
طفيف — واجهة ضيقة؛ يؤثر فقط على البرامج النصية التي استخدمتها.
سلوكي — الواجهة نفسها، نتائج مختلفة؛ أعد فحص البرامج النصية المضبوطة.
التغييرات مُجمَّعة حسب الأثر بهذا الترتيب. إذا كنت ترغب فقط في نقل شيفرتك، فانتقل إلى قائمة الترحيل في النهاية. كل تجزئة commit ترتبط بفرقها على GitHub.
استُبدل FREAK بـ ORB؛ أُعيدت صياغة واجهة الواصف (رئيسي)¶
أُزيل واصف النقاط المفتاحية FREAK واستُبدل بـ ORB: لم يعد image.FREAK موجودًا (استخدم image.ORB). لم تعد image.match_descriptor() / save_descriptor() / load_descriptor() تأخذ وسيط نوع واصف بادئًا (يُستنتج من الكائن)، ويُرجع match_descriptor() الآن صفًا من 8 عناصر (cx, cy, x, y, w, h, match_count, rotation) (العنصر الأخير عدد خام وليس نسبة مئوية)، ويتطلب draw_keypoints() كائن نقاط مفتاحية بدلاً من قائمة خام (x, y, angle). اكتسبت find_keypoints() corner_detector / max_keypoints / scale_factor بقيم افتراضية متغيّرة.
إعادة تسمية دالة المستشعر التلقائية (رئيسي)¶
أُعيدت تسمية sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() إلى sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (أُزيلت الأسماء القديمة). اكتسبت كل منها كلمة مفتاحية اختيارية value= لضبط قيمة يدوية بدلاً من التلقائي.
Commits: 1b22a2961
أُعيدت صياغة المدرج التكراري / الإحصاءات إلى واجهات كائنات (رئيسي)¶
أُعيدت صياغة سطح المدرج التكراري / الإحصاءات إلى image.get_histogram() / get_statistics() / get_percentile() القائمة على الكائنات والتي تُرجع كائنات مدرج تكراري / إحصاءات. أُزيلت نتائج المدرج التكراري / الإحصاءات المسطّحة القديمة وطرق bin_count / l_bin_count / a_bin_count / b_bin_count (استخدم len(histogram.bins()) وما إلى ذلك).
أُعيدت تسمية scale في find_features() (رئيسي)¶
أعادت image.find_features() (Haar) تسمية كلمتها المفتاحية scale= إلى scale_factor=. حدّث استدعاءات find_features(cascade, scale=...) إلى scale_factor=....
Commits: 96e4f770c
تُرجع find_blobs() كائنات؛ أُزيلت find_markers() (طفيف)¶
تُرجع image.find_blobs() الآن كائنات كتلة بمُوصِّلات مُسمّاة (لا يزال الوصول بالفهرس يعمل للتوافق العكسي)، وأُزيلت image.find_markers() — استخدم find_blobs(..., merge=True, margin=...) بدلاً منها. لم تعد دالة رد النداء لمرشح كتلة الألوان المتقدم مدعومة.
Commits: af15ec6eb
استُبدلت img.copy_to_fb() (طفيف)¶
استُبدلت طريقة img.copy_to_fb() بكلمة مفتاحية copy_to_fb= على image.Image / load_image(). استخدم image.Image(path, copy_to_fb=True) لتحميل الصور الكبيرة مباشرة إلى مخزن الإطارات.
Commits: 1645ab94b
ترفض compress() الجودة خارج النطاق (سلوكي)¶
تطلق image.compress() / compressed() الآن خطأً عندما تكون quality خارج النطاق 1–100 بدلاً من تقييدها بصمت. قيّد quality ضمن النطاق 1–100 قبل الاستدعاء. وبشكل منفصل، خُفِّض مخزن JPEG في OpenMV 3 من 64 كيلوبايت إلى 23000 بايت، لذا قد تطلق الإطارات الكبيرة الآن خطأ نفاد الذاكرة — اخفض جودة JPEG أو حجم الإطار.
أصبح تكبير lens_corr() فعّالًا الآن (سلوكي)¶
تطبّق image.lens_corr() الآن فعليًا وسيط zoom الخاص بها (كان يُحلَّل سابقًا لكنه غير فعّال)، لذا يختلف الخرج للبرامج النصية التي مرّرت تكبيرًا غير افتراضي. أعد فحص ضبط lens_corr().
Commits: d6b49adef
قائمة الترحيل¶
للنقل النظيف إلى v2.1.0، يكون العمل المعتاد كالتالي:
استبدل
image.FREAKبـimage.ORB، وأسقط وسيط نوع الواصف، وحدّث تفكيك صفmatch_descriptor()/draw_keypoints()إلى كائن النقاط المفتاحية (إعادة صياغة ORB).أعد تسمية
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()إلى صيغset_auto_*(إعادة تسمية الدالة التلقائية).انقل شيفرة المدرج التكراري / الإحصاءات إلى طرق الكائنات (إعادة صياغة المدرج التكراري / الإحصاءات).
أعد تسمية
scale=فيfind_features()إلىscale_factor=(إعادة تسمية find_features).استخدم مُوصِّلات كائن الكتلة واستبدل
find_markers()بـfind_blobs(merge=True, ...)(تغيير find_blobs)؛ واستبدلimg.copy_to_fb()بالكلمة المفتاحيةcopy_to_fb=(تغيير copy_to_fb).قيّد جودة
compress()ضمن النطاق 1–100 وأعد فحص أحجام JPEG على OpenMV 3 (تغيير compress)؛ وأعد ضبط تكبيرlens_corr()(تغيير lens_corr).
تعمل جميع البرامج النصية الأخرى دون تغيير.