如何在Flutter应用中使用 OpenCV和 CC++库进行图像流处理

本文指导如何在Flutter应用中集成C/C++插件,特别是OpenCV,以解决Flutter相机插件在处理图像流时的性能问题。通过使用Dart的Isolates和FFI,结合OpenCV的C++库,实现在Android和iOS上的高效图像处理,同时保持UI流畅。文章提供了结构建议、处理流程和FFI绑定的详细步骤,以及GitHub仓库链接供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将帮助你在 Android 和 iOS 中为 Flutter 应用程序集成 C/C++ 插件。

问题1: Flutter camera 插件没有为快速复杂的图像流处理提供完整的指南。

问题2: Flutter camera 插件处理图像流太慢。

问题3:图像处理需要OpenCV包

问题4:你当前的图像流处理实现正在阻塞 UI 并导致你的应用程序滞后和内存泄漏

问题5:缺乏实现接口和使用 Dart FFI 库有效集成 C/C++ 库的知识

本指南将通过使用 OpenCV C++ 构建适用于 Android 和 iOS 的示例应用程序来解决每个问题,以进行图像流处理。

先决条件

在开始之前,需要一个带有 OpenCV C++ 的 Flutter 插件及其适用于 Android 的静态库以及适用于 iOS 的 xcframework。本文不会介绍如何执行此操作,但你可以按照下方链接提供的指南或在我提供的 GitHub 存储库中运行脚本文件。

  • 指南:https://medium.com/@khaifunglim97/how-to-build-a-flutter-app-with-c-c-libraries-via-ffi-on-android-and-ios-including-opencv-1e2124e85019

  • 脚本文件:https://github.com/khaifunglim97/flutter_ffi_examples

对于 Android,确保 CMakeLists.txt 构建所需的库,并将 build.gradle 设置为以下值,防止OpenCV 产生错误。

externalNativeBuild {            
    cmake {                
        cppFlags "-frtti -fexceptions -std=c++17"
        abiFilters 'armeabi-v7a', 'arm64-v8a'            
    }        
}

对于 iOS,确保 podspec 下的 vendored_frameworks 包含 OpenCV 的 xcframework。

此外,本指南假设有一个工作状态小部件,类似于 flutter camera 插件中提供的简单示例,其中包含一个 CameraPreview 小部件及其所需的设置。

示例:https://pub.dev/packages/camera

假设

本指南仅承诺在手机后置摄像头上以纵向模式进行图像处理的工作模型,设置捕获分辨率为720p (1280x720)。但是,它可以作为读者集成其他相机、设备方向模式和捕获分辨率的指南。

注意:本指南仅在适用于 Android 的 Android NDK 版本 25.0.8775105 上进行测试。它可能无法使用其他 NDK 版本成功构建 C/C++ 文件。

建议的结构

b0d00f6e485bdde9db2e44791cbe5409.png

相机图像流处理的建议结构

移动设备上任何流处理的主要挑战是处理帧的速度足够快,以每秒至少处理 60 帧(每帧约 16 毫秒)。传统的图像处理过程几乎总是需要比每帧 16 毫秒多得多的时间。因此,必须使用后台线程来不阻塞 UI 并导致应用程序卡顿。

我们需要利用 Dart Isolates 来实现这一点。包含 CameraPreview 小部件的视图旁边将有一个 CameraProcessor 小部件,这样每个帧都将被传递给处理器进行处理。处理器将依次生成Isolate,以运行 C/C++ OpenCV 代码,并异步等待它们完成。

最后,从处理器中的Isolate接收到的任何结果都将传递给 CameraPainter 以更新 UI 状态并显示结果。尽管具有流畅的 UI,但这种方法的缺点是响应延迟,其中 UI 和Painter将显示不匹配,其中绘制的结果来自先前捕获的帧,具体取决于设备和处理速度

相机视图/相机预览

camera 插件页面中提供的示例足以构建最小的相机视图。我们只需要在小部件内添加帧捕获和相机处理器,如下所示:

// Start frame capture in controller under initState()
...
try {
    await controller?.initialize();
    controller?.startImageStream(_processCameraImage);
    setState(() {});
} catch (e) {
...

// Set what to do with frames inside stateful widget
Future _processCameraImage(CameraImage camImage) async {
   if (!mounted) return;    
   setState(() {
      cameraImage = camImage;
   });
}

// Pass each frame into CameraProcessor under build()
CameraPreview(
    camController,
    child: CameraProcessor(
        image: camImg,
    ),
)

CameraPainter

此处的指南为Painter 展示了一些不错的模板:https://github.com/bharat-biradar/Google-Ml-Kit-plugin/tree/master/packages/google_ml_kit/example/lib/vision_detector_views)

我们需要将要绘制到画布上的对象传递给这个小部件,并使用绘制函数来显示结果。需要注意的最重要的事情是图像的旋转&

### 回答1: 1. 安装Java环境:在Linux系统上安装Java环境,确保WebLogic能够正常运行。 2. 下载WebLogic:从Oracle官网下载WebLogic安装包,选择适合Linux系统的版本。 3. 解压WebLogic安装包:使用命令行解压WebLogic安装包,将其解压到指定目录。 4. 创建WebLogic域:使用WebLogic Configuration Wizard创建WebLogic域,配置域的名称、端口、管理员用户名密码等信息。 5. 部署应用程序:将应用程序部署到WebLogic域中,可以使用WebLogic Console或者命令行工具进行部署。 6. 启动WebLogic:使用命令行启动WebLogic服务器,或者使用WebLogic Console进行启动。 7. 验证部署:在浏览器中访问应用程序的URL,验证部署是否成功。 以上是部署WebLogic的基本步骤,具体操作可以参考WebLogic官方文档或者相关教程。 ### 回答2: Linux作为一种稳定,高效的操作系统,被广泛应用于企业级应用的服务器端部署。weblogic是一个面向企业的Java应用服务器,为企业应用提供了可靠的运行环境。本文将介绍如何在Linux系统上部署weblogic。 第一步:准备安装包 在部署weblogic之前,我们需要下载weblogic的安装包。 weblogic安装包可以从Oracle官网下载,下载地址为https://www.oracle.com/middleware/technologies/weblogic-server-downloads.html 下载完成后,将安装包解压至本地文件夹。 第二步:安装Java SDK weblogic是一个Java应用服务器,因此我们需要安装Java SDK。我们可以从Oracle官网下载Java SDK安装包:https://www.oracle.com/java/technologies/downloads/ 下载并安装完成后,我们需要配置Java环境变量。在命令行下执行以下命令: export JAVA_HOME=/usr/java/jdk版本 export PATH=$JAVA_HOME/bin:$PATH 第三步:运行安装程序 在Linux系统下打开终端,切换到weblogic安装包目录,执行以下命令启动weblogic安装程序: ./wlst.sh 接着,安装过程将分为以下几个步骤: 1. 选择weblogic安装模式:图形界面或命令行安装模式。 2. 选择要安装的weblogic组件。根据需要选择所需的组件。 3. 输入Java JDK路径。 4. 选择要使用的weblogic域模板。可以选择不使用域模板或选择其中一个现有的域模板。 5. 指定要创建的weblogic域的名称位置。 6. 指定weblogic管理服务器的监听地址端口。 7. 指定weblogic管理员用户名密码。 8. 安装所选组件并创建weblogic域。 9. 安装完成后,启动weblogic域。 第四步:检查weblogic安装 在Linux系统下打开终端,执行以下命令启动weblogic控制台: ./startWebLogic.sh 在浏览器中输入http://localhost:port/console即可打开weblogic控制台,端口号可以在安装过程中指定。 至此,我们已经完成了在Linux系统上部署weblogic的过程。在实际部署过程中,还需要进行相关的配置维护工作,例如配置服务器资源,启动、停止weblogic域等操作。可以参考weblogic官方文档来进行相关操作。 ### 回答3: WebLogic是一种流行的企业级应用程序服务器,可以提供高效的分布式应用程序部署管理。在Linux平台下部署WebLogic,可以帮助开发人员、管理员以及企业管理者更好地管理控制他们的应用程序,并保证Web应用程序能够以高效、可靠、可扩展的方式运行。 下面是在Linux平台上部署WebLogic的几个步骤: 1. 确保满足WebLogic的基本要求。WebLogic需要至少Linux平台的Java运行时环境开发包。需要在Linux服务器上下载、安装配置JREJDK以便运行WebLogic。 2. 下载WebLogic。可以在Oracle官网上免费下载WebLogic安装软件。选择适当的文件,然后下载到服务器中。 3. 在Linux中安装WebLogic。使用下载的WebLogic安装文件在Linux服务器中安装WebLogic。运行安装程序,并参照安装向导完成必要步骤。 4. 配置WebLogic服务器。如果安装顺利,就可以开始对WebLogic的配置。 5. 创建WebLogic域。在WebLogic服务器中,域是指一组关联的WebLogic服务器实例。创建一个新的域,然后根据需要展开其他配置选项。 6. 部署Web应用程序。在域中,可以部署Web应用程序,包括Web服务、Servlet、JSP文件EJB。上传应用程序文件到WebLogic服务器,然后使用WebLogic管理控制台启动应用程序。 7. 测试Web应用程序。在WebLogic服务器配置完毕后,请测试已部署应用程序,确保它们能够在WebLogic服务器中正常运行。如果有问题,可以随时检查配置文件,修改相应设置。最终,运行WebLogic并使用应用程序向外提供服务。 总的来说,在Linux平台上部署WebLogic可以实现优秀的可靠性高性能,管理者可以使用WebLogic控制台进行集中管理监控。诸如这样的企业级软件在Linux上部署不仅有助于更好地管理控制企业服务器,而且帮助开发者管理员创建更好的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值