linear_regression.py
# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# مثال الانحدار الخطي
#
# يوضح هذا المثال كيفية استخدام طريقة get_regression() على كاميرا OpenMV الخاصة بك
# للحصول على الانحدار الخطي لمنطقة اهتمام (ROI). باستخدام هذه الطريقة يمكنك بسهولة بناء
# روبوت يمكنه تتبع خطوط تشير جميعها إلى نفس الاتجاه العام
# لكنها غير متصلة فعليًا. استخدم find_blobs() على الخطوط المتصلة
# بشكل جيد للحصول على خيارات تصفية وتحكم أفضل.
#
# تعمل get_regression() في زمن O(N^2) على الصورة. للحفاظ على إمكانية التحكم بذلك
# فإنها تحجّم منطقة الاهتمام المصدر إلى ذاكرة مؤقتة قبل ملاءمة الخط؛
# حجم الذاكرة المؤقتة قابل للتهيئة عبر المعامل الاسمي target_size=(w, h)
# (الافتراضي (80, 60)). مرّر مجموعة أكبر للعمل بدقة أعلى.
import csi
import time
THRESHOLD = (0, 100) # عتبة التدرج الرمادي للأشياء الداكنة.
BINARY_VISIBLE = True # مرور ثنائي أولاً لمعرفة على ماذا يعمل الانحدار الخطي.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
clock = time.clock() # لمعالجة إطار أحيانًا.
while True:
clock.tick()
img = csi0.snapshot().binary([THRESHOLD]) if BINARY_VISIBLE else csi0.snapshot()
# تُرجع كائن خط مشابه لكائنات الخط التي تُرجعها find_lines() و
# find_line_segments(). لديك x1 وy1 وx2 وy2 وlength،
# وخصائص theta (الدوران بالدرجات) وrho وmagnitude.
#
# تمثل magnitude مدى جودة عمل الانحدار الخطي. بشكل عام،
# كلما زادت القيمة كان ذلك أفضل...
line = img.get_regression([(255, 255) if BINARY_VISIBLE else THRESHOLD])
if line:
img.draw_line(line, color=127)
print(
"FPS %f, mag = %s" % (clock.fps(), str(line.magnitude) if (line) else "N/A")
)
# حول قيم rho السالبة:
#
# صف (tuple) [theta+0:-rho] هو نفسه [theta+180:+rho].