Flutter感知能力增强插件mojo_perception的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter感知能力增强插件mojo_perception的使用

标题

[DEPRECATED] Mojo Perception Flutter API

内容

警告:此仓库不再维护,因为它已迁移到内部项目。我们对此表示歉意。

描述

在几行代码中为您的Flutter应用程序提供面部表情识别功能。

Mojo Facial Expression Recognition 提供:

❤️ 3 种情绪:

  • 喜悦
  • 困惑
  • 惊讶

🎉 3 种社交线索:

  • 注意力
  • 参与度
  • 互动状态

💡 开源API ⚡️ 实时 🔐 私密设计

没有图像会发送到云端。

处理用户的表情反应以构建您的优秀应用

demo_image.jpg

要求

获取您的免费试用API密钥。

安装

将以下行添加到项目的pubspec.yaml文件中,并运行flutter pub get

dependencies:
  mojo_perception: ^2.0.0

初始设置

iOS

权限ios/Runner/Info.plist中添加一行,键为NSCameraUsageDescription,描述如下:

<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>

模型pubspec.yaml中添加以下行:

assets:
  - packages/mojo_perception/assets/face_landmark_with_attention.tflite
  - packages/mojo_perception/assets/face_detection_short_range.tflite

运行:

flutter pub get

动态库

  1. 下载TensorFlowLiteC.framework.zip(包含带有Mediapipe特殊操作的TensorFlowLiteC框架)。
  2. TensorFlowLiteC.framework解压到tflite_flutter包的pub-cache文件夹中:
    • 对于Linux/MMac:~/.pub-cache/hosted/pub.dartlang.org/tflite_flutter-0.9.0/ios/
    • 对于Windows:%LOCALAPPDATA%\Pub\Cache\hosted\pub.dartlang.org\tflite_flutter-0.9.0\ios\
Android

动态库

  1. 下载jniLibs.zip
  2. 解压到项目路径:android > app > src > main

模型pubspec.yaml中添加以下行:

assets:
  - packages/mojo_perception/assets/face_landmark_with_attention.tflite
  - packages/mojo_perception/assets/face_detection_short_range.tflite

运行:

flutter pub get

minSdkVersion 如果遇到关于minSdkVersion的问题,请按照以下步骤操作:

  1. 打开android > src > app > build.gradle
  2. 查找行minSdkVersion flutter.minSdkVersion
  3. flutter.minSdkVersion更改为21

使用

导入它:

import 'package:mojo_perception/mojo_perception.dart';

创建一个MojoPerceptionAPI对象:

MojoPerceptionAPI mojoPerceptionApi = MojoPerceptionAPI(
  '<auth_token>',
  '<host>',
  '<port>',
  '<user_namespace>';
);

请注意,用户令牌’auth_token’与API密钥不同。

🙏 我们特别注意了发布用户令牌的安全性。请参阅下方内容和最佳实践了解更多信息。

最佳实践:一个用户一个令牌

为了安全和方便,我们已经准备好了一个REST API来实时生成用户令牌。

当用于Web应用程序时,您应该实现后端函数以为每个用户获取一个令牌。我们建议使用具有过期日期的令牌。

为此,您可以使用Mojo Perception API的REST API。

以下是一个使用curl的示例: 在终端中,替换<YOUR_API_KEY_HERE>为您的API密钥之一并运行:

curl -X PUT -i -H 'Authorization: <YOUR_API_KEY_HERE>' -d '{"datetime": "2022-01-01T00:00:00.000000","expiration":360}' -H 'Content-Type: application/json' https://api.mojo.ai/mojo_perception_api/user

这将给出类似的结果,并注意我们将过期时间设置为360秒,即60 x 6 60秒的时间段。

HTTP/2 200 
server: nginx
date: Tue, 18 Jan 2 26 16:53:54 GMT
content-type: application/json
content-length: 350

{"user_namespace": "a5fa97ded6584cb4a7ff3933aa66025c", "auth_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NDI1MQ4M3QsInN1YiI6ImE1ZmE5N2RlLWQ2NTgtNGNiNC1hN2ZmLTM5MizliTY2MDI1YyIsImV4cCI6MTY0MjuuNDg0NH0.7FuLJ6Hmozi2DbX9zooVxYvnp_f91H4vzodstDZbLzI", "host_name": "socket.mojo.ai", "port": "443"}

您可以使用auth_token和给定的host_nameportuser_namespace来配置API端点中的API,使用setOptions()方法。

检查教程

查看教程部分

故障排除

如果您遇到“JsonWebTokenError”,可能是因为过期。 您可以尝试增加用户令牌的持续时间以匹配您的需求。默认值360秒可能太短。

Mojo Perception Flutter 文档

致谢

特别感谢JaeHeeeFlutterWithMediaPipe项目,该项目启发了我们实施mediapipe部分。

示例代码


更多关于Flutter感知能力增强插件mojo_perception的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter感知能力增强插件mojo_perception的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


关于Flutter感知能力增强插件mojo_perception的使用,以下是一个基本的代码示例,展示如何集成和使用该插件进行基本的感知功能。请注意,由于mojo_perception并非一个广泛认知的标准Flutter插件,以下示例将基于假设的功能和结构进行编写。如果mojo_perception插件的实际API有所不同,请根据具体文档进行调整。

首先,确保你已经在pubspec.yaml文件中添加了mojo_perception依赖:

dependencies:
  flutter:
    sdk: flutter
  mojo_perception: ^x.y.z  # 替换为实际的版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中,你可以按照以下方式使用mojo_perception插件:

import 'package:flutter/material.dart';
import 'package:mojo_perception/mojo_perception.dart';  // 假设这是插件的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Mojo Perception Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MojoPerceptionDemo(),
    );
  }
}

class MojoPerceptionDemo extends StatefulWidget {
  @override
  _MojoPerceptionDemoState createState() => _MojoPerceptionDemoState();
}

class _MojoPerceptionDemoState extends State<MojoPerceptionDemo> {
  String?感知结果;

  @override
  void initState() {
    super.initState();
    // 初始化mojo_perception插件并设置监听器
    MojoPerception.instance.initialize().then((_) {
      MojoPerception.instance.addListener(() {
        setState(() {
          感知结果 = MojoPerception.instance.getCurrentPerception();
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mojo Perception Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '感知结果:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Text(
              感知结果 ?? '等待感知结果...',
              style: TextStyle(fontSize: 24, color: Colors.blue),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 移除监听器并清理资源
    MojoPerception.instance.removeListener(() {});
    super.dispose();
  }
}

注意

  1. 上面的代码示例是基于假设的mojo_perception插件API编写的。实际使用时,请查阅该插件的官方文档以了解具体的初始化方法、监听器设置以及获取感知结果的方式。
  2. MojoPerception.instance.initialize()MojoPerception.instance.addListener()MojoPerception.instance.getCurrentPerception()等方法是假设存在的,实际插件可能使用不同的方法名或API结构。
  3. 确保在不再需要时移除监听器并清理资源,以避免内存泄漏。

由于mojo_perception并非一个广泛使用的标准插件,因此具体实现可能会有所不同。如果mojo_perception插件的API与上述示例不符,请参考插件的官方文档或示例代码进行集成。

回到顶部