Skip to content
On this page

视觉与摄像头 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.widthmat.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.imshowcv.waitKeycv.destroyAllWindows
  • 不要写 Python 风格的 img.shape
  • 不要在没有 cv.Mat 的情况下调用模板匹配或推流。
  • 不要在循环内无限创建新图像对象而不控制频率;必要时使用 collectgarbage()