detectObjectsCropSaveImage method

Future<Image?> detectObjectsCropSaveImage(
  1. dynamic imageFile
)

Implementation

Future<img.Image?> detectObjectsCropSaveImage(var imageFile) async {
  /// method detect objects from iamge crop face and save to
  /// location provided to function
  List<Rect> rectArray = [];
  List<Map<String, int>> objectMaps = [];

  final inputImage = InputImage.fromFile(File(imageFile.path));

  var objectDetector = GoogleMlKit.vision.objectDetector(
      options: ObjectDetectorOptions(
          mode: DetectionMode.single,
          classifyObjects: true,
          multipleObjects: true));
  List<DetectedObject> objects =
      await objectDetector.processImage(inputImage);

  for (DetectedObject object in objects) {
    for (Label label in object.labels) {
      debugPrint('${label.text} ${label.confidence}');
    }
  }

  img.Image? croppedObject;

  if (objects.isNotEmpty) {
    for (DetectedObject object in objects) {
      rectArray.add(object.boundingBox);
      int w = object.boundingBox.width.toInt().round();
      int h = object.boundingBox.height.toInt().round();
      int x = object.boundingBox.left.toInt().round();
      int y = object.boundingBox.top.toInt().round();
      Map<String, int> thisMap = {'x': x, 'y': y, 'w': w, 'h': h};
      objectMaps.add(thisMap);
    }

    img.Image? originalImage =
        img.decodeImage(File(imageFile.path).readAsBytesSync());
    croppedObject = img.copyCrop(
      originalImage!,
      objectMaps[0]['x']!,
      objectMaps[0]['y']!,
      objectMaps[0]['w']!,
      objectMaps[0]['h']!,
    );
  }
  return croppedObject;
}