Skip to main content

Live2D Python SDK

Project description

live2d-py

在 Python 中直接加载和操作 Live2D 模型,不通过 Web Engine 等间接手段进行渲染,提供更高的自由度和拓展性。

Python 的 Live2D 拓展库。基于 Python C++ API 对 Live2D Native (C++) 进行了封装。理论上,只要配置好 OpenGL 上下文,可在 Python 中将 live2d 绘制在任何基于 OpenGL 的窗口。

支持 Live2D 模型版本:

  • Cubism 2.X 导出的模型:文件名格式常为 XXX.mocXXX.model.jsonXXX.mtn
  • Cubism 3.0 及以上导出的模型:文件名格式常为 XXX.moc3XXX.model3.json, XXX.motion3.json

支持窗口库:

  • PyQt5
  • PySide2 / PySide6
  • GLFW
  • FreeGlut
  • ...

功能:

  • 加载模型
  • 鼠标拖拽视线
  • 鼠标点击触发动作
  • 动作播放回调函数
  • 口型同步
  • 模型各部分参数控制
live2d-py 支持的live2d模型 支持的Python版本 支持平台
live2d.v2 Cubism 2.0 及以上,不包括 3.0 仅 32 位,支持Python 3.0 及以上版本,但除 Python 3.10.11 外需要自行编译 Windows
live2d.v3 Cubism 3.0 及以上,包括 4.0 支持 32 / 64 位,支持Python 3.0 及以上版本,但除 Python 3.12 外需要自行编译 Windows、Linux

本仓库已发布的版本中:

  • v2 版本仅支持:Python 3.10.11 (win32)
  • v3 版本仅支持:Python 3.12+ (win64)

若需要 64 位或 linux 平台支持,则选择(两种方法均需要安装 Visual Studio 和 CMake):

  • 拉取本仓库源码使用 CMake 构建
  • 克隆本仓库,使用pip install . -v安装

对于适用 Cubism 2.0 模型,目前只支持 32 位,因为当前网络上能找到的现存 live2d opengl 静态库只有 32 位。

更新内容

文件说明

live2d-py
|-- CMakeLists.txt # CMake 配置文件,用于生成 live2d-py 
|-- Core # Cubism Live2D Core 头文件和库文件,详情见 Cubism 官方
|-- Framework # Cubism 开发框架
|-- LAppModelWrapper.cpp # live2d native 的 python 封装
|-- Main  # live2d native 类
|-- README.md
|-- Resources # 资源文件夹,live2d 模型,应用图标
|-- docs
|-- glew     # opengl 接口依赖
|-- include  # 项目包含目录
`-- package  # 生成的 live2d-py 包,可用 setup.py 打包和安装

简易面部动捕示例

源码见 main_facial_bind.py

期末周破防

简易动捕

基于 live2d-py + qfluentwidgets 实现的桌面应用预览

live2d-desktop

alt

使用说明

Cubism 2.0 模型使用接口见 package/live2d/v2/live2d.pyi

Cubism 3.0(含4.0) 模型使用接口见 package/live2d/v3/live2d.pyi

具体与图形库结合的用例示例见 package 文件夹。

文件:

  • live2d.solive2d.pyd:封装了 c++ 类的动态库,供 python 调用。在 import live2d.vX as live2d 时,解释器在文件目录中寻找 live2d.so/live2d.pyd 并载入内存。其中 live2d.pyd 在 windows 下使用,live2d.so 在 linux 下使用。
  • live2d.pyi:python 接口提示文件,仅用于在 IDE 编写时产生代码提示和补全信息。

导入库

package/live2d 文件夹放置在使用者 main.py 同目录下,在 main.py 中使用如 import live2d.v3

package\live2d
|-- utils
|   |
|   |-- lipsync.py  # 口型同步工具
|   `-- log.py      # 日志工具
`-- v3
    |-- __init__.py
    |-- live2d.pyd  # 动态库/封装c++函数
    |-- live2d.pyi  # 接口&文档
    `-- params.py   # live2d 标准参数id

绘制流程

1. 导入 live2d

导入适用于 3.0 版本的 live2d 库
import live2d.v3 as live2d
导入适用于 2.0 版本的 live2d 库
import live2d.v2 as live2d

2. 在加载和使用 live2d 模型前,应初始化 live2d 模块

live2d.init()

3. (3.0及以上版本)在对应的窗口库中设置 OpenGL 上下文后,初始化 Glew 和 OpenGL 绘制选项。不同的窗口库方法不一样,以 Pygame 为例:

display = (800,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

# live2d.v3 还需要调用如下函数
live2d.glewInit()
live2d.setGLProperties()

4. 在上述步骤全部完成后,方可创建 LAppModel 并加载本地模型。路径如下:

Resources\Haru
|-- Haru.2048
|-- Haru.cdi3.json
|-- Haru.moc3
|-- Haru.model3.json
|-- Haru.model3.json.bak
|-- Haru.physics3.json
|-- Haru.pose3.json
|-- Haru.userdata3.json
|-- expressions
|-- motions
`-- sounds
model = live2d.LAppModel()
model.LoadModelJson("./Resources/Haru/Haru.model3.json")

5. 窗口大小变化时调用 LAppModelResize 方法。初次加载时,即使没有改变大小也应设置一次大小,否则模型不显示。

model.Resize(800, 600)

6. 鼠标点击时调用 LAppModelTouch 方法。传入的参数为鼠标点击位置在窗口坐标系的坐标,即以绘图窗口左上角为原点,右和下为正方向的坐标系。

# 如果鼠标点击位置是可触发动作区域,且对应动作被触发,
# 则会在动作开始播放前调用该函数
def onStartCallback(group: str, no: int):
    print(f"touched and motion [{group}_{no}] is started")

# 动作播放结束后会调用该函数
def onFinishCallback():
    print("motion finished")

x, y = pygame.mouse.get_pos()
model.Touch(x, y, onStartCallback, onFinishCallback)

7. 每帧绘制图像时,先清空画布,使用 live2d.clearBuffer,再调用 LAppModelUpdate 函数,对模型动作参数进行控制,则应先后调用 CalcParametersSetParameterValue。在使用具体的窗口库时,需要调用缓冲刷新函数。

live2d.clearBuffer()

# 初始化呼吸、动作、姿势、表情、各部分透明度等必要的参数值(如果对应的功能开启
model.Update()

# 在初始化的基础上修改参数(具体用法参考 live2d.pyi 文件
# 直接赋值
model.SetParameterValue("ParamAngleX", 15, 1.)
# 在原值基础上添加
model.AddParameterValue("ParamAngleX", 15)

# 执行绘制
model.Draw()

8. 不再使用 live2d 模块,则应调用 live2d.dispose 释放内存。

live2d.dispose()

9. 开关选项。

# 以下选项,默认均为开启状态
# 日志开关
live2d.setLogEnable(False)
# 自动呼吸开关
model.SetAutoBreathEnable(False)
# 自动眨眼开关
model.SetAutoBlinkEnable(False)

10. 播放动作

# 动作开始播放前调用该函数
def onStartCallback(group: str, no: int):
    print(f"touched and motion [{group}_{no}] is started")

# 动作播放结束后会调用该函数
def onFinishCallback():
    print("motion finished")

# 播放名称为 Idle 的动作组中第一个动作
model.StartMotion("Idle", 0, onStartCallback, onFinishCallback)

11. 参数控制

# 设置上下唇开合,取值浮点数,0.0~1.0,权重为 1.0
# "ParamMouthOpenY" 为 live2d 模型内嵌的参数 id
# 所有可操作参数见官方文档:
# https://docs.live2d.com/en/cubism-editor-manual/standard-parameter-list/
# 权重:当前传入的值和原值的比例,最终值=原值*(1-weight)+传入值*weight
# 调用时机:在CalcParameters 后,在 Update 之前 
model.SetParameterValue("ParamMouthOpenY", 1.0, 1.0)
# 最终值 = 原值 + 传入值
model.AddParameterValue("ParamMouthOpenY", 1.0)

口型同步

读取 wav 文件响度的工具:live2d.lipsync.WavHandler

示例代码:main_lipsync.py

用法:

创建 wavHandler 对象并设置口型同步幅度 lipSyncN

from live2d.lipsync import WavHandler
wavHandler = WavHandler()
lipSyncN = 3

在播放动作的同时,播放音频并进行口型同步

def start_callback(group, no):
    # 播放音频
    pygame.mixer.music.load("audio1.wav")
    pygame.mixer.music.play()
    # 处理口型同步
    wavHandler.Start("audio1.wav")

model.StartMotion("Speak", 0, live2d.MotionPriority.FORCE.value, start_callback)

将 wav 响度同步到 ParamMouthOpenY

if wavHandler.Update():  # 获取 wav 的下一帧片段,并返回当前音频是否已结束
    model.AddParameterValue("ParamMouthOpenY", wavHandler.GetRms() * lipSyncN)

编译

对于 3.0 版本:

  1. 克隆本仓库到本地文件夹 live2d-py
git clone git@github.com:Arkueid/live2d-py.git live2d-py
  1. 安装 CMakeVisual Studio CodeVisual Studio 2022 Release -x86

  2. Visual Studio Code 打开本仓库

code live2d-py
  1. 修改 LAppModelWrapper.cpp 同目录下的 CMakeLists.txt

将下面 D:/pydk 修改为对应版本的 Python 安装目录。

# 寻找Python
set(CMAKE_PREFIX_PATH D:/pydk)

d:/pydk 的结构如下:

d:\pydk
|-- DLLs
|-- LICENSE.txt
|-- Lib
|-- NEWS.txt
|-- Scripts
|-- Tools
|-- include
|-- libs
|-- python.exe
|-- python.pdb
|-- python3.dll
|-- python310.dll
|-- python310.pdb
|-- python310_d.dll
|-- python310_d.pdb
|-- python3_d.dll
|-- python_d.exe
|-- python_d.pdb
|-- pythonw.exe
|-- pythonw.pdb
|-- pythonw_d.exe
|-- pythonw_d.pdb
`-- vcruntime140.dll
  1. Visual Studio Code 安装插件:C/C++CMakeCMake Tools

插件

  1. Visual Studio Code 中按下 Ctrl + Shift + P 打开选项面板,选择 CMake: Configure

配置CMake

  1. 执行构建,输出文件为 package/live2d/live2d.pyd

设置 output 输出日志的编码为 utf-8。

output-encoding

选择构建工具 Visual Studio Community 20XX Release - x86。如果目标平台为 x64,则选择 Visual Studio Community 20XX Release - amd64

选择构建工具

选择配置为 Release

CMake配置

当配置完毕,生成 build 文件夹后,输出如下:

配置完毕

构建目标选择 LAppModelWrapper,点击 build 编译生成。

build

  1. 使用,将 package 目录下的 live2d 文件夹作为 Python 模块集成即可。

对于 2.0 版本

详见 v2 分支。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

live2d_py-0.2.2.tar.gz (22.6 MB view details)

Uploaded Source

Built Distributions

live2d_py-0.2.2-cp312-cp312-win_amd64.whl (285.2 kB view details)

Uploaded CPython 3.12 Windows x86-64

live2d_py-0.2.2-cp312-cp312-win32.whl (285.2 kB view details)

Uploaded CPython 3.12 Windows x86

live2d_py-0.2.2-cp311-cp311-win_amd64.whl (216.0 kB view details)

Uploaded CPython 3.11 Windows x86-64

live2d_py-0.2.2-cp311-cp311-win32.whl (285.2 kB view details)

Uploaded CPython 3.11 Windows x86

live2d_py-0.2.2-cp310-cp310-win_amd64.whl (285.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

live2d_py-0.2.2-cp310-cp310-win32.whl (285.2 kB view details)

Uploaded CPython 3.10 Windows x86

File details

Details for the file live2d_py-0.2.2.tar.gz.

File metadata

  • Download URL: live2d_py-0.2.2.tar.gz
  • Upload date:
  • Size: 22.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for live2d_py-0.2.2.tar.gz
Algorithm Hash digest
SHA256 a7f20465ee8409fb70e602cfaf1e95c9209b6f4e5e1c6457baf50102b3b12f66
MD5 112a920594f29df144a1ec7112c7075e
BLAKE2b-256 cf343d4c1bcffe496e4641a49bb19a9a18280d60b4add58a6340712a9a23d632

See more details on using hashes here.

File details

Details for the file live2d_py-0.2.2-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for live2d_py-0.2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 65030fd55a5e67df9d6c7ef14d4a86332712ecfc984bcd8a92c0a498667c4958
MD5 b043d17b8ac21cb2d866248d71de6101
BLAKE2b-256 5c47ebb78bc6749bf1cdb0590ff117d085ba18a5f57fc29b53742be0cfda84e3

See more details on using hashes here.

File details

Details for the file live2d_py-0.2.2-cp312-cp312-win32.whl.

File metadata

  • Download URL: live2d_py-0.2.2-cp312-cp312-win32.whl
  • Upload date:
  • Size: 285.2 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.0

File hashes

Hashes for live2d_py-0.2.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 1d308fa2c24c6eec708b058b9b17a7488ea4d07af727ef4df1820fc43accfdf4
MD5 5104e28fe63510ce65fede16692de973
BLAKE2b-256 ad6d9309d62ade4d8ed2b92f856c631c8670c0278c5d74696eaeedb06a6bca5b

See more details on using hashes here.

File details

Details for the file live2d_py-0.2.2-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for live2d_py-0.2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3569ad3f88bf9094ca6d8f489f6fb74cf5f56d59ac4581897db662ce533e8562
MD5 79b20c0018edf7888ec7677a9cfa6964
BLAKE2b-256 182f44ed26c6eb6b8587d1bdf6c6338470c667fe5728c16fd1afc844db18b36e

See more details on using hashes here.

File details

Details for the file live2d_py-0.2.2-cp311-cp311-win32.whl.

File metadata

  • Download URL: live2d_py-0.2.2-cp311-cp311-win32.whl
  • Upload date:
  • Size: 285.2 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.0

File hashes

Hashes for live2d_py-0.2.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 a4cc30294d598c01339e5d7186ccee779e74e3af4b48d96a7f98393dcbc2c8fc
MD5 75fa9b33e8b090f311212a9f2a016754
BLAKE2b-256 fc38b9025ec29f38d22f092351ae350756bc47ddae3c9cb219e976c5060c9c48

See more details on using hashes here.

File details

Details for the file live2d_py-0.2.2-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for live2d_py-0.2.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 20943de6328356f27b2b06dcc3e2c44c2d3b99e29a7bbb61c81f589016d4d82b
MD5 c3022e1c15c2d9f8a8b8835ed171a735
BLAKE2b-256 b9bd8c739a694ed51f180209c5bb1636deccc0147efde2e33e30751525af6b37

See more details on using hashes here.

File details

Details for the file live2d_py-0.2.2-cp310-cp310-win32.whl.

File metadata

  • Download URL: live2d_py-0.2.2-cp310-cp310-win32.whl
  • Upload date:
  • Size: 285.2 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.11

File hashes

Hashes for live2d_py-0.2.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 3210f33418864da0b503272143753183cbb6c7667b08cf5f6322197beba85379
MD5 86fc38fb6a9abe7bdac14b5c6f90f95b
BLAKE2b-256 56ab4154c7a2c6141ae2f248ce1640d0a42acc4d211c4cd4fe5acff7d80c57cd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page