Jupyter 笔记本是数据科学领域中一个重要的工具,它被广泛用于探索性数据分析和机器学习模型的原型设计。对于初学者来说,Jupyter 笔记本能够帮助他们轻松地掌握数据科学的概念。有时,可能希望看到代码在实际运行中产生想要的结果。为此,可能需要使用 Flask 等框架。但是,如果能够通过在 Jupyter 笔记本的第一个单元格中添加几行 YAML 配置来将 Jupyter 笔记本直接转换为应用程序,那会怎样呢?
Mercury 是由 MLJAR Inc 提供的一个框架,它可以帮助将 Jupyter 笔记本转换为网络应用。Mercury 使得能够以网络应用的形式轻松地分享 Jupyter 笔记本。可以通过简单地转换 Jupyter 笔记本来构建网络应用。Mercury 是一个开源库,它允许通过在笔记本的第一个单元格中添加 YAML 参数来将 Jupyter 笔记本转换为网络应用。MLJAR Inc. 是其背后的公司。对于一个小额费用,还有额外特性和帮助的专业版。这个库的文档可以在找到。
现在已经了解了 Mercury 是什么,让开始构建应用程序,并将其部署在 Hugging Face 空间上。Toonify 应用基本上接受一张图片作为输入,并输出同一张图片的卡通化版本。它使用 AnimeGAN 来创建上传图片的卡通版本。AnimeGAN 技术通过生成对抗网络(GAN)的机器学习来生成输入图片的卡通版本。这有助于艺术家减少与现实背景相关的创作任务的时间。将在应用程序中使用这项技术。有关 AnimeGAN 和 PyTorch 实现的更多详细信息可以在中找到。
作为第一步,将安装构建此应用程序所需的所有库。
pip install mljar-mercury
pip install torch
pip install Pillow
现在已经安装了构建应用程序所需的必要库,让开始编码。首先,打开 Jupyter 笔记本并按如下所示导入库:
import os
import torch
from PIL import Image
import warnings
warnings.filterwarnings("ignore")
在这个应用中,变量参数是输入图片,因为希望拥有不同图片的卡通化版本。因此,在下一个单元格中,定义输入图片路径如下:
image_path = 'abc.jpg'
现在在下一个单元格中,从 torch hub 加载模型,如下所示:
model = torch.hub.load("bryandlee/animegan2-pytorch:main", "generator", pretrained="paprika")
face2paint = torch.hub.load("bryandlee/animegan2-pytorch:main", "face2paint", size=512)
在下一个单元格中,定义一个函数,使用上述模型返回卡通化图片,如下所示:
def toonify(img):
out = face2paint(model, img)
return out
在下一个单元格中,让打开图片,以便可以卡通化图片,如下所示:
im = Image.open(image_path)
到目前为止,已经导入了所有必要的库,定义了应用程序的输入参数,从 torch hub 加载了模型,定义了一个用户函数来使用从 torch hub 加载的模型卡通化图片,最后将图片加载到一个变量中。现在调用函数来卡通化图片,如下所示:
toonify(im)
已经创建了一个 toonify 函数,并创建了一张图片的卡通图片。现在将使用 Mercury 将 Jupyter 笔记本转换为应用程序。为此,需要在笔记本的第一个单元格中添加 YAML 配置。在笔记本的顶部创建一个单元格,使其成为笔记本的第一个单元格。将单元格类型更改为‘Raw NBConvert’。
可以在中找到 YAML 配置中允许的参数。将使用‘title’,‘description’,‘show-code’和‘params’参数。YAML 配置应该始终以三个连字符开始并以三个连字符结束。需要按如下所示添加 YAML 配置:
---
title: Toonify your Pics
description: Creates a cartoon version of your pic
show-code: False
params:
image_path:
input: file
label: Please upload a photo
---
在上面的配置中,可以看到为应用提供了一个标题和描述。不想看到代码,因此通过将‘show-code’参数设置为 False 来隐藏代码。在‘params’参数中,提供了输入参数‘image_path’并定义输入类型为‘file’。还为‘image_path’参数提供了一个标签。现在运行应用程序并看看它是如何工作的。打开终端并输入以下命令:
mercury run your_notebook_address.ipynb
这将在本地服务器上的这个地址‘127.0.0.1:8000’创建应用程序。打开这个地址。将看到类似下面的东西…点击‘Open’按钮,可以通过上传所需的图片来运行应用程序。现在已经构建了应用程序,让将其部署在 Hugging Face 空间上。
前往并创建一个账户,如果还没有的话。在下一步中,点击‘spaces’选项并点击页面上出现的‘create new Space’按钮。在出现的页面上给空间命名,选择适当的许可证,并在‘select the space SDK’部分选择‘Gradio’选项,然后点击‘create space’按钮。
在新出现的页面上点击‘Files and versions’并上传创建的 Jupyter 笔记本,点击右上角的‘Add file’按钮。接下来,创建一个‘requirements.txt’文件,并提供以下包作为要求…
jinja2==3.0.3
python-dotenv
mljar-mercury
Pillow<7
torch
torchvision
提交更改并创建一个新文件‘app.py’并输入以下代码:
import os
from dotenv import load_dotenv
from subprocess import Popen
load_dotenv()
my_env = os.environ.copy()
my_env["HF_SPACE"] = "embed/your_username/your_space_name"
command = ["mercury", "run", f"0.0.0.0:{os.environ.get('PORT', 7860)}"]
print(command)
worker = Popen(command, env=my_env)
worker.wait()
在上面的代码中,将‘your_username’替换为 Hugging Face 用户名,将‘your_space_name’替换为创建的空间名称。提交更改到这个文件。Hugging Face 空间将自动部署应用程序。最后,应用程序被部署,将看到如下所示…
在中找到在 Hugging Face 空间上制作并部署的应用程序。可以尝试上传自己的图片来使用上述应用程序。使用 Mercury 框架,成功地将 Jupyter 笔记本转换为网络应用程序,并且还将其部署在 Hugging Face 空间上。
可以看到上述插图中的应用程序演示。如果需要,还可以创建一个下载输出图片的选项。