争渡读屏OCR文字/图像识别插件接口功能实现详解

争渡读屏OCR文字/图像识别插件接口功能实现详解

ZDSR.OCRAddin.IOCRAddin 是争渡读屏设计的图像识别扩展插件接口。该规范能让第三方开发者创建自定义 OCR 插件,将第三方图像/文字识别功能集成到读屏中。

下面深入详解该接口的每个部分。

一、接口设计目标

插件接口的核心目标是实现一个标准化的第三方 OCR 引擎扩展接入机制,使得:

  • 读屏软件能以统一方式调用第三方扩展的不同 OCR 引擎
  • 插件开发者能专注于识别算法,无需关心读屏软件内部实现
  • 支持多种识别模式(纯文本识别、带坐标的精准识别)

二、接口方法

1. Name 属性

csharp 复制代码
string IOCRAddin.Name => throw new NotImplementedException();
  • 作用:返回插件的显示名称
  • 实现要点 :
    • 必须返回一个有意义的字符串(如"Cirong AI OCR")
    • 该名称会在读屏的插件引擎列表中显示
    • 示例:public string Name => "Cirong AI OCR";

2. Type 属性

csharp 复制代码
string IOCRAddin.Type => throw new NotImplementedException();
  • 作用:返回当前 OCR 的子类别
  • 实现要点 :
    • 如果插件支持多种识别模式(如"通用"、"身份证"、"银行卡"),返回当前选中的类型
    • 示例:public string Type => "通用";

3. ChangeType 方法

csharp 复制代码
string IOCRAddin.ChangeType(bool bReset)
{
    throw new NotImplementedException();
}
  • 作用:切换 OCR 子类别
  • 参数说明 :
    • bReset: true 表示重置到第一项,false 表示切换到下一项
  • 返回值:新的类别名
  • 实现要点 :
    • 维护一个类型列表(如 string[] types = { "通用", "身份证", "银行卡" })
    • 根据 bReset 参数切换当前类型索引
    • 返回新的类别名

4. Initial 方法

csharp 复制代码
int IOCRAddin.Initial()
{
    throw new NotImplementedException();
}
  • 作用:初始化插件
  • 返回值 :
    • 1 表示插件初始化成功
    • 0表示失败
  • 实现要点 :
    • 加载模型、初始化插件资源等
    • 检查依赖项是否齐全
    • 返回 1 表示准备就绪

5. OCR 方法

csharp 复制代码
OCRResult IOCRAddin.OCR(System.Drawing.Image img, bool bNeedRect)
{
    throw new NotImplementedException();
}
  • 作用:执行 OCR 图像识别
  • 参数说明 :
    • img: 需要识别的图像
    • bNeedRect: 是否需要返回坐标信息
      • true: 需要返回每个字符/控件的精确坐标
      • false: 只需返回文本内容
  • 返回值 :OCRResult 对象,存放识别结果

三、数据结构详解

1. OCRResult 结构

csharp 复制代码
public class OCRResult
{
    public List<OCRLine> ocrLines { get; set; }
}
  • 核心字段 :
    • ocrLines: 识别到的所有文本行/控件列表

2. OCRLine 结构

csharp 复制代码
public class OCRLine
{
    public string line { get; set; }       // 整行文本
    public Rectangle lineRect { get; set; } // 行边界框
    public List<OCRWord> words { get; set; } // 逐字信息
}
  • 关键字段 :
    • line: 整行文本内容(如"确定"、"用户名")
    • lineRect: 该行在图像中的边界框(x, y, width, height)
    • words: 仅当 bNeedRect=true 时填充,包含每个字的详细信息

3. OCRWord 结构

csharp 复制代码
public class OCRWord
{
    public string text { get; set; }  // 字符内容
    public int x { get; set; }        // 相对于图像左上角的X坐标
    public int y { get; set; }        // 相对于图像左上角的Y坐标
    public int width { get; set; }    // 字符宽度
    public int height { get; set; }   // 字符高度
}
  • 作用:提供字符级精确坐标
  • 注 :仅当 bNeedRect=true 时才需要填充

四、工作流程

1. 读屏调用插件流程

(1) 读屏启动时,调用 Initial() 初始化插件,成功则将插件注册到 OCR 引擎列表

(2) 用户触发 OCR 识别

(3) 读屏软件截取当前屏幕/窗口

(4) 调用 OCR(img, true) 识别(需要坐标)

(5) 读屏软件接收 OCRResult

(6) 将相对坐标转换为屏幕绝对坐标

(7) 朗读或模拟点击相应内容

2. 两种识别模式的区别

模式 bNeedRect 返回数据 用途
纯文本模式 false 仅 line 字段 简单文本朗读或描述图中内容
精准定位模式 true 完整坐标信息 模拟点击、逐字词浏览

五、编译和部署

使用 Visual Studio 创建 C# 类库项目 ,目标框架选择 .NET Framework 4.8 。在项目中添加对争渡读屏安装根目录下 ZDSROCRAddin.dll 的引用,并导入 using ZDSR.OCRAddin 命名空间,随后,按上述说明,实现 IOCRAddin 接口的 Name、Type、ChangeType、Initial 和 OCR 等。编译生成插件 DLL;若插件依赖模型或其他资源文件,随 DLL 一并放置。

在争渡读屏安装目录(如 C:\Program Files (x86)\zdsr\zdsr) 的 addins\OCR 下新建一个与插件 DLL 同名的文件夹 ,将插件 DLL 放入该文件夹。例如 CirongOCRAddin.dll 应部署为 addins\OCR\CirongOCRAddin\CirongOCRAddin.dll。可参考读屏目录下 addins\OCR\TestOCRAddin 中的演示样例。读屏启动时会调用 Initial(),返回 1 表示初始化成功并注册到 OCR 引擎列表;返回 0 表示失败。

这套接口设计的精妙之处在于既支持简单文本识别或图像描述,又支持精准坐标定位,同时通过 bNeedRect 参数让插件可以优化不同场景下的性能表现。

参考


作者

张赐荣,视障者,信息无障碍软件优化解决方案资深研发专家。

深耕Web/PC/移动端可访问性工作多年,对跨平台无障碍解决方案拥有深厚的理论研究和丰富的实战经验。

精通障碍用户软件交互设计,长期致力于改善、提升产品可及性体验。

相关推荐
大耳朵爱学习1 小时前
Andrew Ng深度解析:普通人如何利用AI把想法变成工具,实现工作自动化(小白程序员必看)
运维·人工智能·ai·自动化·大模型·就业·大模型学习
木雷坞1 小时前
AnythingLLM Docker部署:中文资料上传后无引用的检查路径
运维·docker·容器
中科三方1 小时前
AI时代新攻击面:悬空DNS记录正在成为黑客的低成本入侵入口
服务器·前端·人工智能
步行cgn1 小时前
Spring MVC 删除功能:用隐藏表单模拟 DELETE 请求的完整解析
linux·运维·服务器
润滑卫士1 小时前
工业油液在线监测系统架构:传感网络、数据采集与通讯协议设计
运维
红红谈说1 小时前
定时发布关机就停,本地定时任务的补跑策略怎么设计?
运维·服务器·定时任务·本地调度·补跑策略·幂等互斥·执行记录
4SAPI2 小时前
企业级大模型工作流基础设施选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
运维·人工智能·架构·自动化
2401_868534782 小时前
论纯IPv6(IPv6-Only)演进与地址规划设计与实施
服务器·网络
幽默小吴2 小时前
nginx篇
运维·nginx