التعرف المتزامن على اللون والشكل
الدرس المرئي 18 - دمج الخوارزميات: https://singtown.com/learn/50029/
يوضح هذا القسم كيفية إجراء التعرف على اللون والتعرف على الشكل في آنٍ واحد. لنأخذ التعرف على دائرة حمراء كمثال. أولًا، نقوم بالتعرف على الدائرة، ثم نجري إحصاءً للألوان داخل المنطقة الدائرية المكتشفة لتحديد ما إذا كان اللون الأكثر شيوعًا في تلك المنطقة هو الأحمر.
import csi, image, time
csi0 = csi.CSI()
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()
while(True):
clock.tick()
img = csi0.snapshot().lens_corr(1.8)
for c in img.find_circles(threshold = 3500, x_margin = 10, y_margin = 10, r_margin = 10,
r_min = 2, r_max = 100, r_step = 2):
area = (c.x-c.r, c.y-c.r, 2*c.r, 2*c.r)
#area هي منطقة الدائرة المكتشفة، أي المستطيل المحيط بالدائرة
statistics = img.get_statistics(roi=area)#إحصاء ألوان البكسل
print(statistics)
#(0,100,0,120,0,120) هي عتبة اللون الأحمر، لذا عندما يكون المنوال (أي اللون الأكثر تكرارًا) داخل المنطقة ضمن نطاق هذه العتبة، فهذا يعني أنها دائرة حمراء.
#l_mode، a_mode، b_mode هي منوال قناة L، وقناة A، وقناة B.
if 0<statistics.l_mode<100 and 0<statistics.a_mode<127 and 0<statistics.b_mode<127:#إذا كانت الدائرة حمراء
img.draw_circle((c.x, c.y, c.r), color = (255, 0, 0))#إحاطة الدائرة الحمراء المكتشفة بإطار دائري أحمر
else:
img.draw_rectangle(area, color = (255, 255, 255))
#إحاطة الدوائر غير الحمراء بإطار مستطيل أبيض
print("FPS %f" % clock.fps())