2024-12-31 14:04:06 [显示全部楼层]
64浏览
查看: 64|回复: 4

[K10教程] 行空板K10 microPython开机自启动与调用摄像头

[复制链接]
尝试了官网的教程,unihiker.com.cn/wiki/k10/micropython_unihiker_k10 ,里面有很多好玩的玩法,但是不熟悉microPython的玩家可能一下子搞不定。
因此在这里记录下来:

1. 在Thonny中运行代码,需要点击run按钮。但是这是调试的时候的办法,而实际上,如果想要让系统通电之后直接运行这段代码,可以把代码放到“main.py”文件内。
行空板K10 microPython开机自启动与调用摄像头图1
保存代码就行。这样,代码会存在microPython的文件系统内。开机会优先运行这段代码。

但是也有一个问题,运行代码时,Thonny无法再次控制K10,可以重新在右下角这里选择一次,会中断代码运行,重新进入编程调试。

2. 想要写一个microPython的摄像头调用,其实代码很简单。
  1. from unihiker_k10 import screen, camera
  2. import time
  3. screen.init(dir=2) # 代码中不调用时默认为2
  4. camera.init() # 初始化摄像头
  5. screen.show_camera(camera) # 将摄像头画面显示到屏幕上
  6. while True:
  7.     print(camera)
  8.     time.sleep(0.1)
复制代码
但是里面camera到底是什么类型,其实并不清楚,要相对这个进行文件存储、传输,都还得仔细研究。先print看一下,是“Camera object”。

行空板K10 microPython开机自启动与调用摄像头图2
问问大模型,什么意思。
行空板K10 microPython开机自启动与调用摄像头图3
试试能不能行。

目前发现是有这些:
  1. camera.init() # 初始化摄像头
  2. print(dir(camera))
  3. print(dir(camera.cam))
  4. 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\看起来会一直输出拍摄的画面,一次一行,但是不会停止。
暂时研究到这里,怎么获取一帧画面,还得再看下。

PY学习笔记  见习技师

发表于 前天 17:27

运行camera.capture()后可以得到一帧的RGB565画面(一定要初始化后,还要import camera这是官方控制摄像头的库)
回复

使用道具 举报

PY学习笔记  见习技师

发表于 前天 17:51

  1. import camera
  2. from microbmp import MicroBMP #https://github.com/jacklinquan/micropython-microbmp/blob/main/microbmp.py
  3. # 将 RGB565 转换为 RGB888 的函数
  4. def RGB565_to_RGB888_array(rgb565_array, length, rgb888_array):
  5.    for i in range(length):
  6.        rgb565 = rgb565_array[i]
  7.        # 提取 RGB565 中的颜色分量
  8.        red = (rgb565 >> 11) & 0x1F  # 5 bits
  9.        green = (rgb565 >> 5) & 0x3F  # 6 bits
  10.        blue = rgb565 & 0x1F  # 5 bits
  11.        # 将颜色分量扩展到 8 位
  12.        r = (red << 3) | (red >> 2)  # 5 bits to 8 bits
  13.        g = (green << 2) | (green >> 4)  # 6 bits to 8 bits
  14.        b = (blue << 3) | (blue >> 2)  # 5 bits to 8 bits
  15.        # 将结果存储到 RGB888 数组
  16.        rgb888_array[i * 3] = r
  17.        rgb888_array[i * 3 + 1] = g
  18.        rgb888_array[i * 3 + 2] = b
  19. # 初始化摄像头
  20. camera.init(0)
  21. # 捕获一帧画面
  22. buf = camera.capture()
  23. # 创建 MicroBMP 实例
  24. bmp = MicroBMP(width=640, height=480, depth=24)
  25. # 将 RGB565 数据转换为 RGB888
  26. rgb888_array = bytearray(bmp.DIB_w * bmp.DIB_h * 3)  # 初始化 RGB888 格式的像素数据数组
  27. RGB565_to_RGB888_array(buf, len(buf) // 2, rgb888_array)
  28. # 将 RGB888 数据写入 MicroBMP 实例
  29. for y in range(bmp.DIB_h):
  30.    for x in range(bmp.DIB_w):
  31.        idx = (y * bmp.DIB_w + x) * 3
  32.        bmp[x, y] = (rgb888_array[idx], rgb888_array[idx + 1], rgb888_array[idx + 2])
  33. # 保存 BMP 文件
  34. bmp.save("image.bmp")
复制代码
回复

使用道具 举报

PY学习笔记  见习技师

发表于 前天 17:54

你试一下这个代码
回复

使用道具 举报

Eason_ever  学徒
 楼主|

发表于 昨天 16:41


谢谢大佬分享!赞!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail