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?