baidu_ocr_plugin 2.0.2 copy "baidu_ocr_plugin: ^2.0.2" to clipboard
baidu_ocr_plugin: ^2.0.2 copied to clipboard

BaiduOCR SDK for Flutter. This package aims to support different Flutter targets by relying on the many platforms supported by BaiduOCR with native SDKs.

example/lib/main.dart

import 'dart:typed_data';

import 'package:baidu_ocr_plugin/baidu_ocr_plugin.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:image_picker/image_picker.dart';
import 'package:permission_handler/permission_handler.dart';

const ak = 'LrWkpucBSIKHErkFLWl71Pji';
const sk = 'YnRX31Nz3g5aKUFPtv6A6oYvFFWhgRd6';

void main() {
  /* Always call this if the main method is asynchronous*/
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: EasyLoading.init(),
      home: const Home(),
    );
  }
}

class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  bool hasGotToken = false;

  @override
  void initState() {
    [Permission.camera, Permission.storage].request();
    _initAccessToken();
    // _initAccessTokenWithAkSk();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('baidu_ocr_plugin'),
      ),
      body: SafeArea(
        child: ListView(
          padding: const EdgeInsets.all(16),
          children: [
            ElevatedButton(
              child: const Text('自定义图片-通用文字识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                showDialog(
                  barrierDismissible: false,
                  context: context,
                  builder: (context) {
                    return AlertDialog(
                      title: const Text('说明'),
                      content: const SingleChildScrollView(
                          child: Text(
                              '通过自己的方式得到图片的二进制数据,然后通过bytes参数传入,这个示例中使用的是image_picker插件,通过ImagePicker.pickImage得到图片的二进制数据')),
                      actions: [
                        TextButton(
                          onPressed: () async {
                            Navigator.pop(context);

                            final ImagePicker _picker = ImagePicker();
                            final XFile? photo = await _picker.pickImage(
                                source: ImageSource.camera,
                                maxHeight: 1080,
                                maxWidth: 1080);
                            if (photo != null) {
                              final Uint8List bytes = await photo.readAsBytes();
                              debugPrint(
                                  'await photo.length: ${await photo.length()}');
                              debugPrint('bytes.length: ${bytes.length}');
                              BaiduOcrPlugin.instance.recognizeGeneralBasic(
                                  RecognizeCallbackHandler(
                                      onStart: _handleStart,
                                      onResult: handleJsonRes,
                                      onError: handleOcrError),
                                  bytes: bytes);
                            }
                          },
                          child: const Text('确定'),
                        )
                      ],
                    );
                  },
                );
              },
            ),
            const Divider(),
            ElevatedButton(
              child: const Text('通用文字识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeGeneralBasic(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('通用文字识别(高精度版)'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeAccurateBasic(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('通用文字识别(含位置信息版)'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeGeneral(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('通用文字识别(高精度含位置信息版)'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeAccurate(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('通用文字识别(含生僻字版)'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeGeneralEnhanced(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('网络图片文字识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeWebimage(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('身份证正面(嵌入式质量控制+云端识别)'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeIdCardFrontNative(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('身份证反面(嵌入式质量控制+云端识别)'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeIdCardBackNative(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('银行卡识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeBankCard(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('驾驶证识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeDrivingLicense(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('行驶证识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeVehicleLicense(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('车牌识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeLicensePlate(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('营业执照识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeBusinessLicense(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('通用票据识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeReceipt(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('增值税发票识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeVatInvoice(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('出租车票'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeTaxireceipt(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('VIN码'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeVincode(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('火车票'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeTrainticket(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('数字识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeNumbers(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('二维码识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeQrcode(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('行程单识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeTripTicket(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('机动车销售发票识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeVihickleSellInvoice(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('车辆合格证'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeVihickleCertificate(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('试卷分析与识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeExampleDoc(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('手写文字识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeWrittenText(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('护照识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizePassport(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('户口本识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeHuKouPage(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('普通机打发票识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeNormalMachineInvoice(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('自定义模板'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recognizeCustom(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('磅单识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeweightnote(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('医疗费用明细识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzemedicaldetail(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
            ElevatedButton(
              child: const Text('网约车行程单识别'),
              onPressed: () {
                if (!checkTokenStatus()) return;

                BaiduOcrPlugin.instance.recoginzeonlinetaxiitinerary(
                    RecognizeCallbackHandler(
                        onStart: _handleStart,
                        onResult: handleJsonRes,
                        onError: handleOcrError));
              },
            ),
          ],
        ),
      ),
    );
  }

  bool checkTokenStatus() {
    if (!hasGotToken) EasyLoading.showToast('token还未成功获取');

    return hasGotToken;
  }

  void _alert(BuildContext context, String title, [Widget? content]) {
    showDialog(
      barrierDismissible: false,
      context: context,
      builder: (context) {
        return AlertDialog(
          title: Text(title),
          content: SingleChildScrollView(child: content),
          actions: [
            TextButton(
              onPressed: () {
                Navigator.pop(context);
              },
              child: const Text('确定'),
            )
          ],
        );
      },
    );
  }

  // ignore: unused_element
  void _initAccessTokenWithAkSk() async {
    try {
      await BaiduOcrPlugin.instance.initAccessTokenWithAkSk(ak, sk);
      hasGotToken = true;
      EasyLoading.dismiss();
    } on OCRError catch (e) {
      await EasyLoading.dismiss();
      _alert(context, '初始化错误', Text(e.message));
    }
  }

  // ignore: unused_element
  void _initAccessToken() async {
    try {
      await BaiduOcrPlugin.instance.initAccessToken();
      hasGotToken = true;
      EasyLoading.dismiss();
    } on OCRError catch (e) {
      await EasyLoading.dismiss();
      _alert(context, '初始化错误', Text(e.message));
    }
  }

  void _handleStart(Uint8List imageBytes) {
    _alert(context, '图片', Image.memory(imageBytes));
    EasyLoading.show(status: '正在识别', maskType: EasyLoadingMaskType.black);
  }

  void handleJsonRes(String jsonRes) {
    EasyLoading.dismiss();
    _alert(context, '识别结果', Text(jsonRes));
  }

  void handleOcrError(OCRError ocrError) {
    EasyLoading.dismiss();
    _alert(context, '识别错误', Text(ocrError.message));
  }
}
6
likes
130
pub points
51%
popularity

Publisher

unverified uploader

BaiduOCR SDK for Flutter. This package aims to support different Flutter targets by relying on the many platforms supported by BaiduOCR with native SDKs.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (LICENSE)

Dependencies

flutter

More

Packages that depend on baidu_ocr_plugin