Я строю OCR, используя флаттер. Он обнаруживает текст в реальном времени с помощью камеры и отмечает его с помощью CustomPainter. Нажмите здесь, чтобы посмотреть пример изображения
Я могу выделить текст с помощью маркера rectanglur. Но теперь я хочу напечатать конкретный текст или строку на обложке коробки. как я могу этого достичь? я использую этот пример
Пример
Widget _buildResults() {
const Text noResultsText = Text('No results!');
if (_scanResults == null ||
_camera == null ||
!_camera.value.isInitialized) {
return noResultsText;
}
CustomPainter painter;
final Size imageSize = Size(
_camera.value.previewSize.height,
_camera.value.previewSize.width,
);
painter = TextDetectorPainter(imageSize, _scanResults);
return CustomPaint(
painter: painter,
);
}
class TextDetectorPainter extends CustomPainter {
TextDetectorPainter(this.absoluteImageSize, this.visionText);
final Size absoluteImageSize;
final VisionText visionText;
@override
void paint(Canvas canvas, Size size) {
final double scaleX = size.width / absoluteImageSize.width;
final double scaleY = size.height / absoluteImageSize.height;
Rect scaleRect(TextContainer container) {
return Rect.fromLTRB(
container.boundingBox.left * scaleX,
container.boundingBox.top * scaleY,
container.boundingBox.right * scaleX,
container.boundingBox.bottom * scaleY,
);
}
final Paint paint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 1.0;
for (TextBlock block in visionText.blocks) {
paint.color = Colors.black;
canvas.drawRect(scaleRect(block), paint);
}
}
@override
bool shouldRepaint(TextDetectorPainter oldDelegate) {
return oldDelegate.absoluteImageSize != absoluteImageSize ||
oldDelegate.visionText != visionText;
}
}