opencv - Flutter 实时人脸检测

标签 opencv flutter firebase-mlkit

我目前正在开发一款需要实时人脸检测的应用。现在我在应用程序中有 mlkit 库,我正在使用 firebase 人脸检测器。目前,每次我尝试从文件中检测人脸时都会产生错误:

DynamiteModule(13840): Local module descriptor class for com.google.android.gms.vision.dynamite.face not found.

至于实时部分,我尝试使用 Flutter 中的 RepaintBoundary 来获取相机小部件(几乎)每一帧的屏幕截图,并将其转换为二进制文件以进行人脸检测。但由于某种原因,每次我尝试截取相机小部件时, flutter 都会崩溃。它适用于其他小部件。

在遇到这两个问题并花了很长时间试图解决它们之后,我一直在考虑用 android/iOS native 代码来做应用程序的相机部分(我会用 OpenCV 来做这件事,这样我可以进行实时检测)。有没有办法可以使用平台 channel 在 kotlin 和 swift 中实现相机 View 并将其导入到 flutter 小部件?或者还有其他更简单的方法来实现吗?

最佳答案

关于实时获取摄像头图像流,我在另一个问题中回答了How to access camera frames in flutter quickly你想使用 CameraController#startImageStream

import 'package:camera/camera.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(home: _MyHomePage()));

class _MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<_MyHomePage> {
  dynamic _scanResults;
  CameraController _camera;

  bool _isDetecting = false;
  CameraLensDirection _direction = CameraLensDirection.back;

  @override
  void initState() {
    super.initState();
    _initializeCamera();
  }

  Future<CameraDescription> _getCamera(CameraLensDirection dir) async {
    return await availableCameras().then(
      (List<CameraDescription> cameras) => cameras.firstWhere(
            (CameraDescription camera) => camera.lensDirection == dir,
          ),
    );
  }

  void _initializeCamera() async {
    _camera = CameraController(
      await _getCamera(_direction),
      defaultTargetPlatform == TargetPlatform.iOS
          ? ResolutionPreset.low
          : ResolutionPreset.medium,
    );
    await _camera.initialize();
    _camera.startImageStream((CameraImage image) {
      if (_isDetecting) return;
      _isDetecting = true;
      try {
        // await doOpenCVDectionHere(image)
      } catch (e) {
        // await handleExepction(e)
      } finally {
        _isDetecting = false;
      }
    });
  }
  Widget build(BuildContext context) {
    return null;
  }
}

关于opencv - Flutter 实时人脸检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51527143/

相关文章:

python - 为什么会给我TypeError:参数 'src'预期为cv::UMat?

flutter - SetState Flutter导致错误: 'int'类型不是 'String'类型的子类型

Flutter:如何以印度编号格式显示货币?

ios - MLKit文本检测异常-[Not A Type _cfTypeID] : message sent to deallocated instance 0x106623e20

java - 使用 Tensorflow Lite 在 Android Java 上进行面部表情识别

python - 将连接的组件分离到多个图像

python - 减少 Visual Studio Code 中 python 代码的调试启动时间

android - 如何将 optimized_graph.lite 文件转换为 .tflite 文件?

iphone - IOS 中 glColor4f OpenGl 函数的应用程序崩溃

android - 当onTap时,所有图标都会更改颜色,如何在单击时仅更改一个?