Appearance
视觉与摄像头 AI 规范
本文档用于 AI 生成摄像头、模板匹配、MJPEG 推流相关 Lua 代码。参数规则已按 HexLuaAPI_IMG.hpp 和 OpenCV 封装约束整理。
OpenCV 基础
生成视觉代码时优先写:
lua
local opencv_lua = require("opencv_lua")
local cv = opencv_lua.cv规则:
- 读取图片用
cv.imread(path)。 - 保存图片用
cv.imwrite(path, mat)。 - Lua 中图片宽高使用
mat.width、mat.height,不要写 Python 的shape[:2]。 - 项目内图片路径使用相对路径。
- 涉及 OpenCV 类、静态成员、实例方法、
cv.Mat与 Python 代码转换时,参考 OpenCV 类与对象 AI 规范。
摄像头设备
lua
local devices = listCameraDevices()
local formats = getCameraFormats("/dev/video0")
local ok = setCameraFormat("/dev/video0", 1280, 720, "MJPG", 60)规则:
listCameraDevices()无参数,返回设备列表。getCameraFormats(node)的node是设备路径,例如"/dev/video0"。setCameraFormat(node, width, height, pix, fps):node:字符串。width/height/fps:整数。pix:像素格式字符串,例如"MJPG"。
采集帧
lua
local frame = CameraGetLatestFrame()
local square = CameraGetLatestFrameSquare()返回值:
- 成功返回
cv.Mat。 - 没有帧时返回
nil。
使用前必须确认项目已有摄像头初始化逻辑。若当前文档没有给出初始化参数,不要凭空生成 CameraInit。
模板匹配
可用函数:
lua
ensure24BitBGR(mat)
templateMatchingStandard(...)
multiScaleTemplateMatching(...)
multiScaleTemplateMatchingNMS(...)AI 生成规则:
- 模板匹配前确认输入是
cv.Mat。 - 图片可能需要先转为 24 位 BGR,可使用
ensure24BitBGR(mat)。 - 不要把文件路径直接传给模板匹配函数,先
cv.imread。
MJPEG 推流
lua
local ok = StartMJPEGServer(5656)
local pushed = StreamPushFrame(frame)
local stopped = StopMJPEGServer()规则:
StartMJPEGServer(port):port可选/整数,常用5656。StreamPushFrame(mat):参数必须是cv.Mat。StopMJPEGServer():停止推流服务。
AI 生成禁忌
- 不要生成
cv.imshow、cv.waitKey、cv.destroyAllWindows。 - 不要写 Python 风格的
img.shape。 - 不要在没有
cv.Mat的情况下调用模板匹配或推流。 - 不要在循环内无限创建新图像对象而不控制频率;必要时使用
collectgarbage()。