争渡读屏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/移动端可访问性工作多年,对跨平台无障碍解决方案拥有深厚的理论研究和丰富的实战经验。
精通障碍用户软件交互设计,长期致力于改善、提升产品可及性体验。