在这篇博客文章中,我们将展示如何使用 gradio_client
Python 库,该库允许开发者以编程方式向 Gradio 应用发出请求,通过创建一个示例 FastAPI 网络应用程序。我们将要构建的网络应用程序称为"Acapellify",它将允许用户上传视频文件作为输入,并返回一个没有伴奏音乐的视频版本。它还将展示一个生成视频的画廊。
先决条件
在我们开始之前,请确保您运行的是 Python 3.9 或更高版本,并且已经安装了以下库:
gradio_client
fastapi
uvicorn
您可以从 pip
安装这些库:
$ pip install gradio_client fastapi uvicorn
您还需要安装 ffmpeg。您可以通过在终端运行来检查是否已经安装了 ffmpeg:
$ ffmpeg version
否则,请按照这些说明安装 ffmpeg。
第一步:编写视频处理函数
让我们从看似最复杂的部分开始 —— 使用机器学习从视频中移除音乐。
幸运的是,有一个现成的空间可以让这个过程更简单:https://huggingface.co/spaces/abidlabs/music-separation。这个空间接受一个音频文件,并生成两个独立的音频文件:一个包含原始剪辑中的乐器音乐,另一个包含所有其他声音。非常适合我们的客户使用!
打开一个新的 Python 文件,比如说 main.py
,然后从 gradio_client
中导入 Client
类,并将其连接到这个空间:
from gradio_client import Client
# 创建一个Client实例,指定了要使用的API服务为"abidlabs/music-separation"
client = Client("abidlabs/music-separation")
def acapellify(audio_path):
"""
使用指定的音乐分离服务,从提供的音频路径中分离出人声部分。
:param audio_path: 音频文件的路径。
:return: 分离出的人声音频的路径或结果。
"""
# 使用client的predict方法提交预测任务,指定api_name为"/predict"
# 这里预设"/predict"为该服务分离人声的API端点
result = client.predict(audio_path, api_name="/predict")
# 假设服务返回的结果是一个列表,其中第一个元素是我们需要的人声音频的路径或结果
return result[0]
这就是所需的全部代码 -- 请注意 API 端点返回两个音频文件(一个没有音乐,一个只有音乐)在一个列表中,所以我们只返回列表的第一个元素。
注意:由于这是一个公共空间,可能还有其他用户在使用这个空间,这可能会导致体验缓慢。您可以用您自己的 Hugging Face 令牌复制这个空间,并创建一个只有您能访问的私人空间,以绕过队列。要做到这一点,只需将上面的前两行替换为: