import sensor, image, time, ustruct
from pyb import UART, LED
RED_THRESHOLD = [(13, 65, 11, 42, -25, 27)]
BLACK_THRESHOLD = [(12, 34, -30, -2, -6, 22) ]
#BLACK_THRESHOLD = [(18, 34, -25, -4, -14, 13)]
ROI1 = (18,29,94,62)
ROI2 = (210,29,94,62)
num = 0
move = 0 #0空操作1停止2前进
move_flag = 0 #0空操作1左转2右转
cx = 0
cy = 0
ch = 0
cw = 0
area = 0
num = 0
#number1 = 0
number2 = 0
first_number = 0
match_number = 0
red = (255,0,0)
greed = (0,255,0)
blue =(0,0,255)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(5)
sensor.set_auto_gain(False)#关闭自动增益
sensor.set_auto_whitebal(False) # 必须关闭白平衡
sensor.set_hmirror(True)#水平方向翻转
sensor.set_vflip(True)#垂直方向翻转
clock = time.clock()
uart = UART(3,9600,timeout_char = 1000000)
#uart.write(bytearray([0xff,0xfe,0,1,1]))
#数字识别
def number():
number1 = 0
for blob in img.find_blobs(BLACK_THRESHOLD, pixels_threshold=500, area_threshold=5000, merge=True,roi=(160,0,160,240)):
img.draw_rectangle(blob.rect())
img.draw_cross(blob.cx(), blob.cy())
cx = blob.cx()
cy = blob.cy()
ch = blob.h()
cw = blob.w()
img.draw_rectangle(cx-int(cw/2),cy,cw,int(ch/2),color = red)
img.draw_cross(cx, cy+int(ch/4), size=5, color=red)
for blob1 in img.find_blobs(BLACK_THRESHOLD, roi=(cx-int(cw/2),cy,cw,int(ch/2)),pixels_threshold=50, area_threshold=300, merge=True):
'''print("面积1 = ",blob1.area())
print("像素点1 = ",blob1.density())'''
area = blob1.area()*blob1.density()
area1 = blob1.area()*blob1.area()/blob1.density()
'''print("面积1.1 = ",area)
print("面积1.2 = ",area1)
print("\n")'''
if(400<area<1200):
#print("222")
if(0.35<blob1.density()<0.45 and 600<area<900 and area1 < 1.25e+07):
number1 = 3
print("number1 = 3")
elif(0.3<blob1.density()<0.4 and 280<area<500):
number1 = 7
print("number1 = 7")
if(number1 != 0):
num = number1
return(num or 0)
area = blob1.area()*blob1.density()
area1 = blob1.area()*blob1.area()/blob1.density()
area = blob1.area()*blob1.density()
area1 = blob1.area()*blob1.area()/blob1.density()
if(400<area<900):
print("222")
if(0.35<blob1.density()<0.45 and 600<area<900 and area1 < 1.15e+07):
number1 = 3
print("number1 = 3")
elif(0.3<blob1.density()<0.4 and 280<area<500):
number1 = 7
print("1 = 7")
if(2000<blob1.area()<2800):
if(blob1.density()>0.43 and area > 900):
number1 = 8
print("number1 = 8")
if(500<area<1100):
# print("333")
if(0.48 < blob1.density() < 0.55 and area < 1500):
number1 = 2
print(111)
print("number1 = 2")
elif(0.35<blob1.density()<0.4 and 800<area<900 and 1.45e+07 > area1 > 1.3e+07):
number1 = 4
print("number1 = 4")
elif(0.35 < blob1.density() < 0.45 and area > 900 and blob1.area() < 2450 and 1.45e+07 > area1 > 1.3e+07):
number1 = 6
print("number1 = 6")
if(0.2<blob1.density()<0.35):
if(700<area<900 and blob1.area() > 2300):
number1 = 5
print("number1 = 5")
if(number != 0):
num = number1
return(num)
for blob in img.find_blobs(BLACK_THRESHOLD, pixels_threshold=1500, area_threshold=5000, merge=True,roi=(0,0,160,240)):
img.draw_rectangle(blob.rect())
img.draw_cross(blob.cx(), blob.cy())
cx = blob.cx()
cy = blob.cy()
ch = blob.h()
cw = blob.w()
img.draw_rectangle(cx-int(cw/2),cy,cw,int(ch/2),color = red)
img.draw_cross(cx, cy+int(ch/4), size=5, color=red)
for blob2 in img.find_blobs(BLACK_THRESHOLD, roi=(cx-int(cw/2),cy,cw,int(ch/2)),pixels_threshold=50, area_threshold=300, merge=True):
print("面积2 = ",blob2.area())
print("像素点2 = ",blob2.density())
area = blob2.area()*blob2.density()
area2 = blob2.area()*blob2.area()/blob2.density()
print("面积2.1 = ",area)
print("面积2.2 = ",area2)
'''if(blob2.area()<5000):
if(area==0):
number2 = 1;
print("number2 = 1")'''
if(400<area<900):
print("222")
if(0.35<blob2.density()<0.45 and 600<area<900 and area2 < 1.15e+07):
number2 = 3
print("number2 = 3")
elif(0.3<blob2.density()<0.4 and 280<area<500):
number2 = 7
print("number2 = 7")
if(2200<blob2.area()<2800):
if(blob2.density()>0.45 and area > 1050):
number2 = 8
print("number2 = 8")
if(500<area<1100):
#print("333")
if(0.45 < blob2.density() < 0.55 and area < 1500):
number1 = 2
print("number2 = 2")
elif(0.35<blob2.density()<0.45 and 930<area<1100 and area2 > 1.35e+07):
number2 = 4
print("number2 = 4")
elif(0.41 < blob2.density() < 0.45 and area > 950 and blob2.area() < 2450 and 1.36e+07 > area2 > 1.25e+07):
number2 = 6
print("number2 = 6")
if(0.2<blob2.density()<0.35):
if(700<area<900 and blob2.area() > 2300):
number2 = 5
print("number2 = 5")
while(True):
clock.tick()
match_blob1 = 0
match_blob2 = 0
img = sensor.snapshot().lens_corr(strength = 1.8,zoom = 1)
#LED(1).on()
#画ROI区域
img.draw_rectangle(ROI1, thickness = 2, fill = False)
img.draw_rectangle(ROI2, thickness = 2, fill = False)
img.draw_rectangle(160,0,160,240,color=greed)
img.draw_rectangle(160,0,160,240,color=blue)
#识别数字first_munber
first_number = 2
data = bytearray([0xff, 0xfe, move, first_number, move_flag])
uart.write(data)
print(data)
#if first_number is not None:
# print("true")
#识别到十字路口
for blob in img.find_blobs(RED_THRESHOLD, roi = ROI1, area_threshold = 500, merge=True):
if blob.code() == 1:
match_blob1 = 1
img.draw_rectangle(blob.rect())
for blob in img.find_blobs(RED_THRESHOLD, roi = ROI2, area_threshold = 500, merge=True):
if blob.code() == 1:
match_blob2 = 1
img.draw_rectangle(blob.rect())
if(match_blob1 == 1 or match_blob2 == 1):
move = 1
data = bytearray([0xff,0xfe,move,first_number, move_flag])
uart.write(data)
print(data)
if(first_number == 1 or first_number == 2):
if(first_number == 1):
#move = 1
move_flag = 1
data = bytearray([0xff,0xfe,move,first_number, move_flag])
uart.write(data)
print(data)
elif(first_number == 2):
move = 3
move_flag = 2
data = bytearray([0xff,0xfe,move,first_number, move_flag])
uart.write(data)
print(data)
else:
move = 1
data = bytearray([0xff,0xfe,move,first_number, move_flag])
uart.write(data)
print(data)
#识别数字match_munber
match_number = number()
if(match_number == first_number):
#右转
if(cx>80):
move_flag = 2
data = bytearray([0xff,0xfe,move,match_number, move_flag])
uart.write(data)
print(data)
#左转
elif(cx<80):
move = 0
move_flag = 1
data = bytearray([0xff,0xfe,move,match_number, move_flag])
uart.write(data)
print(data)
elif(match_number != first_number):
move = 2
data = bytearray([0xff,0xfe,move,first_number, move_flag])
uart.write(data)
print(data)
#识别黑色虚线
'''for blob in img.find_blobs(BLACK_THRESHOLD, area_threshold = 1000, merge=True):
if blob.code() == 1:
move_flag = 0
img.draw_rectangle(blob.rect())
data = bytearray([0xff,0xfe,move,first_number, move_flag])
uart.write(data)
print(data)'''
X
xvb2
@xvb2
0
声望
2
楼层
247
资料浏览
0
粉丝
0
关注
xvb2 发布的帖子
-
RE: 运行途中出现Sensor Timerout!,怎么解决