前言:
对于k210,实际使用时,由于kpu的存在,我们很少会将图片传送到上位机进行解析(单纯拍图片的话,esp32cam不香吗/滑稽)。由于跑模型对内存有要求,停用K210的senor,而使用其他设备拍照传输到K210上进行处理,能更高效的发挥K210的性能(比如来块新出的 Grove ,搭载上树莓派,开启Kpu Trubo)
正文开始!
通过上个帖子,我们已经学会的to _bytes的使用。对于MAIXPY,也提供了 from_bytes 的代码。
从内存读取(或者网络读取)
可以先将文件读取到内存, 具体是从哪里读取的看你的应用了, 比如网络,或者串口 SPI 等等,
构造一个 bytes对象
import image
jpeg_buff = b'\xFF' # jpeg buffer
img = image.Image(jpeg_buff, from_bytes = True)
print(img)
由于串口接收到的为bytes格式数据,我们可以直接对串口接收到的数据进行操作。这里直接提供代码:
img=uart_A.read()
if img!= None:#如果串口buffer读取到了数据
#print(img)
back = image.Image(img, from_bytes = True)#转为img
这里有两点需要注意:一是图片数据不能过大,经过测试,当图片大小大于100k时,会报MermoryError
二是波特率不能过高,经过测试,当波特率为1382400时,会报ValueError: format not supported。
1152000能正常使用,推测是过高的波特率导致了数据损坏。
设置好读取的参数口,打开vofa+,协议选择rawdata(也就是正常串口助手,你也可以使用其他的),发送图片。
成功点亮lcd!
文章来源于Sipeed点灯鼠,原文链接:https://bbs.sipeed.com/thread/527
搬运请注明原文地址
完整代码如下:
# Untitled - By: Lithromantic - 周日 2月 7 2021
#注意,复用uart后,ide将无法使用
from fpioa_manager import fm
fm.register(9, fm.fpioa.UART1_TX, force=True)
fm.register(10, fm.fpioa.UART1_RX, force=True)
from machine import UART
import sensor, image, time,lcd
lcd.init(freq=15000000)
uart_A = UART(UART.UART1, 1152000, 8, 1, 0, timeout=1000, read_buf_len=4096)
img = []
clock = time.clock()
while(True):
clock.tick()
img=uart_A.read()
if img!= None:
#print(img)
back = image.Image(img, from_bytes = True)
uart_A.write("success")
print(back)
lcd.rotation(1)
lcd.display(back)