camera - 摄像头#

常量#

常量

类型

解释

camera.AUTO

number

摄像头工作在自动模式

camera.SCAN

number

摄像头工作在扫码模式,只输出Y分量

camera.USB

number

摄像头类型,USB

camera.DVP

number

摄像头类型,DVP

camera.ROTATE_0

number

摄像头预览,画面不旋转

camera.ROTATE_90

number

摄像头预览,画面旋转90度

camera.ROTATE_180

number

摄像头预览,画面旋转180度

camera.ROTATE_270

number

摄像头预览,画面旋转270度

camera.CONF_H264_QP_INIT

number

H264编码器初始化QP值

camera.CONF_H264_QP_I_MAX

number

H264编码器I的最大QP值

camera.CONF_H264_QP_P_MAX

number

H264编码器P的最大QP值

camera.CONF_H264_IMB_BITS

number

H264编码器IMB_BITS值

camera.CONF_H264_PMB_BITS

number

H264编码器PMB_BITS值

camera.CONF_H264_PFRAME_NUMS

number

H264编码器P帧数量

camera.CONF_H264_APPLY

number

立即应用H264编码器设置

camera.CONF_PREVIEW_ENABLE

number

是否启动摄像头预览功能,默认开启

camera.CONF_PREVIEW_ROTATE

number

摄像头预览画面的旋转角度

camera.CONF_UVC_FPS

number

设置USB摄像头的帧率

camera.CONF_LOG_LEVEL

number

设置摄像头日志级别

camera.CONF_UVC_FORMAT

number

USB摄像头数据流类型

camera.CONF_UVC_RESOLUTION

number

USB摄像头的数据流中具体数据信息,包括图像大小和帧率

camera.FORMAT_RAW

number

USB摄像头数据流类型无压缩原始图像

camera.FORMAT_MJPG

number

USB摄像头的数据流类型mjpg

camera.FORMAT_H264

number

USB摄像头的数据流类型H264

camera.init(InitReg_or_cspi_id, cspi_speed, mode, is_msb, rx_bit, seq_type, is_ddr, only_y, scan_mode, w, h)#

初始化摄像头

参数

传入值类型

解释

table/integer

如果是table,则是DVP摄像头的配置见demo/camera/dvp_camera,同时忽略后续参数;如果是数字,则是camera spi总线序号

int

camera spi总线速度

int

camera spi模式,0~3

int

字节的bit顺序是否是msb,0否1是

int

同时接收bit数,1,2,4

int

byte序列,0~1

int

双边沿采样配置,0不启用,其他值根据实际SOC决定

int

只接收Y分量,0不启用,1启用,扫码必须启用,否则会失败

int

工作模式,camera.AUTO自动,camera.SCAN扫码

int

摄像头宽度

int

摄像头高度

返回值

返回值类型

解释

int/false

成功返回camera_id,失败返回false

例子

camera_id = camera.init(GC032A_InitReg)--屏幕输出rgb图像
--初始化后需要start才开始输出/扫码
camera.start(camera_id)--开始指定的camera

camera.on(id, event, func)#

注册摄像头事件回调

参数

传入值类型

解释

int

camera id, camera 0写0, camera 1写1

string

事件名称

function

回调方法

返回值

返回值类型

解释

nil

无返回值

例子

camera.on(0, "scanned", function(id, event)
--id int camera id
--event 多种类型,详见下表
    print(id, event)
end)
camera.on(0, "usb_raw", function(app_id, event, param) -- 2026/4/6新增
--app_id int usb应用id
--event 多种类型,详见下表
--param 返回参数
    print(app_id, event)
end)
--[[

事件名称填 "scanned" 情况下, event可能出现的值有
  boolean型 false   摄像头没有正常工作,检查硬件和软件配置
  boolean型 true    拍照模式下拍照成功并保存完成,可以读取照片文件数据进一步处理,比如读出数据上传
  int型 原始图像大小 RAW模式下,采集完一帧图像后回调,回调值为图像数据大小,可以对传入的zbuff做进一步处理,比如读出数据上传
  string型  扫码结果 扫码模式下扫码成功一次,并且回调解码值,可以对回调值做进一步处理,比如打印到LCD上
事件名称填 "usb_raw" 情况下, event和param可能出现的值
  usb.EV_NEW_RX     接收到新的一帧数据,param为zbuff序号,0~2,如果只设置了2个,就是0~1
  usb.EV_RX_ERR     接收数据发生错误
  usb.EV_CONNECT    摄像头接入完成,param为hub port序号,1~15
  usb.EV_DISCONNECT 摄像头拔出,param为hub port序号,1~15
]]

camera.start(id)#

开始指定的camera

参数

传入值类型

解释

int

camera id,例如0

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

camera.start(0)

camera.stop(id)#

停止指定的camera

参数

传入值类型

解释

int

camera id,例如0

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

camera.stop(0)

camera.close(id)#

关闭指定的camera,释放相应的IO资源

参数

传入值类型

解释

int

camera id,例如0

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

camera.close(0)

camera.capture(id, save_path, quality, x, y, w, h)#

camera拍照

参数

传入值类型

解释

int

camera id,例如0

string/zbuff/nil

save_path,文件保存路径,空则写在上次路径里,默认是/capture.jpg,如果是zbuff,则将图片保存在buff内不写入文件系统

int

quality, jpeg压缩质量, 见下面的使用说明

int

x, 裁剪起始横坐标,从x列开始

int

y, 裁剪起始纵坐标,从y行开始

int

w, 裁剪后的宽度

int

h, 裁剪后的高度

返回值

返回值类型

解释

boolean

成功返回true,否则返回false,真正完成后通过camera.on设置的回调函数回调接收到的长度

例子

-- 保存到文件,质量为80
camera.capture(0, "/capture.jpg", 80)
-- 保存到内存文件系统
camera.capture(0, "/ram/123.jpg", 80)

-- 保存到zbuff,质量为80
camera.capture(0, buff, 80)

-- jpeg压缩质量,请使用 50 - 95 之间的数值
-- 为保持兼容性, 质量值1/2/3, 分别对应 90/95/99

camera.video(id, w, h, out_path)#

camera输出视频流到USB,即将废弃,不要使用

参数

传入值类型

解释

int

camera id,例如0

int

宽度

int

高度

int

输出路径,目前只能用虚拟串口0

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

camera.video(0, 320, 240, uart.VUART_0)

camera.startRaw(id, w, h, buff)#

启动camera输出原始数据到用户的zbuff缓存区,输出1fps后会停止,并通过camera.on设置的回调函数回调接收到的长度,如果需要再次输出,请调用camera.getRaw

参数

传入值类型

解释

int

camera id,例如0

int

宽度

int

高度

zbuff

用于存放数据的缓存区,大小必须不小于w X h X 2 byte

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

camera.startRaw(0, 320, 240, buff)

camera.getRaw(id)#

再次启动camera输出原始数据到用户的zbuff缓存区,输出1fps后会停止,并通过camera.on设置的回调函数回调接收到的长度,如果需要再次输出,请继续调用本API

参数

传入值类型

解释

int

camera id,例如0

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

camera.getRaw(0)

camera.preview(id, onoff)#

启停camera预览功能,直接输出到LCD上,只有硬件支持的SOC可以运行,启动预览前必须调用lcd.int等api初始化LCD,预览时自动选择已经初始化过的lcd。

参数

传入值类型

解释

int

camera id,例如0

boolean

true开启,false停止

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

camera.preview(1, true)

camera.config(id, key, value)#

配置摄像头参数

参数

传入值类型

解释

int

camera id,例如0

int

配置项的id

int

配置项的值

返回值

返回值类型

解释

nil

当前无返回值

例子

-- 本函数于 2025.3.17 新增, 当前仅Air8101可用
camera.config(0, camera.CONF_H264_QP_INIT, 16)
camera.config(0, camera.CONF_H264_QP_I_MAX, 16)
camera.config(0, camera.CONF_H264_QP_P_MAX, 8)
camera.config(0, camera.CONF_H264_IMB_BITS, 3)
camera.config(0, camera.CONF_H264_PMB_BITS, 1)

camera.pwdn_pin(id, level)#

对于无法用GPIO控制camera pwdn脚的平台,手动控制camera pwdn脚拉高或者拉低,2025/9/6启用

参数

传入值类型

解释

int

camera id,例如0

int

pwdn脚电平,1高电平,0低电平

return

nil

返回值

例子

-- camera pwdn脚低电平
camera.pwdn_pin(camera_id, 0)

camera.reset_pin(level)#

对于无法用GPIO控制camera reset脚的平台,手动控制camera reset脚拉高或者拉低,2025/9/6启用

参数

传入值类型

解释

int

camera id,例如0

int

reset脚电平,1高电平,0低电平

return

nil

返回值

例子

-- camera reset脚高电平
camera.reset_pin(camera_id, 1)

camera.stream(id, app_id)#

camera输出/停止数据流

参数

传入值类型

解释

id

camera id

app_id

如果是usb摄像头,则输入usb应用id,其他留空

int

跳帧,针对USB摄像头,跳过N帧后上报,一般情况正常传输是30fps,如果脚本处理不过来,可以跳过N帧上报,默认是0,即不跳

int

图像数据最小长度,针对USB摄像头ISO传输可能漏数据的情况,只有大于最小长度的图像帧会上报,默认是10KB

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

=
camera.stream(camera.USB, app_id)

camera.cache(id, app_id, buff0, buff1, buff2)#

配置camera输出数据流到用户指定的zbuff缓存区,需要输入2~3个zbuff,并通过camera.on设置的回调函数返回具体哪一个zbuff有数据 2026/4/5启用

参数

传入值类型

解释

id

camera id

app_id

如果是usb摄像头,则输入usb应用id,其他留空

userdata

zbuff0

userdata

zbuff1

userdata

zbuff2

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

buff0 = zbuff.create(1024*768*2)
buff1 = zbuff.create(1024*768*2)
buff2 = zbuff.create(1024*768*2)    --可以去掉,最少需要2个缓存
camera.cache(camera.USB, app_id, buff0, buff1, buff2)

camera.get_usb_config(app_id, key, param1, param2)#

获取USB摄像头图像参数,根据不同的配置项的id和参数值组合,有不同的返回值组合

参数

传入值类型

解释

int

app_id usb应用id

int

配置项的id,目前只有camera.CONF_UVC_FORMAT,camera.CONF_UVC_RESOLUTION

int

参数1

int

参数2

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

int

value1

int

value2

int

value3

例子

-- 本函数于 2026.4.5 新增, 当前仅Air1601可用
--配置项的id和参数值组合,及返回如下,第一个返回值固定是成功、失败,不再表述,从第二个返回值开始描述
--1、查询USB摄像头数据流有多少种类型
--通常返回1~3, value2和value3是nil
result,value1 = camera.get_usb_config(id, camera.CONF_UVC_FORMAT)
--2、查询USB摄像头某种数据流有多少种图像类型,param1在1~组合1的返回值里选
--通常返回数据流类型(0 原始图像,1 mjpg,2 h264), 图像类型数量1~12, value3是nil
result,value1,value2 = camera.get_usb_config(id, camera.CONF_UVC_FORMAT, 1)    --数据流1的数据流类型,及包含的图像类型数量
--3、查询USB摄像头某种数据流下某种图像类型的具体参数,param1选0~2(0 原始图像,1 mjpg,2 h264), param2在1~组合2的返回值图像类型数量里选
--返回值分别为帧率,图像宽,图像高
result,fps,w,h = camera.get_usb_config(id, camera.CONF_UVC_RESOLUTION, 1, 3)    --数据流1第4种图像类型的具体值
-- 打印所有支持的数据类型
local res, format_num, format_index, frame_num, frame_index, type, fps, w, h
res, format_num= camera.get_usb_config(camera_id, camera.CONF_UVC_FORMAT)
log.info("总共有", format_num, "种数据流格式")
for format_index = 1, format_num, 1 do
    res, type, frame_num = camera.get_usb_config(camera_id, camera.CONF_UVC_FORMAT, format_index)
    log.info("数据流序号", format_index, "数据流格式", type, "总共有", frame_num, "图像格式")
    for frame_index = 1, frame_num, 1 do
        res, fps, w, h = camera.get_usb_config(camera_id, camera.CONF_UVC_RESOLUTION, format_index, frame_index)
        log.info("图像格式序号", frame_index, "图像格式", type, "帧率", fps, "图像宽度", w, "图像高度", h)
    end
end

camera.set_usb_config(app_id, key, param1, param2)#

配置USB摄像头图像参数,根据不同的配置项的id和参数值组合,有不同的设置效果

参数

传入值类型

解释

int

app_id usb应用id

int

配置项的id,目前只有camera.CONF_UVC_RESOLUTION

int

参数1

int

参数2

int

参数3

返回值

返回值类型

解释

boolean

成功返回true,否则返回false

例子

-- 本函数于 2026.4.5 新增, 当前仅Air1601可用
--配置项的id和参数值组合如下
--1、设置USB摄像头使用的数据流和图像类型序号
result = camera.set_usb_config(id, camera.CONF_UVC_RESOLUTION, 1, 5)--配置USB摄像头使用数据流1下第6种图像类型
--2、设置USB摄像头使用的数据流类型,宽度,高度。注意,如果摄像头不支持,则启动会失败,建议先用get_usb_config查询一下
result = camera.set_usb_config(id, camera.CONF_UVC_RESOLUTION, camera.FORMAT_MJPG, 1024, 768)--配置USB摄像头使用mjpg方式,宽度1024,高度768