c3mg
@c3mg
c3mg 发布的帖子
-
RE: 为什么openmv串口接收大量数据时会报错?
代码比较多,这里放最关键的一个函数。这个函数是让32发送一个JPEG图片的数据包到OPENMV,这个函数得到的参数Imagelen是JPEG图片数据流的字节数,times是我根据每次读40个字节,计算出来总共要读的次数。当32发送320240图片,字节数大概在5000左右,如果波特率是9600或者19200,OPENMV可以收到,如果波特率增大,或者发送的图片变成640480,图中while函数里面的for i in range(0, len(re_data)): 就会报错,说我的re_data没有长度,请问这是什么原因?
-
为什么openmv串口接收大量数据时会报错?
uart = UART(1, 38400, timeout_char=1000) uart.init(38400, bits=8, parity=None, stop=1, timeout_char=1000) clock = time.clock() def getImagefrom32(Imagelen,times): count = 0 print("This is getImagefrom32") Imagedata='' sendimage=[0x73,0x65,0x6E,0x64,0x69,0x6D,0x61,0x67,0x65,0x0d,0x0a] uart.write(bytearray(sendimage)) time.sleep_ms(20) while(True): if uart.any(): for i in range(times): if (i+1) !=times: re_data=uart.read(40) for i in range(0, len(re_data)): Imagedata = Imagedata + (hex(int(re_data[i]))).upper()[2:] count = count+1 print("count= ",count,"len of Imagedata= ",len(Imagedata)/2) else : number = Imagelen-40*i re_data=uart.read(number) for i in range(0, len(re_data)): Imagedata = Imagedata + (hex(int(re_data[i]))).upper()[2:] count = count+1 print("count= ",count) break print("len of Imagedata: ",len(Imagedata)) ![0_1679385633651_联想截图_20230321160026.png](https://fcdn.singtown.com/dddaefcf-90d9-4f94-b529-3e539446c636.png) 代码比较多,这里放最关键的一个函数。这个函数是让32发送一个JPEG图片的数据包到OPENMV,这个函数得到的参数Imagelen是JPEG图片数据流的字节数,times是我根据每次读40个字节,计算出来总共要读的次数。当32发送320*240图片,字节数大概在5000左右,如果波特率是9600或者19200,OPENMV可以收到,如果波特率增大,或者发送的图片变成640*480,图中while函数里面的for i in range(0, len(re_data)): 就会报错,说我的re_data没有长度,请问这是什么原因?
-
请问openmv串口收到数据只要不读,数据还会一直在哪里吗,直到我去读它
我串口先发送一个命令,对方会回数据,收到的数据会一直在缓存区里,直到我if uart.any,是这样吗
-
RE: 为什么lepton热成像模块接上去电脑不识别OPENMV了?
@kidswong999 板子的生产者说是根据openmv官方在github上开源的资料生产的,他自己也是openmv的贡献者,我的lepton也是在星瞳官方店买的。在我是openmv4 plus,摄像头位置不放或者放plus自带的摄像头USB插上电脑时可以识别到32M的空间,板子的led灯会闪烁,但是插着lepton就没任何反应,会不会是lepton内部电路短路了,自动保护了之类的问题
-
RE: 为什么lepton热成像模块接上去电脑不识别OPENMV了?
@kidswong999 我的这个OPENMV好像是从另外的店买的,根据GITHUB上面的开源资料生产的,是否是这个原因呢
-
为什么OPENMV用串口接收图片数据会丢一部分?
串口使用的是uart = UART(1,38400)下面是接收数据的关键函数
def getImage(getimage,len1,len2): length = len1+len2+10 if (length%40)!=0: times=int(length/40)+1; else: times=int(length/40) print("this is length,",length) uart.write(bytes(getimage)) time.sleep_ms(100) Imagedata=bytes([]) for i in range(times): if uart.any(): if (i+1) !=times: re_data=uart.read(40) Imagedata += re_data time.sleep_ms(10) else : number = length-40*i re_data=uart.read(number) Imagedata += re_data time.sleep_ms(10) count=0 lenImageData=len(Imagedata) print("This is len Imagedata before:",lenImageData) for i in Imagedata: print(i,end=" ") count+=1 if count>0 and (count%40==0): print("\n") print("\n\n") print("This is len Imagedata before:",len(Imagedata)) Imagedata = Imagedata[5:] lenImageData=len(Imagedata) lenImageData-=5 Imagedata = Imagedata[:lenImageData] print("This is len Imagedata after:",len(Imagedata)) for i in Imagedata: print(i,end=" ") count+=1 if count>0 and (count%40==0): print("\n") return Imagedata
下面是print打印出来的几个关键信息:
This is len1 and len2: 19 3
this is length, 4877
This is len Imagedata before: 4631
This is len Imagedata after: 4621在上面的打印信息中,4877为我应该接受到的数据字节数,为JPEG图片经压缩后的数据流的长度,我前期测试发现如果用if uart.any():re_data=uart.readline()一次只能读47个字节,所以我设置每次读40个字节,同时可以通过我应该接收到的字节数算出我要读几次。我通过打印接收到的数据,可以判断出头和尾固定的数据字节是对的,但是会造成中间有数据丢失,同时我在使用for循环接收数据时,每次还必须进行5-10ms的延时,不然字节丢失会更严重,请问是为什么?
-
openmv得到JPEG图片的数据包后可以生成图片吗?
用串口摄像头发送十六进制的数据,在电脑python上面可以用以下代码将JPEG图片的数据包生成图片:
picture_bytes = binascii.unhexlify(test_hex) 将十六进制转换为二进制picture_stream = io.BytesIO(picture_bytes)
image = Image.open(picture_stream)
最后一行用了PIL的Image库,请问openmv有这种功能吗
如果没有的话,openmv写数据生成.JPEG图片是要重启后才能在磁盘里面看到图片嘛? -
有没有大佬试过开发lepton3.5的板子接到openmv的P0到P5口上
请问有没有大佬试过自己弄一块lepton3.5的板子接到openmv板子上的P0到P5接口,这样的话就可以可见光和红外摄像头一起使用了。但似乎驱动程序得自己写?