Skip to content

Commit bf112a8

Browse files
committed
feat: 娣诲姞 UmiOCR OCR 璇嗗埆鍔熻兘鍜?Base64 缂栫爜鍔熻兘
- 鏂板 UmiOCR 绫伙紝鏀寔鍥剧墖鏂囧瓧璇嗗埆 - 鏀寔閰嶇疆璇嗗埆璇█銆佽緭鍑烘牸寮忋€佽搴︽娴嬨€佸拷鐣ュ尯鍩熺瓑鍙傛暟 - 鏂板 Common.Base64Encode 鏂规硶锛屾敮鎸佹枃浠躲€佸瓧鑺傛暟缁勩€佸瓧绗︿覆鐨?Base64 缂栫爜 - 鏇存柊 README.md 鍜屾枃妗o紝娣诲姞鏂板姛鑳借鏄?- 鏇存柊鏂囨。缃戠珯瀵艰埅鑿滃崟
1 parent 4f1edcb commit bf112a8

4 files changed

Lines changed: 293 additions & 3 deletions

File tree

README.md

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
- **线程池管理**:简单高效的线程池实现,支持任务队列和任务等待
1616
- **JavaScript执行**:支持两种执行方式,JintRunner(纯.NET实现,无需Node.js)和NodeJsRunner(需要Node.js),支持代码字符串和文件执行、方法调用、变量管理、函数调用等丰富功能
1717
- **身份证验证**:提供中国身份证号码验证、地址提取、性别识别等功能,支持18位身份证号码的完整校验
18+
- **OCR 识别**:集成 UmiOCR,支持图片文字识别,可配置识别语言、输出格式、角度检测、忽略区域等参数
19+
- **Base64 编码**:提供文件、字节数组、字符串等多种数据格式的 Base64 编码功能
1820
- **.NET Standard 2.1兼容**:支持.NET Core、.NET Framework和其他兼容平台
1921
- **模块化设计**:各功能模块相互独立,便于扩展和维护
2022
- **持续更新**:计划逐步添加更多常用功能模块
@@ -525,6 +527,67 @@ else
525527
}
526528
```
527529

530+
### OCR 识别示例
531+
532+
```csharp
533+
using WodToolkit.src.UmiOCR;
534+
using System.Collections.Generic;
535+
536+
// 1. 创建 UmiOCR 实例(默认连接本地服务 http://127.0.0.1:1224)
537+
var umiOcr = new UmiOCR();
538+
539+
// 2. 基本 OCR 识别(使用默认参数)
540+
string result = umiOcr.Ocr("image.jpg");
541+
Console.WriteLine($"识别结果: {result}");
542+
543+
// 3. 指定识别语言和输出格式
544+
string result2 = umiOcr.Ocr("image.jpg", language: "简体中文", format: "json");
545+
Console.WriteLine($"JSON 格式结果: {result2}");
546+
547+
// 4. 启用角度检测
548+
string result3 = umiOcr.Ocr("image.jpg", angle: true);
549+
550+
// 5. 指定忽略区域(忽略图片中的某些区域)
551+
var ignoreAreas = new List<int[][]>
552+
{
553+
new int[][] { new int[] { 10, 20 }, new int[] { 100, 200 } }, // 第一个忽略区域
554+
new int[][] { new int[] { 150, 250 }, new int[] { 300, 400 } } // 第二个忽略区域
555+
};
556+
string result4 = umiOcr.Ocr("image.jpg", ignoreArea: ignoreAreas);
557+
558+
// 6. 完整参数示例
559+
string result5 = umiOcr.Ocr(
560+
file: "image.jpg",
561+
language: "简体中文",
562+
format: "text",
563+
parser: "merge_line",
564+
angle: true,
565+
ignoreArea: ignoreAreas
566+
);
567+
568+
// 7. 使用自定义 UmiOCR 服务地址
569+
var customOcr = new UmiOCR("http://192.168.1.100:1224");
570+
string customResult = customOcr.Ocr("image.jpg");
571+
```
572+
573+
### Base64 编码示例
574+
575+
```csharp
576+
using WodToolkit.src.Common;
577+
578+
// 1. 从文件路径编码为 Base64
579+
string base64FromFile = Common.Base64Encode(@"C:\path\to\image.jpg");
580+
581+
// 2. 从字节数组编码为 Base64
582+
byte[] fileBytes = File.ReadAllBytes("image.jpg");
583+
string base64FromBytes = Common.Base64Encode(fileBytes);
584+
585+
// 3. 从字符串编码为 Base64(使用 UTF-8 编码)
586+
string base64FromText = Common.Base64Encode("Hello World", null);
587+
// 或明确指定编码
588+
string base64FromText2 = Common.Base64Encode("你好世界", Encoding.UTF8);
589+
```
590+
528591
## 项目架构与组织
529592

530593
WodToolKit采用模块化设计,各功能模块相互独立,便于扩展和维护。整体架构围绕核心功能模块展开,通过清晰的命名空间和类层次结构提供统一的使用体验。
@@ -547,8 +610,11 @@ WodToolKit
547610
├── Script/ # 脚本执行
548611
│ ├── JintRunner # Jint JavaScript执行器(纯.NET)
549612
│ └── NodeJsRunner # Node.js脚本执行器
613+
├── UmiOCR/ # OCR 识别
614+
│ └── UmiOCR # UmiOCR 集成
550615
└── Common/ # 通用工具
551-
└── IDCard # 身份证验证与信息提取
616+
├── IDCard # 身份证验证与信息提取
617+
└── Common # 通用工具方法(Base64编码等)
552618
```
553619

554620
### 项目结构
@@ -561,7 +627,8 @@ WodToolKit
561627
│ ├── Http/ # HTTP相关功能
562628
│ ├── Json/ # JSON处理功能
563629
│ ├── Script/ # JavaScript执行和方法调用功能
564-
│ └── Thread/ # 线程管理功能
630+
│ ├── Thread/ # 线程管理功能
631+
│ └── UmiOCR/ # OCR 识别功能
565632
├── WodToolkit.csproj # 项目文件
566633
└── README.md # 项目文档
567634
```

WodToolkit.wiki

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Subproject commit 71e1e465808be7791667cafc462d798035843e05
1+
Subproject commit 28bb83f5ce201311943f311d4d525b1ca253c738

docs/_layouts/default.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
<li><a href="{{ '/http' | relative_url }}">HTTP请求</a></li>
4444
<li><a href="{{ '/javascript' | relative_url }}">JavaScript</a></li>
4545
<li><a href="{{ '/cache' | relative_url }}">缓存</a></li>
46+
<li><a href="{{ '/umiocr' | relative_url }}">OCR识别</a></li>
4647
<li><a href="https://github.com/thiswod/WodToolKit" target="_blank">GitHub</a></li>
4748
</ul>
4849
</div>
@@ -67,6 +68,8 @@
6768
<li><a href="{{ '/cache' | relative_url }}" {% if page.url == '/cache/' %}class="active"{% endif %}>缓存</a></li>
6869
<li><a href="{{ '/cookie' | relative_url }}" {% if page.url == '/cookie/' %}class="active"{% endif %}>Cookie管理</a></li>
6970
<li><a href="{{ '/json' | relative_url }}" {% if page.url == '/json/' %}class="active"{% endif %}>JSON解析</a></li>
71+
<li><a href="{{ '/idcard' | relative_url }}" {% if page.url == '/idcard/' %}class="active"{% endif %}>身份证验证</a></li>
72+
<li><a href="{{ '/umiocr' | relative_url }}" {% if page.url == '/umiocr/' %}class="active"{% endif %}>OCR识别</a></li>
7073
</ul>
7174
</div>
7275
</nav>

docs/umiocr.md

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
# OCR 识别
2+
3+
WodToolKit 集成了 UmiOCR,提供了便捷的图片文字识别功能。UmiOCR 是一个开源的 OCR 识别服务,支持多种语言和输出格式。
4+
5+
## 功能概述
6+
7+
`UmiOCR` 类提供了以下功能:
8+
9+
- 图片文字识别
10+
- 支持多种识别语言(中文、英文、中英混合等)
11+
- 支持多种输出格式(text、json、jsonl)
12+
- 支持角度自动检测
13+
- 支持忽略区域设置
14+
- 支持自定义 UmiOCR 服务地址
15+
16+
## 前置要求
17+
18+
使用 UmiOCR 功能前,需要先启动 UmiOCR 服务。UmiOCR 是一个独立的 OCR 服务程序,默认运行在 `http://127.0.0.1:1224`
19+
20+
### 安装 UmiOCR
21+
22+
1. 访问 [UmiOCR 官网](https://github.com/hiroi-sora/Umi-OCR) 下载并安装
23+
2. 启动 UmiOCR 服务
24+
3. 确保服务运行在默认端口 1224(或使用自定义地址)
25+
26+
## 基本使用
27+
28+
### 创建 UmiOCR 实例
29+
30+
```csharp
31+
using WodToolkit.src.UmiOCR;
32+
33+
// 使用默认地址(http://127.0.0.1:1224)
34+
var umiOcr = new UmiOCR();
35+
36+
// 使用自定义地址
37+
var customOcr = new UmiOCR("http://192.168.1.100:1224");
38+
```
39+
40+
### 基本 OCR 识别
41+
42+
```csharp
43+
// 最简单的使用方式
44+
string result = umiOcr.Ocr("image.jpg");
45+
Console.WriteLine(result);
46+
```
47+
48+
## 参数说明
49+
50+
`Ocr` 方法支持以下参数:
51+
52+
| 参数 | 类型 | 默认值 | 说明 |
53+
|------|------|--------|------|
54+
| `file` | `string` | 必填 | 图片文件路径 |
55+
| `language` | `string` | `"简体中文"` | 识别语言,可选值:简体中文、繁体中文、英文、日文等 |
56+
| `format` | `string` | `"text"` | 输出格式,可选值:`text`(纯文本)、`json``jsonl` |
57+
| `parser` | `string` | `"none"` | 后处理解析器,可选值:`none`(无)、`merge_line``merge_line_v2`|
58+
| `angle` | `bool` | `false` | 是否自动检测图片角度 |
59+
| `ignoreArea` | `List<int[][]>` | `null` | 忽略区域数组,每一项为 `[[左上角x,y],[右下角x,y]]` |
60+
61+
## 使用示例
62+
63+
### 指定识别语言
64+
65+
```csharp
66+
// 识别简体中文
67+
string result = umiOcr.Ocr("image.jpg", language: "简体中文");
68+
69+
// 识别英文
70+
string result = umiOcr.Ocr("image.jpg", language: "英文");
71+
72+
// 识别中英混合
73+
string result = umiOcr.Ocr("image.jpg", language: "简体中文+英文");
74+
```
75+
76+
### 指定输出格式
77+
78+
```csharp
79+
// 输出纯文本(默认)
80+
string textResult = umiOcr.Ocr("image.jpg", format: "text");
81+
82+
// 输出 JSON 格式
83+
string jsonResult = umiOcr.Ocr("image.jpg", format: "json");
84+
85+
// 输出 JSONL 格式
86+
string jsonlResult = umiOcr.Ocr("image.jpg", format: "jsonl");
87+
```
88+
89+
### 启用角度检测
90+
91+
```csharp
92+
// 自动检测图片角度并旋转
93+
string result = umiOcr.Ocr("image.jpg", angle: true);
94+
```
95+
96+
### 设置忽略区域
97+
98+
忽略区域用于指定图片中不需要识别的区域,每个区域由左上角和右下角坐标定义。
99+
100+
```csharp
101+
using System.Collections.Generic;
102+
103+
// 定义忽略区域
104+
var ignoreAreas = new List<int[][]>
105+
{
106+
// 第一个忽略区域:从 (10, 20) 到 (100, 200)
107+
new int[][] { new int[] { 10, 20 }, new int[] { 100, 200 } },
108+
109+
// 第二个忽略区域:从 (150, 250) 到 (300, 400)
110+
new int[][] { new int[] { 150, 250 }, new int[] { 300, 400 } }
111+
};
112+
113+
string result = umiOcr.Ocr("image.jpg", ignoreArea: ignoreAreas);
114+
```
115+
116+
### 使用后处理解析器
117+
118+
```csharp
119+
// 不使用后处理(默认)
120+
string result1 = umiOcr.Ocr("image.jpg", parser: "none");
121+
122+
// 使用行合并解析器
123+
string result2 = umiOcr.Ocr("image.jpg", parser: "merge_line");
124+
125+
// 使用行合并解析器 v2
126+
string result3 = umiOcr.Ocr("image.jpg", parser: "merge_line_v2");
127+
```
128+
129+
### 完整参数示例
130+
131+
```csharp
132+
var ignoreAreas = new List<int[][]>
133+
{
134+
new int[][] { new int[] { 10, 20 }, new int[] { 100, 200 } }
135+
};
136+
137+
string result = umiOcr.Ocr(
138+
file: "image.jpg",
139+
language: "简体中文",
140+
format: "json",
141+
parser: "merge_line",
142+
angle: true,
143+
ignoreArea: ignoreAreas
144+
);
145+
```
146+
147+
## 错误处理
148+
149+
```csharp
150+
try
151+
{
152+
string result = umiOcr.Ocr("image.jpg");
153+
Console.WriteLine($"识别成功: {result}");
154+
}
155+
catch (Exception ex)
156+
{
157+
Console.WriteLine($"OCR 识别失败: {ex.Message}");
158+
}
159+
```
160+
161+
## API 参考
162+
163+
### UmiOCR 构造函数
164+
165+
```csharp
166+
public UmiOCR(string? Url = "http://127.0.0.1:1224")
167+
```
168+
169+
**参数**
170+
- `Url` (string?, 可选): UmiOCR 服务地址,默认为 `"http://127.0.0.1:1224"`
171+
172+
### Ocr 方法
173+
174+
```csharp
175+
public string Ocr(
176+
string file,
177+
string language = "简体中文",
178+
string format = "text",
179+
string parser = "none",
180+
bool angle = false,
181+
List<int[][]> ignoreArea = null
182+
)
183+
```
184+
185+
**参数**
186+
- `file` (string): 图片文件路径
187+
- `language` (string): 识别语言,默认为 `"简体中文"`
188+
- `format` (string): 输出格式,默认为 `"text"`
189+
- `parser` (string): 后处理解析器,默认为 `"none"`
190+
- `angle` (bool): 是否自动检测图片角度,默认为 `false`
191+
- `ignoreArea` (List<int[][]>): 忽略区域数组,默认为 `null`
192+
193+
**返回值**
194+
- `string`: OCR 识别结果字符串
195+
196+
**异常**
197+
- 如果 OCR 识别失败,会抛出 `Exception` 异常,异常消息包含失败原因
198+
199+
## 注意事项
200+
201+
1. **服务要求**:使用前需要确保 UmiOCR 服务正在运行
202+
2. **图片格式**:支持常见的图片格式(jpg、png、bmp 等)
203+
3. **文件路径**:支持绝对路径和相对路径
204+
4. **性能考虑**:OCR 识别是网络请求,可能需要一定时间,建议在异步环境中使用
205+
5. **错误处理**:建议使用 try-catch 捕获可能的异常
206+
207+
## 使用场景
208+
209+
- 图片文字提取
210+
- 文档扫描识别
211+
- 截图文字识别
212+
- 批量图片 OCR 处理
213+
- 表单数据提取
214+
215+
## 相关链接
216+
217+
- [UmiOCR 官网](https://github.com/hiroi-sora/Umi-OCR)
218+
- [快速开始](../README.md#快速开始)
219+
- [项目主页](../README.md)
220+

0 commit comments

Comments
 (0)