@kidswong999 那请问 我该怎么样才能得到一个参数 让它输出的是这个扫描到的数字号 现在我只能知道它是否扫到 。不知道是数字几 传输不出去
bxr1 发布的帖子
-
RE: 为什么模板匹配 我打印t 是一堆数字 按官方的应该是我的文件名
-
RE: 怎么才能知道扫描到这张图片在我的templates组中 是在什么位置 templates[1] 还是多少。
我打印了一下 无论扫什么 photo,index(t) 打印出来都是 1 2 3 4 5 6 7 8 9 10 11
-
RE: 为什么模板匹配 我打印t 是一堆数字 按官方的应该是我的文件名
我的模板匹配为什么打印的是这个。 我目的是为了得到这个扫描到模板的文件名 然后写它在列表的哪个位置 现在它怎么打印这些东西
-
为什么模板匹配 我打印t 是一堆数字 按官方的应该是我的文件名
import time, sensor, image,pyb from image import SEARCH_EX, SEARCH_DS from pyb import UART import ustruct from pyb import LED one=LED(1) #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX, #SEARCH_DS两个需要的部分,而不把image模块全部引入。 clock = time.clock() # Reset sensor sensor.reset() # Set sensor settings sensor.set_contrast(1) #设置对比度 sensor.set_gainceiling(16) #设定增益曲线 sensor.set_framesize(sensor.QQVGA) sensor.set_pixformat(sensor.GRAYSCALE) #串口3定义 uart1 = UART(3,115200) #定义串口3变量 uart1.init(115200, bits=8, parity=None, stop=1) # init with given parameters def sending_data(cx,cy): global uart1; #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B]; #data = bytearray(frame) datasum=ustruct.pack("<bbhhhhb", #格式为俩个字符俩个短整型(2字节) 0x2C, #帧头1 0x12, #帧头2 int(cx), # up sample by 4 #数据1 int(cy), # up sample by 4 #数据1 0x5B) uart1.write(datasum); #必须要传入一个字节数组 #初始模板 templatedemo = ["/1.pgm", "/2.pgm", "/3.pgm", "/4.pgm","/5.pgm", "/6.pgm", "/7.pgm", "/8.pgm"] ##分类模板 templates = (["/3.pgm", "/32.pgm", "/33.pgm", "/34.pgm","/35.pgm", "/36.pgm"], ["/4.pgm", "/42.pgm", "/43.pgm", "/44.pgm","/45.pgm", "/46.pgm"], ["/5.pgm", "/52.pgm", "/53.pgm", "/54.pgm","/55.pgm", "/56.pgm"], ["/6.pgm", "/62.pgm", "/63.pgm", "/64.pgm","/65.pgm", "/66.pgm"], ["/7.pgm", "/72.pgm", "/73.pgm","/74.pgm","/75.pgm", "/76.pgm","/701.pgm","/702.pgm","/703.pgm","/704.pgm","/705.pgm","/706.pgm"], ["/8.pgm","/82.pgm", "/83.pgm", "/84.pgm","/85.pgm", "/86.pgm","/801.pgm","/802.pgm","/803.pgm","/804.pgm","/805.pgm","/806.pgm"]) #8\ imgarray=[0,0,0,0,0,0,0,0] imgarrays=[0,0,0,0,0,0,0,0,0,0,0,0] first=0 cx=0 cy=0 def get_first(img):#病房号识别输入 返回一到八 判断初始模板 #print("get_first") global imgarray r = img.find_template(imgarray[0], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 1 r = img.find_template(imgarray[1], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 2 r = img.find_template(imgarray[2], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 3 r = img.find_template(imgarray[3], 0.7 ,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 4 r = img.find_template(imgarray[4], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 5 r = img.find_template(imgarray[5], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 6 r = img.find_template(imgarray[6], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 7 r = img.find_template(imgarray[7], 0.7, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 8 return 0 '''def isget(num):#判断是否输入成功 if num is not 0: for i in range (num): one.on() print(num) #使用时删除 给自己看的 time.sleep_ms(100) one.off() time.sleep_ms(100) cx = num''' def getimgs(imgarr): i=0 #print("getimgs") for t in imgarr: imgarrays[i]=image.Image((t)) #print(imgarrays[i]) i+=1 return imgarrays def match_img(photos,img):#模板匹配 isget=0 #print("match_img") for t in photos: print("tt",t) r = img.find_template(t, 0.50, step=4, search=SEARCH_EX)#不能将int转换为type if r: img.draw_rectangle(r) isget=1 break else: pass if isget==1: sending_data(0x37,0x12) #55 isget=0 else: sending_data(0x73,0x21) #115 def loadimg(): #导入正常图片八张 #print("loading") i=0 for t in templatedemo: imgarray[i]=image.Image(str(t)) i+=1 return imgarray imgarray=loadimg() #加载初始八张图 while (True): clock.tick() img = sensor.snapshot() if imgarrays[0]!=0: match_img(imgarrays,img)#比对当前帧图片与加载进来的模板库匹配 '''cy=int(img)''' print("y:",cy) else: if first==0: #获取初始图片标志位 first=get_first(img) #first用于判断当前是那张图片 if first is not 0: for i in range (first): one.on() print(first) #使用时删除 给自己看的 time.sleep_ms(100) one.off() time.sleep_ms(100) cx = first#亮灯提醒是否识别到初始图片 print("1:",cx) elif first==1: sending_data(0x10) # 确定是1 elif first==2: sending_data(0x20) #确定是2 elif imgarrays[0]==0: #确定图片缓冲区第一次是空 imgarrays=getimgs(templates[first-3])#load photo 加载图片 执行一次 else:#之后程序只会在这里执行 pass FH = bytearray([0x2C,0x12,cx,cy,0x5B]) print("6:",cx) uart1.write(FH) print("FPS:",clock.fps())#帧率显示
print(t)的值:tt {"w":70, "h":96, "type"="grayscale", "size":6720}
tt {"w":60, "h":68, "type"="grayscale", "size":4080}
tt {"w":60, "h":68, "type"="grayscale", "size":4080}
tt {"w":60, "h":68, "type"="grayscale", "size":4080}
tt {"w":60, "h":68, "type"="grayscale", "size":4080}
tt {"w":60, "h":68, "type"="grayscale", "size":4080}
tt {"w":60, "h":65, "type"="grayscale", "size":3900}
tt {"w":60, "h":48, "type"="grayscale", "size":2880}
tt {"w":60, "h":53, "type"="grayscale", "size":3180}
tt {"w":60, "h":53, "type"="grayscale", "size":3180}
tt {"w":60, "h":47, "type"="grayscale", "size":2820}
tt {"w":60, "h":53, "type"="grayscale", "size":3180} -
RE: 我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题
@kidswong999 我之前写了一个 list=[0x2C,0x12,cx,0x5B] 然后再添加进list 再把list放入bytearray 变成bytearray(list)
然后我打印bytearray 加入的东西是不在里面的 -
怎么才能知道扫描到这张图片在我的templates组中 是在什么位置 templates[1] 还是多少。
全部的程序在上面
def match_img(photos,img):#模板匹配
isget=0
#print("match_img")
for t in photos:
#print(t)
r = img.find_template(t, 0.50, step=4, search=SEARCH_EX)#不能将int转换为type
if r:
img.draw_rectangle(r)
isget=1这段是在做模板匹配 我想知道 我怎么样才能知道 我识别到的图片是数字几 然后从串口传出来。
换种方式问 就是 我想知道 怎么才能知道扫描到这张图片在我的templates组中 是在什么位置 templates[1] 还是多少。 -
RE: 我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题
怎么解决 我查了网上资料 bytearray([0x2C,0x12,0x5B]) 我用了 bytearray.insert(2,cx) 却给报错
-
我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题
import time, sensor, image,pyb from image import SEARCH_EX, SEARCH_DS from pyb import UART import ustruct from pyb import LED one=LED(1) #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX, #SEARCH_DS两个需要的部分,而不把image模块全部引入。 clock = time.clock() # Reset sensor sensor.reset() # Set sensor settings sensor.set_contrast(1) #设置对比度 sensor.set_gainceiling(16) #设定增益曲线 sensor.set_framesize(sensor.QQVGA) sensor.set_pixformat(sensor.GRAYSCALE) #串口3定义 uart1 = UART(3,115200) #定义串口3变量 uart1.init(115200, bits=8, parity=None, stop=1) # init with given parameters def sending_data(cx,cy): global uart1; #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B]; #data = bytearray(frame) datasum=ustruct.pack("<bbhhhhb", #格式为俩个字符俩个短整型(2字节) 0x2C, #帧头1 0x12, #帧头2 int(cx), # up sample by 4 #数据1 int(cy), # up sample by 4 #数据2 0x5B) uart1.write(datasum); #必须要传入一个字节数组 #初始模板 templatedemo = ["/1.pgm", "/2.pgm", "/3.pgm", "/4.pgm","/5.pgm", "/6.pgm", "/7.pgm", "/8.pgm"] ##分类模板 templates = (["/3.pgm", "/32.pgm", "/33.pgm", "/34.pgm","/35.pgm", "/36.pgm"], ["/4.pgm", "/42.pgm", "/43.pgm", "/44.pgm","/45.pgm", "/46.pgm"], ["/5.pgm", "/52.pgm", "/53.pgm", "/54.pgm","/55.pgm", "/56.pgm"], ["/6.pgm", "/62.pgm", "/63.pgm", "/64.pgm","/65.pgm", "/66.pgm"], ["/7.pgm", "/72.pgm", "/73.pgm","/74.pgm","/75.pgm", "/76.pgm","/701.pgm","/702.pgm","/703.pgm","/704.pgm","/705.pgm","/706.pgm"], ["/8.pgm","/82.pgm", "/83.pgm", "/84.pgm","/85.pgm", "/86.pgm","/801.pgm","/802.pgm","/803.pgm","/804.pgm","/805.pgm","/806.pgm"]) #8\ imgarray=[0,0,0,0,0,0,0,0] imgarrays=[0,0,0,0,0,0,0,0,0,0,0,0] first=0 def get_first(img):#病房号识别输入 返回一到八 判断初始模板 #print("get_first") global imgarray r = img.find_template(imgarray[0], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 1 r = img.find_template(imgarray[1], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 2 r = img.find_template(imgarray[2], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 3 r = img.find_template(imgarray[3], 0.7 ,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 4 r = img.find_template(imgarray[4], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 5 r = img.find_template(imgarray[5], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 6 r = img.find_template(imgarray[6], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 7 r = img.find_template(imgarray[7], 0.7, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: img.draw_rectangle(r) return 8 return 0 '''def isget(num):#判断是否输入成功 if num is not 0: for i in range (num): one.on() print(num) #使用时删除 给自己看的 time.sleep_ms(100) one.off() time.sleep_ms(100) cx = num''' def getimgs(imgarr): i=0 #print("getimgs") for t in imgarr: imgarrays[i]=image.Image((t)) #print(imgarrays[i]) i+=1 return imgarrays def match_img(photos,img):#模板匹配 isget=0 #print("match_img") for t in photos: #print(t) r = img.find_template(t, 0.50, step=4, search=SEARCH_EX)#不能将int转换为type if r: img.draw_rectangle(r) isget=1 break else: pass if isget==1: sending_data(0x37,0x12) #55 isget=0 else: sending_data(0x73,0x21) #115 def loadimg(): #导入正常图片八张 #print("loading") i=0 for t in templatedemo: imgarray[i]=image.Image(str(t)) i+=1 return imgarray imgarray=loadimg() #加载初始八张图 FH = bytearray([0x2C,0x12,0x5B]) while (True): clock.tick() img = sensor.snapshot() if imgarrays[0]!=0: match_img(imgarrays,img)#比对当前帧图片与加载进来的模板库匹配 else: if first==0: #获取初始图片标志位 first=get_first(img) #first用于判断当前是那张图片 if first is not 0: for i in range (first): one.on() print(first) #使用时删除 给自己看的 time.sleep_ms(100) one.off() time.sleep_ms(100) cx = first#亮灯提醒是否识别到初始图片 bytearray.insert(2,cx) print(FH) uart1.write(FH) elif first==1: sending_data(0x10) # 确定是1 elif first==2: sending_data(0x20) #确定是2 elif imgarrays[0]==0: #确定图片缓冲区第一次是空 imgarrays=getimgs(templates[first-3])#load photo 加载图片 执行一次 else:#之后程序只会在这里执行 pass print("FPS:",clock.fps())#帧率显示 ![0_163.png](https://fcdn.singtown.com/f30779fd-a09c-47ef-b3f8-65e78a52cfb6.png)
-
我在用多模板匹配的时候,遇到帧率低的问题
我在用多模板匹配的时候,用了三个组,测试的时候一共11张图,目前帧率2.0多一点。 我减少四张,帧率变成3.0多一些。 还有别的方法能解决帧率低问题吗,这样我没有保存几个模板就已经快运行不动了,然后神经网络又不能同时识别两个数字,只能用匹配了
-
模板匹配和神经训练可以一起用吗
# Template Matching Example - Normalized Cross Correlation (NCC) # # 这个例子展示了如何使用OpenMV凸轮的NCC功能将小部分图像与图像的各个部分 # 进行匹配...期望获得极其可控的环境NCC并不是全部有用的。 # # 警告:NCC支持需要重做!到目前为止,这个功能需要做大量的工作才能有用。 # 这个脚本将重新表明功能的存在,但在目前的状态是不足的。 import time, sensor, image from image import SEARCH_EX, SEARCH_DS #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX, #SEARCH_DS两个需要的部分,而不把image模块全部引入。 # Reset sensor sensor.reset() # Set sensor settings sensor.set_contrast(1) sensor.set_gainceiling(16) # Max resolution for template matching with SEARCH_EX is QQVGA sensor.set_framesize(sensor.QQVGA) # You can set windowing to reduce the search image. #sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60)) sensor.set_pixformat(sensor.GRAYSCALE) # Load template. # Template should be a small (eg. 32x32 pixels) grayscale image. templates = ["/0.pgm", "/1.pgm", "/2.pgm", "/6.pgm"] #保存多个模板 #加载模板图片 clock = time.clock() # Run template matching while (True): clock.tick() img = sensor.snapshot() # find_template(template, threshold, [roi, step, search]) # ROI: The region of interest tuple (x, y, w, h). # Step: The loop step used (y+=step, x+=step) use a bigger step to make it faster. # Search is either image.SEARCH_EX for exhaustive search or image.SEARCH_DS for diamond search # # Note1: ROI has to be smaller than the image and bigger than the template. # Note2: In diamond search, step and ROI are both ignored. 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是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形), #注意roi的大小要比模板图片大,比frambuffer小。 #把匹配到的图像标记出来 if r: img.draw_rectangle(r) print(t) #打印模板名字 #print(clock.fps())