LuatOS核心库API——【camera 】摄像头功能库

在嵌入式物联网开发中,图像采集能力日益重要。LuatOS提供的camera模块作为其核心库的重要组成部分,为开发者提供了简洁高效的摄像头控制接口。本篇将深入解析该API的功能结构、初始化流程及常用操作方法,帮助开发者快速集成图像采集功能至其应用中。

一、概述

camera 核心库是 LuatOS 的一个特色功能库,按照顺序调用就可以非常快捷的使用上摄像头外设,完成拍照,扫描任务,并将扫描结果和拍照文件存储。根据摄像头类型的不同分为三种使用逻辑:

SPI 摄像头:

适用于 Air700 系列、Air780 系列、Air8000 系列模组;

目前支持 gc0310、gc032a、bf30a2 三款摄像头,并且已经制作好了官方配置表,使用时只需要使用配置的函数初始化摄像头后,就可以调用 camera.capture()接口完成拍照或扫描的任务,再通过 camera.on()函数接收回调数据即可完成拍照或扫描业务;

USB 摄像头:

适用于 Air8101 系列模组;

支持多路 USB 摄像头,但是同时只能使用一路摄像头,根据 USB 端口号选择对应的摄像头,调用对应的初始化和拍照接口即可完成拍照业务;

DVP 摄像头:

适用于 Air8101 系列模组;

支持单路 DVP 摄像头,camera.init()初始化完成后执行 camera.capture()接口完成拍照或扫描任务即可完成拍照任务;

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

3.1 camera.AUTO

3.2 camera.SCAN

3.3 camera.USB

3.4 camera.DVP

3.5 camera.ROTATE_0

3.6 camera.ROTATE_90

3.7 camera.ROTATE_270

3.8 camera.CONF_PREVIEW_ENABLE

3.9 camera.CONF_PREVIEW_ROTATE

四、函数详解

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

功能

SPI 摄像头:

初始化摄像头,因为摄像头的初始化配置参数需要向摄像头对应的配置寄存器中写入参数,一般会有一两百个参数需要配置,所以我们制作了 gc0310、gc032a、bf30a2 这三款当前支持的摄像头参数配置表,并且将摄像头初始化参数的默认值已经写好,在使用这三个型号的摄像头时只需要 require 对应的配置表,并且调用对应的初始化函数(例如:gc0310Init())即可;

USB、DVP 摄像头:

在 Air8101 系列上支持多路 USB 摄像头,在多路摄像头使用时需要注意摄像头初始化动作

注意事项

如果对照片的大小有要求时,不要修改摄像头初始化时的像素参数,会造成摄像头初始化错误,初始化不会报错,但是回调会收不到任何信息。如需较小的照片结果请直接使用camera.capture()接口的裁切功能,直接输出裁切好的照片即可!

参数

InitReg_or_cspi_id

cspi_speed

mode

is_msb

rx_bit

seq_type

is_ddr

only_y

scan_mode

w

h

返回值

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

会有一个返回值 result

result

例子

4.2 camera.on(id , event , func)

功能

注册摄像头事件回调

注意事项

初始化摄像头成功后,所有摄像头事件均是由回调函数触发,所以在初始化成功后需马上注册回调,及时接收到摄像头执行任务后的结果;

参数

id

event

func

返回值

例子

4.3 camera.start(id)

功能

开始指定的摄像头,在初始化完摄像头后如果并不是马上需要拍照,可以先调用 camera.stop()暂停摄像头,拍照前再调用 camera.start()打开即可;

参数

id

返回值

local result = camera.start(id)

会有一个返回值 result

result

例子

4.4 camera.stop(id)

功能

暂停指定的 camera;

注意事项

是暂停不是关闭,暂停后可直接调用 camera.start()再开启摄像头拍照或者扫描,不需要再初始化;

合宙官方摄像头配置表内已经调用了 camera.start(),如果调用接口 camera.init 初始化后不,需要立马拍照需及时调用 camera.stop()暂停摄像头,避免造成资源浪费;

参数

id

返回值

local result = camera.stop(id)

会有一个返回值 result

result

例子

4.5 camera.close(id)

功能

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

注意事项

Air780 系列、Air700 系列、Air8000 系列:

SPI 摄像头会占用 2 路 I2C、1 路 UART 和 2 路 onewire,在 SPI 摄像头启动时无法复用,所以摄像头业务执行完毕后可以调用 camera.close()关闭摄像头,释放 IO 资源;

Air8101 系列:

DVP 摄像头会占用 1 路 UART、1 路 I2C、6 路 PWM 并且同样管脚可复用一路 SPI 或一路以太网,DVP 摄像头启用时无法复用,所以摄像头业务执行完毕后可以调用 camera.close()关闭摄像头,释放 IO 资源;

参数

id

返回值

local result = camera.close(id)

会有一个返回值 result

result

例子

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

功能

摄像头初始化成功后执行拍照或扫描或录像业务;

可根据参数直接在这个接口里完成照片的裁切动作;

注意事项

执行拍照任务前一定要调用 camera.start()接口将摄像头打开;

如需较小的照片结果请直接使用camera.capture()接口的裁切功能,计算好接口中的x、y、w、h参数,直接输出裁切好的照片即可!

参数

id

save_path

quality

x

y

w

h

返回值

local result = camera.capture(1, "/capture.jpg", 80,10,15 , 310 , 465)

会有一个返回值 result

result

例子

4.7 camera.preview(id, mode)

功能

启停 camera 预览功能

注意事项

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

参数

id

mode

返回值

local result = camera.preview(id, mode)

会有一个返回值 result

result

例子

4.8 camera.pwdn_pin(id, level)

功能

摄像头 PWDN 控制脚控制;

注意事项

该接口仅用于 Air72X 系列无法用 GPIO 控制 camera pwdn 脚的平台,手动控制 camera pwdn 脚拉高或者拉低;

参数

id

level

返回值

例子

4.9 camera.reset_pin(id, level)

功能

重启摄像头;

注意事项

该接口仅用于 Air72X 系列无法用 GPIO 控制 camera reset 脚的平台,手动控制 camera reset 脚拉高或者拉低;

参数

id

level

返回值

例子

五、模组支持说明

支持 LuatOS 开发的所有模组都支持 camera 核心库。

今天的内容就分享到这里了~

相关推荐
安科士andxe5 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
小高不会迪斯科8 小时前
CMU 15445学习心得(二) 内存管理及数据移动--数据库系统如何玩转内存
数据库·oracle
YJlio8 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
e***8908 小时前
MySQL 8.0版本JDBC驱动Jar包
数据库·mysql·jar
l1t8 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
CTRA王大大8 小时前
【网络】FRP实战之frpc全套配置 - fnos飞牛os内网穿透(全网最通俗易懂)
网络
小白同学_C8 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖8 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
2601_949146538 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
青云计划9 小时前
知光项目知文发布模块
java·后端·spring·mybatis