Flutter OCR识别插件dart_hocr的使用

Flutter OCR识别插件dart_hocr的使用

DART HOCR

dart_hocr 是一个用于在 Dart/Flutter 项目中读取和写入 HOCR 的模型。此项目的目的是为 HOCR XML 文件的 CRUD 操作提供一个灵活的模型。

此项目仍在开发中,欢迎任何建议。

HOCR

HOCR 是一种以类似 XML 的格式表示 OCR 输出各个方面的表示形式。 详情请参阅 HOCR 规范

模型

该包包含一个模型,该模型将 HOCR XML 导入到/导出为 Dart 对象。此模型还支持实现 HOCR 查看器所需的一些功能,如下所示:

  • element - HOCR 元素类枚举
  • node - 带有唯一 ID 的元素
  • doc - 一组相互连接形成树状结构的 HOCR 节点
    • 注意,这相当于一个 HOCR XML 文件

支持的功能(X - 当前支持)

[X] 从 XML 字符串导入为 `Doc` 对象
[X] 将 `Doc` 对象导出为 XML 字符串
[X] 软删除/禁用节点(标记为已删除 | 可恢复)
[ ] 硬删除节点(永久删除 | 不可恢复)
[X] 从 `ocrx_word` 节点编辑文本
[ ] JSON 支持
[ ] 关联图像
[ ] 合并相同类别的节点

支持的元素

ocr_page,
ocr_carea,
ocr_par,
ocr_line,
ocrx_word,
ocr_textfloat,
ocr_header,
ocr_photo,
ocr_separator,
ocr_caption

如何使用它

  • 要将 HOCR XML 字符串读取为对象,请使用 HOCRImport.fromXMLString(xmlString: xmlString)
  • 要将对象写回到 XML 字符串,请使用 doc.xmlDocument.toXmlString()
  • 要从 XML 字符串中提取原始文本,请使用 getRawText(xmlString)

处理

在导入数据时会进行清理以纠正对齐和顺序等问题,这些都还在试验阶段。如果某些文本丢失,请先禁用实验性功能。

TODO: 提供一种方法来程序化地启用或禁用处理。

示例

提供了一个非常简单的应用程序来帮助理解这个包。该包被用于另一个 Flutter 包,该包帮助编辑 HOCR 文件。 请参考该链接获取更多详细信息。

TODO: 提供一个 Flutter HOCR 编辑器的链接。

在示例目录中提供了几个 HOCR 文件样本。

示例代码

import 'dart:io';
import 'package:dart_hocr/dart_hocr.dart';

void main(List<String> args) async {
  if (args.isNotEmpty && args.length == 2) {
    // 忽略:未使用的局部变量
    final doc = HOCRImport.fromXMLString(xmlString: File(args[0]).readAsStringSync());
    File(args[1]).writeAsStringSync(doc.xmlDocument.toXmlString());
  } else {
    print("Usage: dart_hocr <XML In> <XML Out>");
  }
}

更多关于Flutter OCR识别插件dart_hocr的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter OCR识别插件dart_hocr的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_hocr 是一个 Flutter 插件,用于在移动应用中实现 OCR(光学字符识别)功能。它允许你从图像中提取文本,并将其转换为可编辑的格式。以下是如何在 Flutter 项目中使用 dart_hocr 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 dart_hocr 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  dart_hocr: ^latest_version

然后,运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 dart_hocr 插件。

import 'package:dart_hocr/dart_hocr.dart';

3. 初始化 OCR 引擎

在使用 OCR 功能之前,你需要初始化 OCR 引擎。

HOCR hocr = HOCR();

4. 加载图像

你可以从文件、网络或相机加载图像。假设你有一个图像文件的路径:

String imagePath = 'path_to_your_image';

5. 执行 OCR

使用 hocr.recognizeText 方法从图像中提取文本。

Future<void> recognizeText() async {
  try {
    String recognizedText = await hocr.recognizeText(imagePath);
    print('Recognized Text: $recognizedText');
  } catch (e) {
    print('Error recognizing text: $e');
  }
}

6. 处理结果

recognizeText 方法返回一个包含识别文本的字符串。你可以根据需要处理这个文本,例如显示在 UI 中或保存到文件。

Text(recognizedText);

7. 释放资源

在不再需要 OCR 引擎时,释放资源。

hocr.dispose();

完整示例

以下是一个完整的示例,展示了如何使用 dart_hocr 插件从图像中提取文本并在 Flutter 应用中显示。

import 'package:flutter/material.dart';
import 'package:dart_hocr/dart_hocr.dart';

class OCRScreen extends StatefulWidget {
  [@override](/user/override)
  _OCRScreenState createState() => _OCRScreenState();
}

class _OCRScreenState extends State<OCRScreen> {
  String recognizedText = '';

  Future<void> recognizeText() async {
    HOCR hocr = HOCR();
    String imagePath = 'path_to_your_image';

    try {
      String text = await hocr.recognizeText(imagePath);
      setState(() {
        recognizedText = text;
      });
    } catch (e) {
      print('Error recognizing text: $e');
    } finally {
      hocr.dispose();
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OCR Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: recognizeText,
              child: Text('Recognize Text'),
            ),
            SizedBox(height: 20),
            Text('Recognized Text: $recognizedText'),
          ],
        ),
      ),
    );
  }
}
回到顶部