【问题标题】:Flutter Google-Ml-Kit-plugin - FaceDetector not working in iPhone camerasFlutter Google-Ml-Kit-plugin - FaceDetector 在 iPhone 相机中不起作用
【发布时间】:2022-08-14 15:48:01
【问题描述】:

如果我们在 iPhone 上拍照

    final XFile? image = await picker.pickImage(
    source: ImageSource.camera,
    maxWidth: 300,
    maxHeight: 300,
    preferredCameraDevice: CameraDevice.front,
    );
final List faces = await faceDetector.processImage(inputImage);

总是给出空列表

final FaceDetector faceDetector = FaceDetector(
    options: FaceDetectorOptions(
    enableTracking: true,
    enableContours: true,
    enableClassification: true,
    enableLandmarks: true,
    performanceMode: FaceDetectorMode.accurate));
final inputImage = InputImage.fromFilePath(image.path);
final List faces = await faceDetector.processImage(inputImage);
print(faces.length); // IS ALWAYS ZERO

如果来源:iPhone 中的 ImageSource.gallery,则效果很好

    标签: iphone flutter face-detection google-mlkit


    【解决方案1】:

    通过给予修复

    import 'dart:math' as Math;
    import 'dart:math';
    import 'package:image/image.dart' as Im;
    
    class CompressObject {
      File imageFile;
      String path;
      int rand;
      CompressObject(this.imageFile, this.path, this.rand);
    }
    
    Future<String> compressImage(CompressObject object) async {
      return compute(decodeImage, object);
    }
    
    String decodeImage(CompressObject object) {
      Im.Image? image = Im.decodeImage(object.imageFile.readAsBytesSync());
      I.m.Image smallerImage = Im.copyResize(
        image!,width: 200,height: 200
      ); // choose the size here, it will maintain aspect ratio
      var decodedImageFile = File(object.path + '/img_${object.rand}.jpg');
      decodedImageFile.writeAsBytesSync(Im.encodeJpg(smallerImage, quality: 85));
      return decodedImageFile.path;
    }
    

    然后:

    void chooseImage(bool isFromGallery) async {
      final XFile? image = await picker.pickImage(
        source: isFromGallery ? ImageSource.gallery : ImageSource.camera,
        preferredCameraDevice: CameraDevice.front,
      );
      if (image != null) {
        if (Platform.isIOS) {
          final tempDir = await getTemporaryDirectory();
          final rand = Math.Random().nextInt(10000);
          CompressObject compressObject = CompressObject(File(image.path), tempDir.path, rand);
          String filePath = await compressImage(compressObject);
          print('new path: ' + filePath);
          file = File(filePath);
        } else {
          file = File(image.path);
        } 
      }
      final inputImage = InputImage.fromFilePath(i file.path);
      final List<Face> faces = await faceDetector.processImage(inputImage);
      /.........../
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2021-05-11
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多