行空板K10 microPython开机自启动与调用摄像头
尝试了官网的教程,unihiker.com.cn/wiki/k10/micropython_unihiker_k10 ,里面有很多好玩的玩法,但是不熟悉microPython的玩家可能一下子搞不定。因此在这里记录下来:
1. 在Thonny中运行代码,需要点击run按钮。但是这是调试的时候的办法,而实际上,如果想要让系统通电之后直接运行这段代码,可以把代码放到“main.py”文件内。
保存代码就行。这样,代码会存在microPython的文件系统内。开机会优先运行这段代码。
但是也有一个问题,运行代码时,Thonny无法再次控制K10,可以重新在右下角这里选择一次,会中断代码运行,重新进入编程调试。
2. 想要写一个microPython的摄像头调用,其实代码很简单。
from unihiker_k10 import screen, camera
import time
screen.init(dir=2) # 代码中不调用时默认为2
camera.init() # 初始化摄像头
screen.show_camera(camera) # 将摄像头画面显示到屏幕上
while True:
print(camera)
time.sleep(0.1)但是里面camera到底是什么类型,其实并不清楚,要相对这个进行文件存储、传输,都还得仔细研究。先print看一下,是“Camera object”。
问问大模型,什么意思。
试试能不能行。
目前发现是有这些:
camera.init() # 初始化摄像头
print(dir(camera))
print(dir(camera.cam))
print(camera.capture())
['__class__', '__init__', '__module__', '__qualname__', '__dict__', 'capture', 'init', 'cam']
['__class__', '__name__', 'DRAM', 'EFFECT_BLUE', 'EFFECT_BW', 'EFFECT_GREEN', 'EFFECT_NEG', 'EFFECT_NONE', 'EFFECT_RED', 'EFFECT_RETRO', 'FRAME_240X240', 'FRAME_96X96', 'FRAME_CIF', 'FRAME_FHD', 'FRAME_HD', 'FRAME_HQVGA', 'FRAME_HVGA', 'FRAME_P_3MP', 'FRAME_P_FHD', 'FRAME_P_HD', 'FRAME_QCIF', 'FRAME_QHD', 'FRAME_QQVGA', 'FRAME_QSXGA', 'FRAME_QVGA', 'FRAME_QXGA', 'FRAME_SVGA', 'FRAME_SXGA', 'FRAME_UXGA', 'FRAME_VGA', 'FRAME_WQXGA', 'FRAME_XGA', 'GRAYSCALE', 'JPEG', 'PSRAM', 'RGB565', 'WB_CLOUDY', 'WB_HOME', 'WB_NONE', 'WB_OFFICE', 'WB_SUNNY', 'XCLK_10MHz', 'XCLK_20MHz', 'YUV422', '__dict__', 'brightness', 'capture', 'contrast', 'deinit', 'flip', 'framesize', 'init', 'mirror', 'quality', 'saturation', 'speffect', 'whitebalance']b'\xff\xff\xff\xff\xff\看起来会一直输出拍摄的画面,一次一行,但是不会停止。暂时研究到这里,怎么获取一帧画面,还得再看下。
运行camera.capture()后可以得到一帧的RGB565画面(一定要初始化后,还要import camera这是官方控制摄像头的库) import camera
from microbmp import MicroBMP #https://github.com/jacklinquan/micropython-microbmp/blob/main/microbmp.py
# 将 RGB565 转换为 RGB888 的函数
def RGB565_to_RGB888_array(rgb565_array, length, rgb888_array):
for i in range(length):
rgb565 = rgb565_array
# 提取 RGB565 中的颜色分量
red = (rgb565 >> 11) & 0x1F# 5 bits
green = (rgb565 >> 5) & 0x3F# 6 bits
blue = rgb565 & 0x1F# 5 bits
# 将颜色分量扩展到 8 位
r = (red << 3) | (red >> 2)# 5 bits to 8 bits
g = (green << 2) | (green >> 4)# 6 bits to 8 bits
b = (blue << 3) | (blue >> 2)# 5 bits to 8 bits
# 将结果存储到 RGB888 数组
rgb888_array = r
rgb888_array = g
rgb888_array = b
# 初始化摄像头
camera.init(0)
# 捕获一帧画面
buf = camera.capture()
# 创建 MicroBMP 实例
bmp = MicroBMP(width=640, height=480, depth=24)
# 将 RGB565 数据转换为 RGB888
rgb888_array = bytearray(bmp.DIB_w * bmp.DIB_h * 3)# 初始化 RGB888 格式的像素数据数组
RGB565_to_RGB888_array(buf, len(buf) // 2, rgb888_array)
# 将 RGB888 数据写入 MicroBMP 实例
for y in range(bmp.DIB_h):
for x in range(bmp.DIB_w):
idx = (y * bmp.DIB_w + x) * 3
bmp = (rgb888_array, rgb888_array, rgb888_array)
# 保存 BMP 文件
bmp.save("image.bmp")
你试一下这个代码 PY学习笔记 发表于 2025-1-1 17:51
谢谢大佬分享!赞! PY学习笔记 发表于 2025-1-1 17:51
这段代码运行很棒,运行没有问题。但是写文件耗时还是比较大,转BMP也是耗时的(大约1分钟)。可以尝试在获得buf之后,通过其他方式传输。比如网络通信、串口通信。接下来,我会尝试把它写成串口通信,发到电脑上来转成图片。 Eason_ever 发表于 2025-1-6 15:21
这段代码运行很棒,运行没有问题。但是写文件耗时还是比较大,转BMP也是耗时的(大约1分钟)。可以尝试在 ...
可以让摄像头的拍摄大小小一点
页:
[1]