Flutter OCR编辑插件hocr_editor的使用

Flutter OCR编辑插件hocr_editor的使用

简介

hocr_editor 是一个用于 Flutter 的全屏小部件,它能够显示 HOCR(XML)文件,并与原始图像一起展示,允许用户编辑其中的文字。目前版本支持编辑单词和删除单词。未来计划将其扩展为一个完整的编辑器,支持手动添加新单词、搜索和合并块等功能。

依赖项

该插件使用了 dart_hocr 包来与 XML 文件进行交互。

This package uses dart_hocr package for interacting with xml file.


### 编辑控制器
`Editing controller` 允许外部与内容进行交互。


Editing controller allows external interaction with the content.

TODO: 需要文档化编辑控制器的接口。


完整示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 中使用 hocr_editor 插件。

示例代码

import 'package:flutter/services.dart' show ByteData, rootBundle;
import 'package:dart_hocr/dart_hocr.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hocr_editor/hocr_editor.dart'; // 导入 hocr_editor 包

void main() {
  runApp(const ProviderScope(child: MyApp())); // 使用 Riverpod 管理状态
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'HOCR Editor',
      home: HOCRDemo(), // 主页面
      debugShowCheckedModeBanner: false,
    );
  }
}

class HOCRDemo extends StatefulWidget {
  const HOCRDemo({super.key});

  [@override](/user/override)
  State<HOCRDemo> createState() => _HOCRDemoState(); // 创建状态类
}

class _HOCRDemoState extends State<HOCRDemo> {
  bool isSaving = false; // 控制保存动画的状态

  // 加载资源文件
  Future<OCRImage?> loadAssets() async {
    final ByteData bytes = await rootBundle.load('assets/sample1.jpg'); // 加载图像文件

    return await OCRImage.fromOCRData(
      image: bytes.buffer.asUint8List(), // 将图像数据转换为 Uint8List
      lang1: 'hi', // 设置语言为印地语
      width: 3024, // 图像宽度
      height: 4032, // 图像高度
      xmlString: await rootBundle.loadString('assets/sample1.hocr'), // 加载 HOCR XML 文件
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea( // 确保内容不会超出屏幕边缘
      child: Scaffold(
        backgroundColor: Colors.transparent, // 背景透明
        body: FutureBuilder( // 异步加载数据
          future: loadAssets(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              // 如果正在加载,显示等待动画
              return Center(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: const [
                    Text("Wait while loading the asset resources"), // 提示文字
                    CircularProgressIndicator(), // 加载动画
                  ],
                ),
              );
            }
            if (snapshot.data == null) {
              // 如果加载失败,显示错误提示
              return const Center(
                child: Text("Failed loading the asset resources"),
              );
            }

            return Stack( // 堆叠布局
              children: [
                HOCREditor( // HOCR 编辑器
                  ocrImage: snapshot.data as OCRImage, // 设置 OCR 图像数据
                  ocrViewController: HOCREditingController( // 编辑控制器
                    edit: true, // 启用编辑功能
                    onDiscardImage: () {}, // 取消操作回调
                    onCopyToClipboard: (text) {}, // 复制到剪贴板回调
                    onDictLookup: (String text, {required String lang}) {}, // 字典查询回调
                    onSaveImage: (img) async { // 保存图像回调
                      setState(() {
                        isSaving = true; // 开始保存动画
                      });

                      // 模拟保存逻辑
                      setState(() {
                        isSaving = false; // 结束保存动画
                      });
                      return img;
                    },
                  ),
                ),
                if (isSaving) const Center(child: CircularProgressIndicator()), // 显示保存动画
              ],
            );
          },
        ),
      ),
    );
  }
}

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

1 回复

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


hocr_editor 是一个用于 Flutter 的 OCR 编辑插件,它允许用户在应用程序中编辑 OCR 识别后的文本。hocr_editor 插件通常用于处理 HOCR 格式的 OCR 结果,HOCR 是一种基于 HTML 的格式,用于存储 OCR 识别后的文本及其布局信息。

安装 hocr_editor 插件

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

dependencies:
  flutter:
    sdk: flutter
  hocr_editor: ^0.0.1  # 请确保使用最新版本

然后运行 flutter pub get 来安装依赖。

使用 hocr_editor 插件

以下是一个简单的示例,展示如何在 Flutter 应用中使用 hocr_editor 插件来编辑 OCR 识别后的文本。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'HOCR Editor Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HOCREditorScreen(),
    );
  }
}

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

class _HOCREditorScreenState extends State<HOCREditorScreen> {
  final HOCREditorController _controller = HOCREditorController();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 加载 HOCR 数据
    _controller.loadHOCR('''
      <div class='ocr_page'>
        <div class='ocr_carea'>
          <div class='ocr_par'>
            <div class='ocr_line'>
              <span class='ocrx_word'>Hello</span>
              <span class='ocrx_word'>World</span>
            </div>
          </div>
        </div>
      </div>
    ''');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('HOCR Editor'),
      ),
      body: Column(
        children: [
          Expanded(
            child: HOCREditor(
              controller: _controller,
            ),
          ),
          ElevatedButton(
            onPressed: () {
              // 获取编辑后的 HOCR 数据
              String editedHOCR = _controller.getHOCR();
              print(editedHOCR);
            },
            child: Text('Save'),
          ),
        ],
      ),
    );
  }
}
回到顶部