0
import 'dart:io';

import 'dart:ui' as ui;

import 'package:flutter/material.dart';

import 'package:google_ml_kit/google_ml_kit.dart';

class ImageTextRecognitionWidget extends StatefulWidget {

  final File imageFile;

  const ImageTextRecognitionWidget({Key? key, required this.imageFile}): super(key: key);

  @override

  _ImageTextRecognitionWidgetState createState() =>

      _ImageTextRecognitionWidgetState();

}

class _ImageTextRecognitionWidgetState extends State<ImageTextRecognitionWidget> {

  List<TextBlock> textBlocks = [];

  @override

  void initState() {

    super.initState();

    _performTextRecognition();

  }

  Future<void> _performTextRecognition() async {

    final inputImage = InputImage.fromFile(widget.imageFile);

    final textRecognizer = GoogleMlKit.vision.textDetector();

    final recognisedText = await textRecognizer.processImage(inputImage);

    const selectedLanguage = 'zh'; // Selected language (e.g. Chinese)

    final selectedTextBlocks = recognisedText.blocks.where((block) {

      return block.recognizedLanguages.any((language) => language == selectedLanguage);

    }).toList();

    setState(() {

      textBlocks = selectedTextBlocks;

    });

    textRecognizer.close();

  }

  @override

  Widget build(BuildContext context) {

    return Scaffold(

      body: Stack(

        children: [

          Image.file(widget.imageFile),

          CustomPaint(

            painter: TextBlocksPainter(textBlocks),

          ),

        ],

      ),

    );

  }

}

class TextBlocksPainter extends CustomPainter {

  final List<TextBlock> textBlocks;

  TextBlocksPainter(this.textBlocks);

  @override

  void paint(Canvas canvas, Size size) {

    final paint = Paint()

      ..style = PaintingStyle.stroke

      ..strokeWidth = 2.0

      ..color = Colors.green;

    for (final block in textBlocks) {

      final rect = Rect.fromLTRB(

        block.rect.left,

        block.rect.top,

        block.rect.right,

        block.rect.bottom,

      );

      canvas.drawRect(rect, paint);

    }

  }

  @override

  bool shouldRepaint(covariant CustomPainter oldDelegate) {

    return true;

  }

}

I have tried the code mentioned above, but it doesn't behave as I intended. Can anyone help me with this?

quoci
  • 2,940
  • 1
  • 9
  • 21
Huy Quoc
  • 1
  • 2

0 Answers0