Flutter视频处理与OCR识别插件vidvocr_flutter_plugin的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter视频处理与OCR识别插件vidvocr_flutter_plugin的使用

vidvocr_flutter_plugin

一个用于将VIDVOCR SDK的OCR功能集成到跨平台应用中的Flutter插件。支持iOS和Android,并提供统一的API以实现无缝的文字识别。该插件易于定制且优化了高性能。

示例代码

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/services.dart';
import 'package:vidvocr_flutter_plugin/vidvocr_flutter_plugin.dart';
import 'package:pretty_http_logger/pretty_http_logger.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _ocrResult = 'No result yet last 7 ';
  final _vidvocrFlutterPlugin = VidvocrFlutterPlugin();

  // 示例凭据,替换为真实值
  final String baseURL = 'https://www.valifystage.com';
  final String bundleKey = 'ad44eb94ca6747beaf99eef02407221f';
  final String userName = 'mobileusername';
  final String password = '3B8uGe8bNTquN84';
  final String clientID = 'aKM21T4hXpgHFsgNJNTKFpaq4fFpoQvuBsNWuZoQ';
  final String clientSecret = 'r0tLrtxTue8c4kNmPVgaAFNGSeCWvL4oOZfBnVXoQe2Ffp5rscXXAAhX50BaZEll8ZRtr2BlgD3Nk6QLOPGtjbGXYoCBL9Fn7QCu5CsMlRKDbtwSnUAfKEG30cIv8tdW';

  // 使用提供的凭据生成token的函数
  Future<String?> getToken() async {
    final String url = '$baseURL/api/o/token/';
    HttpWithMiddleware httpWithMiddleware = HttpWithMiddleware.build(middlewares: [
      HttpLogger(logLevel: LogLevel.BODY),
    ]);
    final Map<String, String> headers = {
      'Content-Type': 'application/x-www-form-urlencoded',
    };

    final String body =
        'username=$userName&password=$password&client_id=$clientID&client_secret=$clientSecret&grant_type=password';

    final http.Response response = await httpWithMiddleware.post(
      Uri.parse(url),
      headers: headers,
      body: body,
    );

    if (response.statusCode == 200) {
      final Map<String, dynamic> jsonResponse = json.decode(response.body);
      return jsonResponse['access_token'];
    } else {
      print('Failed to retrieve token: ${response.statusCode}');
      return null;
    }
  }

  // 在生成token后启动SDK的函数
  Future<void> startSDK() async {
    String? token;

    try {
      token = await getToken();
      if (token == null) {
        setState(() {
          _ocrResult = 'Failed to get token';
        });
        return;
      }
    } catch (e) {
      setState(() {
        _ocrResult = 'Error retrieving token: $e';
      });
      return;
    }

    final Map<String, dynamic> params = {
      "base_url": baseURL,
      "access_token": token,
      "bundle_key": bundleKey,
      "language": "en",
      "document_verification": false,
      "review_data": false,
      "capture_only_mode": false,
      "manual_capture_mode": true,
      "preview_captured_image": true,
      "primary_color": "#FF0000",
      "enable_logging": true,
      "collect_user_info": false,       // 新参数
      "advanced_confidence": false,     // 新参数
      "profession_analysis": false,     // 新参数
      "document_verification_plus": false // 新参数
    };

    try {
      final String? result = await VidvocrFlutterPlugin.startOCR(params);
      setState(() {
        print(result);
        _ocrResult = result ?? 'Failed to start OCR process.';
      });
    } on PlatformException catch (e) {
      setState(() {
        _ocrResult = 'Failed to start SDK: ${e.message}';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('OCR插件示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: startSDK,
                child: const Text('开始OCR'),
              ),
              const SizedBox(height: 20),

              Expanded(
                child: SingleChildScrollView(
                  padding: const EdgeInsets.all(16.0),
                  child: Text(
                    'OCR结果: $_ocrResult\n',
                    textAlign: TextAlign.left, // 根据需要调整对齐方式
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 vidvocr_flutter_plugin 进行视频处理和 OCR 识别的 Flutter 代码示例。请注意,假设你已经正确地在你的 Flutter 项目中添加了 vidvocr_flutter_plugin 依赖,并且已经完成了所有必要的配置。

首先,确保在你的 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  vidvocr_flutter_plugin: ^最新版本号  # 请替换为实际版本号

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

以下是一个基本的 Flutter 应用示例,展示了如何使用 vidvocr_flutter_plugin 进行视频处理和 OCR 识别:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Video OCR Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final VidVocrFlutterPlugin _vidvocrPlugin = VidVocrFlutterPlugin();
  String? ocrResult;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Video OCR Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                // 假设你有一个视频文件路径
                String videoPath = "/path/to/your/video.mp4";

                // 调用插件进行视频处理和OCR识别
                try {
                  String result = await _vidvocrPlugin.processVideoAndRecognizeOCR(videoPath);
                  setState(() {
                    ocrResult = result;
                  });
                } catch (e) {
                  print("Error processing video: $e");
                }
              },
              child: Text('Process Video and Recognize OCR'),
            ),
            if (ocrResult != null)
              Text(
                'OCR Result:\n$ocrResult',
                style: TextStyle(fontSize: 18),
                textAlign: TextAlign.center,
              ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的 Flutter 应用,它包含一个按钮和一个用于显示 OCR 结果的文本区域。当用户点击按钮时,应用会调用 vidvocr_flutter_pluginprocessVideoAndRecognizeOCR 方法来处理指定的视频文件,并显示 OCR 识别结果。

请注意,processVideoAndRecognizeOCR 方法的具体实现和参数可能会根据 vidvocr_flutter_plugin 的版本有所不同。因此,请参考插件的官方文档以获取最新的使用说明和 API 参考。

此外,由于视频处理和 OCR 识别是资源密集型任务,因此在实际应用中,你可能需要考虑将这些任务放在后台线程或隔离的 Dart 异步任务中执行,以避免阻塞主线程并影响应用的响应性。

回到顶部