التعرف المتزامن على اللون ومطابقة القوالب

الدرس المرئي 18 - الجمع بين الخوارزميات: https://singtown.com/learn/50029/

يشارك هذا القسم كيفية إجراء التعرف على اللون ومطابقة القوالب في آن واحد. لنأخذ التعرف على قوالب الأرقام الحمراء والخضراء كمثال. أولًا، نقوم بالتعرف على اللون، ثم نقوم بالتعرف على القالب داخل منطقة اللون التي تم التعرف عليها.

صورة التعرف لدينا هي كالتالي:

قبل تشغيل البرنامج، احفظ صورة القالب الخاصة بنا على بطاقة SD.

# مثال المطابقة متعددة الألوان ومتعددة القوالب
#
# يوضح هذا المثال تتبع الألوان المتعددة باستخدام OpenMV.

import csi, image, time
csi0 = csi.CSI()

from image import SEARCH_EX, SEARCH_DS

# عتبات تتبع اللون (L Min, L Max, A Min, A Max, B Min, B Max)
# العتبات أدناه تتبع الأشياء ذات اللون الأحمر/الأخضر بشكل عام. يمكنك تعديلها حسب الحاجة...
thresholds = [(30, 100, 15, 127, 15, 127), # generic_red_thresholds
              (30, 100, -64, -8, -32, 32), # generic_green_thresholds
              (0, 15, 0, 40, -80, -20)] # generic_blue_thresholds
# لا تتجاوز 16 عتبة لونية
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QQVGA)
csi0.snapshot(time = 2000)
csi0.auto_gain(False) # يجب إيقاف هذا الخيار عند تتبع الألوان
csi0.auto_whitebal(False) # يجب إيقاف هذا الخيار عند تتبع الألوان
clock = time.clock()

# فقط المناطق التي يزيد عدد بكسلاتها عن "pixel_threshold" وتزيد مساحتها عن "area_threshold" هي التي
# تُعيدها دالة "find_blobs" أدناه. إذا غيّرت دقة الكاميرا،
# فقم بتغيير "pixels_threshold" و"area_threshold". الخيار "merge = True" يدمج جميع الكتل (blobs) المتداخلة في الصورة.

templates = ["0.pgm", "1.pgm", "2.pgm", "6.pgm"] #حفظ عدة قوالب

while(True):
    clock.tick()
    img = csi0.snapshot()
    for blob in img.find_blobs(thresholds, pixels_threshold=200, area_threshold=200):
        #img.draw_rectangle(blob.rect)
        #img.draw_cross((blob.cx, blob.cy))
        #print(blob.code)

        img = img.to_grayscale()
        for t in templates:
            template = image.Image(t)
            #تكرار على كل قالب لإجراء مطابقة القوالب
            r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
        #find_template(template, threshold, [roi, step, search])، وفي threshold
        #القيمة 0.7 هي عتبة التشابه (similarity threshold)، وroi هي منطقة المطابقة (رأسها العلوي الأيسر عند (10، 0)، بطول 80 وعرض 60)،
        #لاحظ أن حجم roi يجب أن يكون أكبر من صورة القالب وأصغر من إطار الصورة (framebuffer).
        #تمييز الصورة المطابقة
            if r:
                img.draw_rectangle(r, color=0)
                print(blob.code, t) #طباعة اسم القالب
                #إذا كان اللون أحمر، فإن blob.code==1؛ وإذا كان أخضر، فإن blob.code==2.
                #إذا كان الرقم 0، فإن t=="0.pgm"؛ وإذا كان الرقم 1، فإن t=="1.pgm".


    #print(clock.fps())

تأثير تشغيل البرنامج كما يلي:

مخرجات نتيجة التشغيل في الطرفية (terminal):

results matching ""

    No results matching ""