Flutter生成人类头像插件human_avatar的使用

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

Flutter生成人类头像插件human_avatar的使用

介绍

human_avatar 是一个用于创建人类头像和视频的 Flutter 插件。

示例视频

安装

要使用此插件,在 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  human_avatar: any

开始使用

在开始使用 human_avatar 之前,你需要在 Elai 平台上注册并生成你的密钥。请参阅文档以获取更多信息。

创建头像

使用以下代码创建头像:

await _humanAvatarPlugin.createAvatar(
  secretKey: secretKey,
  gender: "male",
  photoName: photo.name,
  photoData: _base64String,
);

创建视频

使用以下代码创建视频:

await _humanAvatarPlugin.createVideoAvatar(
  secretKey: secretKey,
  imageUrl: data?.frontendConfig?.canvas ?? '',
  speechText: "this is my first text video",
  gender: "male",
  avatarName: "",
  avatarId: data?.avatarDataId ?? '',
  onRender: (value) {
    print(value.url);
    createVideoAvatarData = value;
  }
);

示例代码

以下是完整的示例代码:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:human_avatar/human_avatar.dart';
import 'package:human_avatar/models/AvatarData.dart';
import 'package:human_avatar/models/CreateVideoAvatarData.dart';
import 'package:human_avatar_example/video_player_view.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(const MaterialApp(home: MyApp()));
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final secretKey = 'Z0BHr9hDpHw0yl9pQsiMHTN6cXdfgdfga'; // 你的密钥

  /// 初始化 HumanAvatar 插件
  final _humanAvatarPlugin = HumanAvatar();

  /// 用于处理创建头像的响应
  AvatarData? data;

  /// 用于处理创建头像视频的响应
  CreateVideoAvatarData? createVideoAvatarData;

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(
            createVideoAvatarData?.url ?? "No url found",
            style: const TextStyle(color: Colors.black),
          ),
          if (createVideoAvatarData?.url == null) ...{
            GestureDetector(
              onTap: () async {
                /// 导航到视频播放器,并传入创建的视频 URL
                Navigator.push(
                    context,
                    MaterialPageRoute(
                        builder: (context) =>
                            VideoPlayerView(createVideoAvatarData?.url ?? '')));
              },
              child: Container(
                  margin:
                      const EdgeInsets.symmetric(horizontal: 30, vertical: 10),
                  height: 50,
                  width: double.infinity,
                  color: Colors.black,
                  child: const Center(
                      child: Text(
                    '查看视频',
                    style: TextStyle(color: Colors.white),
                  ))),
            ),
          },
          GestureDetector(
            onTap: () async {
              /// 打开设备相机
              final XFile? photo =
                  await ImagePicker().pickImage(source: ImageSource.camera);
              if (photo != null) {
                Uint8List bytes = await photo.readAsBytes();
                String base64String = base64.encode(bytes);

                /// 调用创建图像头像
                data = await _humanAvatarPlugin.createAvatar(
                    secretKey: secretKey,
                    gender: "male",
                    photoName: photo.name,
                    photoData: base64String // 图像数据以 base64 编码
                    );
                if (data != null) {
                  setState(() {});
                }
              }
            },
            child: Container(
                margin:
                    const EdgeInsets.symmetric(horizontal: 30, vertical: 20),
                height: 50,
                width: double.infinity,
                color: Colors.black,
                child: const Center(
                    child: Text(
                  '创建头像',
                  style: TextStyle(color: Colors.white),
                ))),
          ),
          if (data?.frontendConfig?.thumbnail != null) ...{
            GestureDetector(
              onTap: () async {
                /// 调用创建视频,使用你的头像 URL
                await _humanAvatarPlugin.createVideoAvatar(
                    secretKey: secretKey,
                    imageUrl: data?.frontendConfig?.canvas ?? '',
                    speechText: "this is my first text video",
                    gender: data?.frontendConfig?.gender ?? '',
                    avatarName: "",
                    avatarId: data?.avatarDataId ?? '',
                    onRender: (value) {
                      createVideoAvatarData = value;
                      setState(() {});
                    });
              },
              child: Container(
                  margin:
                      const EdgeInsets.symmetric(horizontal: 30, vertical: 10),
                  height: 50,
                  width: double.infinity,
                  color: Colors.black,
                  child: const Center(
                      child: Text(
                    '创建头像视频',
                    style: TextStyle(color: Colors.white),
                  ))),
            ),
          }
        ],
      ),
    );
  }
}

更多关于Flutter生成人类头像插件human_avatar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter生成人类头像插件human_avatar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用human_avatar插件来生成人类头像的详细代码示例。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加human_avatar依赖:

dependencies:
  flutter:
    sdk: flutter
  human_avatar: ^x.y.z  # 请替换为最新版本号

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

2. 导入插件

在你需要生成头像的Dart文件中导入human_avatar插件:

import 'package:human_avatar/human_avatar.dart';

3. 使用HumanAvatar生成头像

下面是一个简单的示例,展示了如何使用HumanAvatar小部件来生成一个随机的人类头像:

import 'package:flutter/material.dart';
import 'package:human_avatar/human_avatar.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Human Avatar Example'),
        ),
        body: Center(
          child: HumanAvatar(
            size: 150,  // 头像大小,可以根据需要调整
            backgroundColor: Colors.grey[200],  // 背景颜色,可选
            options: HumanAvatarOptions(
              // 配置选项,可以根据需要调整
              seed: DateTime.now().millisecondsSinceEpoch,  // 使用当前时间作为随机种子
              skinColor: Colors.brown.shade200,  // 皮肤颜色,可选
              hairColor: Colors.black,  // 头发颜色,可选
              facialFeatures: FacialFeatures(
                eyebrows: Eyebrows.thick,  // 眉毛类型,可选
                eyes: Eyes.open,  // 眼睛类型,可选
                mouth: Mouth.smile,  // 嘴巴类型,可选
              ),
              accessories: [
                // 可选配件,如眼镜、帽子等
                Accessory.glasses(color: Colors.black),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

4. 运行应用

保存所有文件并运行你的Flutter应用。你应该会在应用的主屏幕上看到一个随机生成的人类头像。

注意事项

  • HumanAvatarOptionsFacialFeatures提供了许多自定义选项,你可以根据需求进行调整。
  • 插件的版本号可能会更新,所以请确保使用最新的版本号。
  • 你可以通过seed参数来控制生成头像的随机性,这样每次使用相同的seed值时都会生成相同的头像。

通过上述步骤,你就可以在Flutter项目中成功使用human_avatar插件来生成人类头像了。

回到顶部