import time, sensor, image
from image import SEARCH_EX, SEARCH_DS
sensor.reset()
sensor.set_contrast(1)
sensor.set_gainceiling(16)
sensor.set_framesize(sensor.VGA)
sensor.set_pixformat(sensor.GRAYSCALE)
clock = time.clock()
while (True):
clock.tick()
img = sensor.snapshot(copy_to_fb=False)
print(clock.fps())
grnm 发布的帖子
-
在使用snapshot(copy_to_fb=False)时,IDE缓冲区还是能看到图像,这是为啥?
-
RE: if uart.any():是在中断里执行么?
import sensor, image, time, math
from pyb import Pin,Timer,UARTuart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1,read_buf_len=10)LED1 = Pin('P9', Pin.OUT_PP, Pin.PULL_NONE)
LED1.value(True)
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE) #灰度图
sensor.set_framesize(sensor.VGA) # 640*480
sensor.set_windowing((640, 300)) # V Res of 80 == less work (40 for 2X the speed).
sensor.skip_frames(time = 1000)#延时1s等待设置生效
sensor.set_auto_gain(False) #关闭自动快门防止图像冲洗
clock = time.clock()
LED1.value(False)#启用定时器2,频率0.2,发送心跳反馈5s一次
def tick(timer):
LED1.value(True)
#uart.write("STRHBEND")#发送心跳反馈
#print("心跳STRHBEND")
time.sleep(1)
LED1.value(False)
tim = Timer(2, freq=0.2) # create a timer object using timer 2 - trigger at 1Hz
tim.callback(tick) # set the callback to our tick function#条码类型定义
def barcode_name(code):
if(code.type() == image.EAN2):
return "EAN2"
if(code.type() == image.EAN5):
return "EAN5"
if(code.type() == image.EAN8):
return "EAN8"
if(code.type() == image.UPCE):
return "UPCE"
if(code.type() == image.ISBN10):
return "ISBN10"
if(code.type() == image.UPCA):
return "UPCA"
if(code.type() == image.EAN13):
return "EAN13"
if(code.type() == image.ISBN13):
return "ISBN13"
if(code.type() == image.I25):
return "I25"
if(code.type() == image.DATABAR):
return "DATABAR"
if(code.type() == image.DATABAR_EXP):
return "DATABAR_EXP"
if(code.type() == image.CODABAR):
return "CODABAR"
if(code.type() == image.CODE39):
return "CODE39"
if(code.type() == image.PDF417):
return "PDF417"
if(code.type() == image.CODE93):
return "CODE93"
if(code.type() == image.CODE128):
return "CODE128"
#num=0#扫码计数
flag=0#串口接收标志位
uart_data=0#串口数据
cmd1=b'0'#命令字节1
cmd2=b'0'#命令字节2while(True):
clock.tick()
code_data="code_data"#条码相关信息
#读串口命令
if uart.any():
uart_data = uart.read(1).decode()#一个字节一个字节分析,避免命令数据间断问题
if (flag==0)&(uart_data=="S"):
flag=1
elif (flag==1)&(uart_data=="T"):
flag=2
elif (flag==2)&(uart_data=="R"):
flag=3
elif(flag==3): #接收命令段2字符
cmd1=uart_data
flag=4
elif(flag==4):
cmd2=uart_data
flag=5
elif(flag==5): #接收序号2字符
num1=uart_data
flag=6
elif(flag==6):
num2=uart_data
flag=7
elif(flag==7)&(uart_data=="E"):
flag=8
elif(flag==8)&(uart_data=="N"):
flag=9
elif(flag==9)&(uart_data=="D"):
flag=10
else:flag=0#收到STR_ _END 开始读码 if (flag==10)&(cmd1=="R")&(cmd2=="C") :#READ CODE命令 flag=0 #接收标志清零 img = sensor.snapshot() codes = img.find_barcodes() i = 0#条码个数统计 for code in codes: img.draw_rectangle(code.rect(),color=50,thickness=5) print_args = (barcode_name(code), code.payload(), code.quality(), clock.fps(),num1,num2) print("条码类型 %s, 码值 \"%s\", 数量 %d, 帧率 %f, 计数 %s%s" % print_args) #print(", 计数%d"%num)#不换行 , end = '' #计数值和条码位宽值位2位数,切条码位宽<21,直接发 if ( len(str(code.payload()))>9 ) & ( len(str(code.payload()))<21 ): #发送STRCV 计数值 条码位宽 条码值 END code_data=("STRCV%s%s%s%sEND"%(num1,num2,len(str(code.payload())), str(code.payload()))) elif len(str(code.payload())) < 10:#计数补一个字符0,凑足2位 #发送STRCV 计数值 "0"条码位宽 条码值 END code_data=("STRCV%s%s0%s%sEND"%(num1,num2,len(str(code.payload())), str(code.payload()))) i = i+1#条码个数统计 #LED1.value(False) #time.sleep(2) #判断有几个码 if i==1:#只有一个码,直接上传,指示灯闪亮一次 LED1.value(True) uart.write(code_data) LED1.value(False) else:#没有码或者多个码,报错,发NR uart.write("STRNR%s%sEND"%(num1,num2)) print("没有码, 帧率:%f,计数%s%s" % (clock.fps(),num1,num2 ) ) #flag=0 #心跳信号 elif(flag==10)&(cmd1=="H")&(cmd2=="B"): uart.write("STRHB%s%sEND"%(num1,num2) ) flag=0#清除命令接收标志
-
if uart.any():是在中断里执行么?
下面这段程序是在中断里执行么
if uart.any():
uart_data = uart.read(1).decode()#一个字节一个字节分析,避免命令数据间断问题
if (flag==0)&(uart_data=="S"):
flag=1
elif (flag==1)&(uart_data=="T"):
flag=2
elif (flag==2)&(uart_data=="R"):
flag=3
elif(flag==3): #接收命令段2字符
cmd1=uart_data
flag=4
elif(flag==4):
cmd2=uart_data
flag=5
elif(flag==5): #接收序号2字符
num1=uart_data
flag=6
elif(flag==6):
num2=uart_data
flag=7
elif(flag==7)&(uart_data=="E"):
flag=8
elif(flag==8)&(uart_data=="N"):
flag=9
elif(flag==9)&(uart_data=="D"):
flag=10
else:flag=0 -
pyb.uart和machine.uart有啥区别?
pyb.uart和machine.uart有啥区别?
from pyb import uart 和from machine import uart有啥区别 -
某个roi区域内的二维码识别不出来?
for code in img.find_datamatrices(roi=(55,46,63,65), effort = 200):
当二维码在图像边缘的时候用这个函数,设置roi参数,识别不出二维码,但是用
sensor.set_windowing((55,46,63, 65))
for code in img.find_datamatrices( effort = 200):
就可以识别到了,这是怎么回事? -
程序运行一半出现以下问题:
我的程序运行一半,突然崩了,是咋回事,代码如下:
#小车扫码测试3 #拍一张图先找圆,将其中某个区域复制出来,识别二维码 # 2021-1-25 -AGV小车测试扫码 #识别圆和二维码--2.3MM镜头,先识别圆的位置,截取小块图像,再找二维码,解决二维码在图像边缘无法识别问题 #发送数据格式:2byte帧头,1byte帧序号,1byte帧耗时,4byte码值,2byte左右偏移,2byte上下偏移,2byte角度,1byte校验和,共15byte import sensor, image, time, math from pyb import UART uart = UART(3, 19200) uart.init(19200, bits=8, parity=None, stop=1) sensor.reset() sensor.set_pixformat(sensor.GRAYSCALE) sensor.set_framesize(sensor.QVGA) # can be QVGA on M7... sensor.skip_frames(30) sensor.set_auto_gain(False) # must turn this off to prevent image washout... clock = time.clock() while(True): #sensor.set_windowing((0,0,320, 240)) #sensor.skip_frames(time=1) img = sensor.snapshot() clock.tick() #必须放在img = sensor.snapshot()下面 for c in img.find_circles(threshold = 8000, x_margin = 10, y_margin = 10, r_margin = 10, r_min = 37, r_max = 41, r_step = 1): img.draw_circle(c.x(), c.y(), c.r(), color = (200))#找到的圆画出来 print(c) img.draw_cross(160, 120, color = (250), size = 160, thickness = 1)#中心画个十字架 img2 = img.copy((c.x()-c.r(),c.y()-c.r(),2*c.r(),2*c.r()),1,1,copy_to_fb=False) matrices = img2.find_datamatrices(effort = 500) print(matrices) for code in matrices: data=bytearray([0xaa,0x4d,0,0,#帧头 int(code.payload()),int(code.payload())>>8,int(code.payload())>>16,int(code.payload())>>24,#]) #格式正确 int(c.x()-160),int(c.x()-160)>>8,int(c.y()-120),int(c.y()-120)>>8,#])#, #xy偏移量,可以发送 #int(100*(int(180*code.rotation())/math.pi-180)%36000),int(100*(int(180*code.rotation())/math.pi-180)%36000)>>8])# #角度,可发送 int(100*((int(180*code.rotation())/math.pi-180)%360)),int(100*((int(180*code.rotation())/math.pi-180)%360))>>8])# num=bytearray([ data[(0)]+data[(1)]+data[(2)]+data[(3)]+data[(4)]+data[(5)]+data[(6)]+data[(7)]+data[(8)]+data[(9)] +data[(10)]+data[(11)]+data[(12)]+data[(13)] ])#data校验和 uart.write(data) uart.write(num) #if not matrices: print("FPS %f" % clock.fps())
报错如下:Traceback (most recent call last):
File "", line 35, in
ValueError: invalid syntax for integer with base 10
MicroPython v1.12-omv-r1 OpenMV v3.6.9 2020-10-12; OPENMV4P-STM32H743
Type "help()" for more information. -
怎么把拍下来的图片截取其中的一部分保存下来?
怎么把拍下来的图片截取其中的一部分保存下来?比如说我拍了一张图片,发现其中有个特征是我想要的,我想把特征部分截取下来保存,怎么用代码实现?
-
在图像边缘区域识别DM二维码的问题
for code in img.find_datamatrices((55,46,63,65), effort = 200):
当二维码在图像边缘的时候用这个函数,设置roi参数,识别不出二维码,
但是用
sensor.set_windowing((55,46,63, 65))
for code in img.find_datamatrices( effort = 200):
就可以识别到了,这是为什么啊,这两种方法的区别是什么 -
RE: 找DM二维码只能识别图像中间区域的二维码,当把二维码移到图像边缘就识别不到了怎么回事?
@kidswong999 我已经把effort设置成5000了,还是不行呀,1000也试过都不行,而且还把搜索区域roi调的很小了,还是不行啊
-
RE: 找DM二维码只能识别图像中间区域的二维码,当把二维码移到图像边缘就识别不到了怎么回事?
我用的无畸变镜头,第一张图把二维码放图片中间可以识别,
第二张图把二维码放图像边缘就识别不了 -
找DM二维码只能识别图像中间区域的二维码,当把二维码移到图像边缘就识别不到了怎么回事?
import sensor, image, time sensor.reset() sensor.set_pixformat(sensor.GRAYSCALE) sensor.set_framesize(sensor.QVGA) # can be QVGA on M7... sensor.skip_frames(30) sensor.set_auto_gain(False) # must turn this off to prevent image washout... clock = time.clock() while(True): img = sensor.snapshot()#.lens_corr(0.47) clock.tick() #必须放在img = sensor.snapshot()下面 for code in img.find_datamatrices( effort = 200):#effort越大帧率越低,上限240,越小帧率越高下限160 print(code) print("FPS %f" % clock.fps())