我们是学算法的,对于串口通信没有怎么接触过,网上大多数利用单片机进行数据采集。上一篇文章,读取到了数据但是数据清洗出现问题。本来应该是256*288的图片,但是采集到的图片只有128*288的图片。经过查资料,以及在网站提问,最终发现问题所在在as608手册中很明显的说明了这里一个4bit代表一个像素,所以说我们要把接收到的8bit数据转化位4bit的数据,但是电脑默认的灰度值是0-255,4bit数据只能代表0-16。我们这里需要将数转化一下,一般是进行移位再进行利用掩码(这种方法望读者自己网络查找,很多),我使用的是一种比较取巧的方法,将二进制数转化为10进制数后对16取整,取余得到高,低四位(高位4bit和低位4bit的数据)。
下面是我的代码(因为我查资料的时候,很多的私密了,我和作者聊,我觉得这个功能很简单,但是要收我2000yuan,很气愤,所以免费发了)愿能帮助到后面的和我一样的大学生社畜。
def add_3000_picture():
uart=serial.Serial(port="COM3",
baudrate=9600*6,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=8,
timeout=1
)
uart.reset_input_buffer() # 清空串口缓冲区
a=uart.write(bytearray.fromhex("EF01 FFFFFFFF 01 0003 01 0005"))
data=uart.read(a) #发送录取图像命令查看应答
b=uart.write(bytearray.fromhex("EF01 FFFFFFFF 01 0003 0a 000e"))
data1 = b''
while True:
data = uart.read(4096) # 读取一次最多4096字节
if not data: # 如果读取完了就跳出循环
break
data1 += data
uart.flush()
uart.close()
return data1
#print(len(data1)) # 打印实际读取的字节数
def savepicture(data,name):
data6=[]
for i in data:
data6.append(i)
lenth=len(data6)
index=[]
for i in range(lenth-8):#获取包头
if (data6[i]==239 and data6[i+1]==1 and data6[i+2]==255 and data6[i+3]==255 and data6[i+4]==255 and data6[i+5]==255 and data6[i+6]==2 and data6[i+7]==0):
index.append(i)
elif (data6[i]==239 and data6[i+1]==1 and data6[i+2]==255 and data6[i+3]==255 and data6[i+4]==255 and data6[i+5]==255 and data6[i+6]==8 and data6[i+7]==0):
index.append(i)
Image_data=[]
for i in range(len(index)):#获取包头后面128个8bit数据
Image_data.append(data6[(index[i]+9):(index[i]+137)])
img=[]
img2=[]
for i in range(len(Image_data)):
for j in range(len(Image_data[i])):
a=Image_data[i][j]/16*17#对数据进行清洗
b=Image_data[i][j]%16*17
img.append(a)
img.append(b)
img2.append(img)
cv.imwrite('C:\\Users\\86176\\Desktop\\my_image'+'\\'+'first'+str(name)+'.jpeg',img2)
print('C:\\Users\\86176\\Desktop\\my_image'+'\\'+'first'+str(name)+'.jpeg')
print("保存"+str(name)+"张图片")
if __name__ == '__main__':
for i in range(3000):
data=add_3000_picture()
savepicture(data,i)#保存3000张图片
注:因为读取数据太慢,读取一张图片要10s左右,这就需要修改波特率,这里我因为校验和不知道怎么算,还在研究。后续再改。