Stefan
Stefan

Reputation: 99

Live text recognition ( region of interest)

I have live text recognition using the following libraries:

https://pub.dev/packages/google_mlkit_text_recognition

https://pub.dev/packages/camera,

I would like to detect text only in the marked area. This is what I have so far.

  Future _processCameraImage(CameraImage image) async {
    final WriteBuffer allBytes = WriteBuffer();

    for (final Plane plane in image.planes) {
      allBytes.putUint8List(plane.bytes);
    }

    final bytes = allBytes.done().buffer.asUint8List();

    final Size imageSize =
        Size(image.width.toDouble(), image.height.toDouble());

    final camera = cameras[_cameraIndex];
    final imageRotation =
        InputImageRotationValue.fromRawValue(camera.sensorOrientation) ??
            InputImageRotation.rotation0deg;

    final inputImageFormat =
        InputImageFormatValue.fromRawValue(image.format.raw) ??
            InputImageFormat.nv21;

    final planeData = image.planes.map(
      (Plane plane) {
        return InputImagePlaneMetadata(
          bytesPerRow: plane.bytesPerRow,
          height: plane.height,
          width: plane.width,
        );
      },
    ).toList();

    final inputImageData = InputImageData(
      size: imageSize,
      imageRotation: imageRotation,
      inputImageFormat: inputImageFormat,
      planeData: planeData,
    );

    final inputImage =
        InputImage.fromBytes(bytes: bytes, inputImageData: inputImageData);
    //
    widget.onImage(inputImage);
  }

  Future<void> processImage(InputImage inputImage) async {
    if (!_canProcess) return;
    if (_isBusy) return;
    _isBusy = true;

    final recognizedText = await _textRecognizer.processImage(inputImage);

    if (mounted) {
      for (var element in recognizedText.blocks) {
        for (var line in element.lines) {
          for (var txt in line.elements) {
            if (txt.text.length == 17) {
              setState(() {
                _text = txt.text;
              });
            }
          }
        }
      }
    }
    _isBusy = false;
  }

Upvotes: 4

Views: 1703

Answers (1)

Vlad Evtushenko
Vlad Evtushenko

Reputation: 23

I had a similar task, I used the module mask_for_camera_view

create your own frame and find the values ​​of the cropped picture

more details & photo example in github

Upvotes: 1

Related Questions