
--------------------------------------------------------------------------------
-- DdddOCR ONNX 模块
--------------------------------------------------------------------------------

---@type onnxruntime*
local _onnxruntime = require("onnxruntime")

---@type image_cv*
local _image_cv = require("image.cv")

---@alias ddddocr_image_input string|ImageObject*

---@class ddddocr_options*
---@field ocr? boolean 是否创建 OCR 实例
---@field det? boolean 是否创建检测实例
---@field old? boolean 是否使用 old 模型
---@field beta? boolean 是否使用 beta 模型
---@field show_ad? boolean 是否显示提示
---@field model_dir? string 模型目录
---@field import_onnx_path? string 自定义模型路径
---@field charsets_path? string 字符集 JSON 路径
---@field device_id? integer 设备 ID
---@field providers? string[] ONNX Runtime provider 列表
---@field fallback_to_cpu? boolean provider 失败时回退 CPU
---@field coreml_compute_units? 'all'|'cpu_only'|'cpu_and_gpu'|'cpu_and_neural_engine' CoreML 计算单元
---@field coreml_enable_on_subgraph? boolean 是否在子图启用 CoreML
---@field coreml_require_static_input_shapes? boolean 是否要求静态输入形状
---@field coreml_create_mlprogram? boolean 是否创建 MLProgram

---@class ddddocr_ocr_options*
---@field png_fix? boolean 是否修复 PNG 透明背景
---@field color_filter_colors? string[] 预设颜色过滤器
---@field color_filter_custom_ranges? table 自定义 HSV 颜色范围
---@field probability? boolean 是否返回概率信息
---@field charset_range? string|string[]|integer 字符集范围

---@class ddddocr_ocr_result*
---@field text string 识别文本
---@field confidence? number 平均置信度
---@field probabilities? table 概率详情
---@field charset? string[] 字符集

---@class ddddocr_box*
---@field [1] number 左边界
---@field [2] number 上边界
---@field [3] number 右边界
---@field [4] number 下边界
---@field score? number 置信度

---@class ddddocr_slide_result*
---@field target_x number 目标横坐标
---@field target_y number 目标纵坐标
---@field target_width number 目标宽度
---@field target_height number 目标高度
---@field confidence number 置信度

---@class ddddocr_model_info*
---@field mode? 'ocr'|'det'|'slide' 模式
---@field model_path? string 模型路径
---@field used_coreml? boolean 是否使用 CoreML EP
---@field device_id? integer 设备 ID
---@field input_name? string 输入名
---@field input_shape? integer[] 输入形状
---@field providers? string[] provider 列表
---@field outputs? { name: string, shape: integer[] }[] 输出信息

---@class ddddocr_charset_config*
---@field charset string[] 字符集
---@field map? table 字符映射

---@class ddddocr_instance*
---@field mode? 'ocr'|'det'|'slide' 实例模式
---@field closed boolean 是否已关闭
---@field session? onnxruntime_session* ONNX Runtime 会话
---@field model_info? ddddocr_model_info* 模型信息
---@field output_names? string[] 输出名
---@field charset_config? ddddocr_charset_config* 字符集配置，仅 OCR 模式存在
---@field persistent_charset_range? table 持久字符集范围
---@field device_id? integer 设备 ID
local ddddocr_instance = {}

---@class ddddocr*
---@field VERSION string 模块版本
---@field AUTHOR string 作者
---@type ddddocr*
local M = {}

--- 创建 DdddOCR 实例
---@param opts? ddddocr_options* 选项
---@return ddddocr_instance* instance 实例
function M.new(opts) end

--- 获取可用颜色过滤器名称
---@return string[] colors 颜色名称列表
function M.available_colors() end

--- 滑块模板匹配
---@param target ddddocr_image_input 目标图片
---@param background ddddocr_image_input 背景图片
---@param simpleTarget? boolean 是否使用简单滑块模式
---@return ddddocr_slide_result* result 匹配结果
function M.slide_match(target, background, simpleTarget) end

--- 滑块缺口比对
---@param target ddddocr_image_input 目标图片
---@param background ddddocr_image_input 背景图片
---@return ddddocr_slide_result* result 比对结果
function M.slide_comparison(target, background) end

--- 获取模块版本
---@return string version 模块版本
function M.version() end

--- OCR 识别
---@param input ddddocr_image_input 图片路径、图片数据或图片对象
---@param opts? ddddocr_ocr_options* 选项
---@return string|ddddocr_ocr_result* result 默认返回文本，probability 为 true 时返回详情
function ddddocr_instance:ocr(input, opts) end

--- OCR 识别
---@param input ddddocr_image_input 图片路径、图片数据或图片对象
---@param opts? ddddocr_ocr_options* 选项
---@return string|ddddocr_ocr_result* result 默认返回文本，probability 为 true 时返回详情
function ddddocr_instance:classification(input, opts) end

--- 目标检测
---@param input ddddocr_image_input 图片路径、图片数据或图片对象
---@return ddddocr_box*[] boxes 检测框列表
function ddddocr_instance:det(input) end

--- 目标检测
---@param input ddddocr_image_input 图片路径、图片数据或图片对象
---@return ddddocr_box*[] boxes 检测框列表
function ddddocr_instance:detect(input) end

--- 目标检测
---@param input ddddocr_image_input 图片路径、图片数据或图片对象
---@return ddddocr_box*[] boxes 检测框列表
function ddddocr_instance:detection(input) end

--- 滑块模板匹配
---@param target ddddocr_image_input 目标图片
---@param background ddddocr_image_input 背景图片
---@param simpleTarget? boolean 是否使用简单滑块模式
---@return ddddocr_slide_result* result 匹配结果
function ddddocr_instance:slide_match(target, background, simpleTarget) end

--- 滑块缺口比对
---@param target ddddocr_image_input 目标图片
---@param background ddddocr_image_input 背景图片
---@return ddddocr_slide_result* result 比对结果
function ddddocr_instance:slide_comparison(target, background) end

--- 设置持久字符集范围
---@param value string|string[]|integer 字符集范围
---@return boolean ok 是否成功
function ddddocr_instance:set_ranges(value) end

--- 获取当前模型字符集
---@return string[] charset 字符集
function ddddocr_instance:get_charset() end

--- 获取模型信息
---@return ddddocr_model_info* info 模型信息
function ddddocr_instance:get_model_info() end

--- 关闭实例
function ddddocr_instance:close() end

return M
