Flutter感知能力增强插件mojo_perception的使用
Flutter感知能力增强插件mojo_perception的使用
标题
[DEPRECATED] Mojo Perception Flutter API
内容
警告:此仓库不再维护,因为它已迁移到内部项目。我们对此表示歉意。
描述
在几行代码中为您的Flutter应用程序提供面部表情识别功能。
Mojo Facial Expression Recognition 提供:
❤️ 3 种情绪:
- 喜悦
- 困惑
- 惊讶
🎉 3 种社交线索:
- 注意力
- 参与度
- 互动状态
💡 开源API ⚡️ 实时 🔐 私密设计
没有图像会发送到云端。
处理用户的表情反应以构建您的优秀应用
要求
获取您的免费试用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
动态库
- 下载
TensorFlowLiteC.framework.zip
(包含带有Mediapipe特殊操作的TensorFlowLiteC框架)。 - 将
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\
- 对于Linux/MMac:
Android
动态库
- 下载
jniLibs.zip
。 - 解压到项目路径:
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
的问题,请按照以下步骤操作:
- 打开
android > src > app > build.gradle
- 查找行
minSdkVersion flutter.minSdkVersion
- 将
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_name
、port
和user_namespace
来配置API端点中的API,使用setOptions()
方法。
检查教程
查看教程部分
故障排除
如果您遇到“JsonWebTokenError”,可能是因为过期。 您可以尝试增加用户令牌的持续时间以匹配您的需求。默认值360秒可能太短。
Mojo Perception Flutter 文档
致谢
特别感谢JaeHeee的FlutterWithMediaPipe项目,该项目启发了我们实施mediapipe部分。
示例代码
更多关于Flutter感知能力增强插件mojo_perception的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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();
}
}
注意:
- 上面的代码示例是基于假设的
mojo_perception
插件API编写的。实际使用时,请查阅该插件的官方文档以了解具体的初始化方法、监听器设置以及获取感知结果的方式。 MojoPerception.instance.initialize()
、MojoPerception.instance.addListener()
和MojoPerception.instance.getCurrentPerception()
等方法是假设存在的,实际插件可能使用不同的方法名或API结构。- 确保在不再需要时移除监听器并清理资源,以避免内存泄漏。
由于mojo_perception
并非一个广泛使用的标准插件,因此具体实现可能会有所不同。如果mojo_perception
插件的API与上述示例不符,请参考插件的官方文档或示例代码进行集成。