Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
文字表情包
AIGC
中文
AIGC中文
yufeng
发布于 2023-07-20
4
AI4SCUP-CNS-BBB(v1)

Hugging Face AI 生成文字表情包

©️ Copyright 2023 @ Authors
作者: 余峰 📨
日期:2023-07-10
共享协议:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
快速开始:点击上方的 开始连接 按钮,选择 qrcode-diffusion: 2023-7-17镜像GPU:c12_m46_1 * NVIDIA GPU B或更高配置机型即可开始。

代码
文本

Open In Bohrium

代码
文本

Stable Diffusion 是发布于 2022 年的开源深度学习文字转图片扩散模型。ControlNet 是一种控制扩散模型的网络结构。将 Stable Diffusion 和 ControlNet相结合,即可以在 Stable Diffusion 所用的提示词之外,额外地给模型添加限制条件,以控制生成结果的特征。

利用这种方法,今年6月,nhciao 在 reddit 上发表了生成艺术化二维码的文章。后经社区的探索和迭代,衍生出二维码专用的 ControlNet 模型,以及基于这个模型生成艺术化二维码的方法。如果参数调整得当的话,生成的结果可以达到“看上去不像是二维码”,却能够成功被正确识别的效果。

代码
文本

接下来,本文将一步步引导您快速掌握运用 Hugging Face 生成一张艺术化的二维码的方法。

代码
文本

第一步:加载 ControlNet 模型

代码
文本
[1]
# 安装所需的依赖
# !conda install "python=3.10" -y
!pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
!pip install "diffusers==0.18.2" qrcode accelerate safetensors transformers --upgrade
!pip install "ipywidgets<8" --upgrade
!pip install Pillow
!pip install matplotlib
Writing to /root/.config/pip/pip.conf
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: diffusers==0.18.2 in /opt/conda/lib/python3.10/site-packages (0.18.2)
Requirement already satisfied: qrcode in /opt/conda/lib/python3.10/site-packages (7.4.2)
Requirement already satisfied: accelerate in /opt/conda/lib/python3.10/site-packages (0.21.0)
Requirement already satisfied: safetensors in /opt/conda/lib/python3.10/site-packages (0.3.1)
Requirement already satisfied: transformers in /opt/conda/lib/python3.10/site-packages (4.31.0)
Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (3.9.0)
Requirement already satisfied: importlib-metadata in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (6.6.0)
Requirement already satisfied: Pillow in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (9.4.0)
Requirement already satisfied: huggingface-hub>=0.13.2 in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (0.15.1)
Requirement already satisfied: requests in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (2.29.0)
Requirement already satisfied: regex!=2019.12.17 in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (2023.5.5)
Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (1.24.3)
Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.10/site-packages (from qrcode) (4.5.0)
Requirement already satisfied: pypng in /opt/conda/lib/python3.10/site-packages (from qrcode) (0.20220715.0)
Requirement already satisfied: pyyaml in /opt/conda/lib/python3.10/site-packages (from accelerate) (6.0)
Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from accelerate) (23.0)
Requirement already satisfied: psutil in /opt/conda/lib/python3.10/site-packages (from accelerate) (5.9.0)
Requirement already satisfied: torch>=1.10.0 in /opt/conda/lib/python3.10/site-packages (from accelerate) (2.0.1)
Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /opt/conda/lib/python3.10/site-packages (from transformers) (0.13.3)
Requirement already satisfied: tqdm>=4.27 in /opt/conda/lib/python3.10/site-packages (from transformers) (4.65.0)
Requirement already satisfied: fsspec in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.13.2->diffusers==0.18.2) (2023.5.0)
Requirement already satisfied: sympy in /opt/conda/lib/python3.10/site-packages (from torch>=1.10.0->accelerate) (1.12)
Requirement already satisfied: networkx in /opt/conda/lib/python3.10/site-packages (from torch>=1.10.0->accelerate) (3.1)
Requirement already satisfied: jinja2 in /opt/conda/lib/python3.10/site-packages (from torch>=1.10.0->accelerate) (3.1.2)
Requirement already satisfied: zipp>=0.5 in /opt/conda/lib/python3.10/site-packages (from importlib-metadata->diffusers==0.18.2) (3.15.0)
Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests->diffusers==0.18.2) (3.4)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests->diffusers==0.18.2) (1.26.15)
Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests->diffusers==0.18.2) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests->diffusers==0.18.2) (2023.5.7)
Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.10/site-packages (from jinja2->torch>=1.10.0->accelerate) (2.1.1)
Requirement already satisfied: mpmath>=0.19 in /opt/conda/lib/python3.10/site-packages (from sympy->torch>=1.10.0->accelerate) (1.3.0)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: ipywidgets<8 in /opt/conda/lib/python3.10/site-packages (7.7.5)
Requirement already satisfied: widgetsnbextension~=3.6.4 in /opt/conda/lib/python3.10/site-packages (from ipywidgets<8) (3.6.4)
Requirement already satisfied: traitlets>=4.3.1 in /opt/conda/lib/python3.10/site-packages (from ipywidgets<8) (5.7.1)
Requirement already satisfied: jupyterlab-widgets<3,>=1.0.0 in /opt/conda/lib/python3.10/site-packages (from ipywidgets<8) (1.1.4)
Requirement already satisfied: ipython>=4.0.0 in /opt/conda/lib/python3.10/site-packages (from ipywidgets<8) (8.12.0)
Requirement already satisfied: ipykernel>=4.5.1 in /opt/conda/lib/python3.10/site-packages (from ipywidgets<8) (6.19.2)
Requirement already satisfied: ipython-genutils~=0.2.0 in /opt/conda/lib/python3.10/site-packages (from ipywidgets<8) (0.2.0)
Requirement already satisfied: pyzmq>=17 in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (25.1.0)
Requirement already satisfied: nest-asyncio in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (1.5.6)
Requirement already satisfied: jupyter-client>=6.1.12 in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (8.1.0)
Requirement already satisfied: packaging in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (23.0)
Requirement already satisfied: matplotlib-inline>=0.1 in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (0.1.6)
Requirement already satisfied: debugpy>=1.0 in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (1.5.1)
Requirement already satisfied: psutil in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (5.9.0)
Requirement already satisfied: tornado>=6.1 in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (6.2)
Requirement already satisfied: comm>=0.1.1 in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (0.1.2)
Requirement already satisfied: pickleshare in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (0.7.5)
Requirement already satisfied: decorator in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (5.1.1)
Requirement already satisfied: backcall in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (0.2.0)
Requirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (3.0.36)
Requirement already satisfied: stack-data in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (0.2.0)
Requirement already satisfied: jedi>=0.16 in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (0.18.1)
Requirement already satisfied: pexpect>4.3 in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (4.8.0)
Requirement already satisfied: pygments>=2.4.0 in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (2.15.1)
Requirement already satisfied: notebook>=4.4.1 in /opt/conda/lib/python3.10/site-packages (from widgetsnbextension~=3.6.4->ipywidgets<8) (6.5.4)
Requirement already satisfied: parso<0.9.0,>=0.8.0 in /opt/conda/lib/python3.10/site-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets<8) (0.8.3)
Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /opt/conda/lib/python3.10/site-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<8) (5.3.0)
Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<8) (2.8.2)
Requirement already satisfied: nbconvert>=5 in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (6.5.4)
Requirement already satisfied: prometheus-client in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.14.1)
Requirement already satisfied: nbformat in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (5.7.0)
Requirement already satisfied: terminado>=0.8.3 in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.17.1)
Requirement already satisfied: nbclassic>=0.4.7 in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.5.5)
Requirement already satisfied: Send2Trash>=1.8.0 in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.8.0)
Requirement already satisfied: argon2-cffi in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (20.1.0)
Requirement already satisfied: jinja2 in /opt/conda/lib/python3.10/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (3.1.2)
Requirement already satisfied: ptyprocess>=0.5 in /opt/conda/lib/python3.10/site-packages (from pexpect>4.3->ipython>=4.0.0->ipywidgets<8) (0.7.0)
Requirement already satisfied: wcwidth in /opt/conda/lib/python3.10/site-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=4.0.0->ipywidgets<8) (0.2.5)
Requirement already satisfied: pure-eval in /opt/conda/lib/python3.10/site-packages (from stack-data->ipython>=4.0.0->ipywidgets<8) (0.2.2)
Requirement already satisfied: asttokens in /opt/conda/lib/python3.10/site-packages (from stack-data->ipython>=4.0.0->ipywidgets<8) (2.0.5)
Requirement already satisfied: executing in /opt/conda/lib/python3.10/site-packages (from stack-data->ipython>=4.0.0->ipywidgets<8) (0.8.3)
Requirement already satisfied: platformdirs>=2.5 in /opt/conda/lib/python3.10/site-packages (from jupyter-core!=5.0.*,>=4.12->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<8) (2.5.2)
Requirement already satisfied: notebook-shim>=0.1.0 in /opt/conda/lib/python3.10/site-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.2.2)
Requirement already satisfied: jupyter-server>=1.8 in /opt/conda/lib/python3.10/site-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (2.5.0)
Requirement already satisfied: beautifulsoup4 in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (4.12.2)
Requirement already satisfied: tinycss2 in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.2.1)
Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (2.1.1)
Requirement already satisfied: bleach in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (4.1.0)
Requirement already satisfied: defusedxml in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.7.1)
Requirement already satisfied: entrypoints>=0.2.2 in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.4)
Requirement already satisfied: jupyterlab-pygments in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.1.2)
Requirement already satisfied: mistune<2,>=0.8.1 in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.8.4)
Requirement already satisfied: lxml in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (4.9.2)
Requirement already satisfied: pandocfilters>=1.4.1 in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.5.0)
Requirement already satisfied: nbclient>=0.5.0 in /opt/conda/lib/python3.10/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.5.13)
Requirement already satisfied: jsonschema>=2.6 in /opt/conda/lib/python3.10/site-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (4.17.3)
Requirement already satisfied: fastjsonschema in /opt/conda/lib/python3.10/site-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (2.16.2)
Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.8.2->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<8) (1.16.0)
Requirement already satisfied: cffi>=1.0.0 in /opt/conda/lib/python3.10/site-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.15.1)
Requirement already satisfied: pycparser in /opt/conda/lib/python3.10/site-packages (from cffi>=1.0.0->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (2.21)
Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /opt/conda/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.18.0)
Requirement already satisfied: attrs>=17.4.0 in /opt/conda/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (23.1.0)
Requirement already satisfied: jupyter-server-terminals in /opt/conda/lib/python3.10/site-packages (from jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.4.4)
Requirement already satisfied: anyio>=3.1.0 in /opt/conda/lib/python3.10/site-packages (from jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (3.5.0)
Requirement already satisfied: websocket-client in /opt/conda/lib/python3.10/site-packages (from jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.58.0)
Requirement already satisfied: jupyter-events>=0.4.0 in /opt/conda/lib/python3.10/site-packages (from jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.6.3)
Requirement already satisfied: soupsieve>1.2 in /opt/conda/lib/python3.10/site-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (2.4)
Requirement already satisfied: webencodings in /opt/conda/lib/python3.10/site-packages (from bleach->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.5.1)
Requirement already satisfied: idna>=2.8 in /opt/conda/lib/python3.10/site-packages (from anyio>=3.1.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (3.4)
Requirement already satisfied: sniffio>=1.1 in /opt/conda/lib/python3.10/site-packages (from anyio>=3.1.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.2.0)
Requirement already satisfied: rfc3986-validator>=0.1.1 in /opt/conda/lib/python3.10/site-packages (from jupyter-events>=0.4.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.1.1)
Requirement already satisfied: pyyaml>=5.3 in /opt/conda/lib/python3.10/site-packages (from jupyter-events>=0.4.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (6.0)
Requirement already satisfied: python-json-logger>=2.0.4 in /opt/conda/lib/python3.10/site-packages (from jupyter-events>=0.4.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (2.0.7)
Requirement already satisfied: rfc3339-validator in /opt/conda/lib/python3.10/site-packages (from jupyter-events>=0.4.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (0.1.4)
Requirement already satisfied: jsonpointer>1.13 in /opt/conda/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (2.1)
Requirement already satisfied: webcolors>=1.11 in /opt/conda/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.13)
Requirement already satisfied: isoduration in /opt/conda/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (20.11.0)
Requirement already satisfied: uri-template in /opt/conda/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.3.0)
Requirement already satisfied: fqdn in /opt/conda/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.5.1)
Requirement already satisfied: arrow>=0.15.0 in /opt/conda/lib/python3.10/site-packages (from isoduration->jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.4->ipywidgets<8) (1.2.3)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: Pillow in /opt/conda/lib/python3.10/site-packages (9.4.0)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: matplotlib in /opt/conda/lib/python3.10/site-packages (3.7.2)
Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (23.0)
Requirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (9.4.0)
Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (3.0.9)
Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (1.4.4)
Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (0.11.0)
Requirement already satisfied: numpy>=1.20 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (1.24.3)
Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (1.1.0)
Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (2.8.2)
Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (4.41.0)
Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
代码
文本

下面这个代码块加载了示例所使用的模型,运行大约需要5分钟,请您耐心等待。如果你使用的是qrcode-diffusion: 2023-7-17镜像的话,那么模型已经下载好,这个代码块将会被自动跳过。如果你需要用到其他模型的话,直接在后续的代码中修改即可,diffusers会自动下载。

代码
文本
[2]
%%bash
# 加载示例所使用的模型
if ! [ -e /opt/hub ]; then
echo "正在下载..."
wget -q https://bohrium-example.oss-cn-zhangjiakou.aliyuncs.com/notebook/hub.tar.gz -O /tmp/hub.tar.gz
echo "下载完成,开始解压"
tar xzvf /tmp/hub.tar.gz -C /opt > /dev/null
echo "解压完成"
rm /tmp/hub.tar.gz
fi
echo "模型已加载"
模型已加载
代码
文本
[3]
# 下载示例所使用的字体
import os.path
fname="SimHei.ttf"
if os.path.isfile(fname):
print("字体已下载")
else:
print("字体正在下载 ... ")
os.system("wget -q http://129.204.205.246/downloads/SimHei.ttf")
print("字体下载完成")
字体已下载
代码
文本
[4]
from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

def create_image(text, font_size, font_color, background_color):
# 设置字体大小
plt.rcParams['font.size'] = font_size
# 设置字体为SimHei,用于显示中文
# plt.rcParams['font.sans-serif'] = ['SimHei']
font = FontProperties(fname="SimHei.ttf")
# 绘制文字
plt.text(0.1, 0.5, text, fontproperties=font, color=font_color)
# 设置背景颜色
plt.rcParams['axes.facecolor']=background_color
plt.rcParams['savefig.facecolor']=background_color
# 隐藏坐标轴
plt.axis('off')
# 将绘制的图片保存到内存中的一个缓冲区
from io import BytesIO
buf = BytesIO()
plt.savefig(buf, dpi=100, bbox_inches='tight', format='png')
# 关闭绘图
plt.close()
# 使用PIL库从缓冲区中加载图片
image = Image.open(buf)
return image


text = '今天新高'
font_size = 50
font_color = 'black' # 设置字体颜色
background_color = 'snow' # 设置背景颜色
image_txt = create_image(text, font_size, font_color, background_color)
image_txt

代码
文本
[5]
import os

import qrcode
import torch
from diffusers import ControlNetModel, StableDiffusionControlNetPipeline
from PIL import Image as PilImage
代码
文本

加载 ControlNet 模型。如果没有运行前面的代码块加载模型的话,需要下载数据并加载,需要花费约5分钟,请耐心等待。

代码
文本

control_v1p_sd15_brightness 用于明暗控制,它可以对灰度图片进行着色或者对生成的图片着色。使用这个模型可以让所生成的图片的明暗与原二维码匹配,使得结果更可能能够被识别。

代码
文本
[6]
controlnet_brightness = ControlNetModel.from_pretrained(
"ioclab/control_v1p_sd15_brightness",
torch_dtype=torch.float16,
use_safetensors=True,
cache_dir="/opt/hub"
).to("cuda")
The config attributes {'dropout': 0.0, 'sample_size': 32} were passed to ControlNetModel, but are not expected and will be ignored. Please verify your config.json configuration file.
代码
文本

control_v1p_sd15_qrcode_monster 是专门为生成二维码训练的模型,使用它可以使得生成的图像包含二维码信息,又富有艺术性。

代码
文本
[7]
controlnet_qrcode = ControlNetModel.from_pretrained(
"monster-labs/control_v1p_sd15_qrcode_monster",
torch_dtype=torch.float16,
use_safetensors=True,
cache_dir="/opt/hub"
).to("cuda")
代码
文本

第二步:加载 Stable Diffusion 模型

代码
文本

在这一步中,将会下载并加载 Stable Diffusion 模型并创建数据管道。如果没有运行前面的代码块加载模型的话,这个过程大约需要10分钟,请耐心等待。

根据 Stable Diffusion 网络结构,使用不同的数据集进行训练,产生了多种不同效果的模型。其中 stable-diffusion-v1-5 具有写实的风格,而 anything-v5DreamShaperghostmix 等具有动漫化的风格。根据不同需求,可以选择使用不同的模型。

StableDiffusionControlNetPipline数据管道可以方便地将 Stable Diffusion 模型和多个 ControlNet 模型结合。我们可以将提示词等参数传入这个数据管道,即可自动完成推理步骤,得到结果。

代码
文本
[8]
pipe = StableDiffusionControlNetPipeline.from_pretrained(
# 此处选择不同的模型
# "runwayml/stable-diffusion-v1-5",
# "stablediffusionapi/anything-v5",
# "Lykon/DreamShaper",
"stablediffusionapi/ghostmix",
controlnet=[controlnet_qrcode, controlnet_brightness],
torch_dtype=torch.float16,
cache_dir="/opt/hub"
)
pipe = pipe.to("cuda")
unet/diffusion_pytorch_model.safetensors not found
/opt/conda/lib/python3.10/site-packages/transformers/models/clip/feature_extraction_clip.py:28: FutureWarning: The class CLIPFeatureExtractor is deprecated and will be removed in version 5 of Transformers. Please use CLIPImageProcessor instead.
  warnings.warn(
代码
文本

在推理过程中,Scheduler 定义了通过模型输出更新样本的方式,也称为 Sampler。选用不同的 Schedulers 能够获得不同的收敛速度和生成效果。这里选择的是 DPMSolverMultistepScheduler并将其use_karras_sigmas配置为True。在这个配置下此 Scheduler 也称为 DPM++ 2M Karras,其具有较好的效果。你也可以根据需要选择不同的 Scheduler。

代码
文本
[9]
from diffusers import DPMSolverMultistepScheduler

scheduler = DPMSolverMultistepScheduler.from_config(
pipe.scheduler.config, use_karras_sigmas=True
)
pipe.scheduler = scheduler
代码
文本

第三步:生成原始图片

代码
文本
[10]
# 更改此处来修改二维码的内容,较短的内容往往能获得更好的效果
qrcode_data = "https://bohrium.dp.tech"

qr = qrcode.QRCode(
# 容错率,ERROR_CORRETC_L代表二维码有较低的容错率,使得二维码复杂度降低,生成艺术化二维码的难度更小
# 如果内容较短的话,可以设置为ERROR_CORRETC_H,代表较高容错率,这样可以采用更激进的调参方式
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=11,
border=4,
)
qr.add_data(qrcode_data)
qr.make(fit=True)
qrcode_image = qr.make_image(
fill_color="black", back_color="white").convert("RGB")

# 用我们的文字来生成艺术化图片(如果想尝试生成艺术化二维码,请注释/删除下一行)
qrcode_image = image_txt
代码
文本

第四步:生成艺术化图片

代码
文本

下面的代码块定义了最重要的参数——提示词! 如果您不熟悉 Stable Diffusion 的提示词书写技巧的话,可以仅修改prompt的第二行。附录中也收录了一些提示词教程的链接,您可以跳转阅读。

请注意,每次调整提示词后需要重新运行该代码块。

代码
文本
[11]
# 提示词及负面提示词, 更详细的提示词能获得更好的结果
prompt = """
(masterpiece:1.4, best quality:1.4), illustrations, (solo:1.2), (original), (very detailed wallpaper), photographic reality, (ultra detailed:1.4), (super complex details),
flowers, cheery
"""
negative_prompt = """
NG_DeepNegative_V1_75T, (worst quality, low quality:1.4), EasyNegative, (worst quality, low quality, extra digits:1.4), bad proportions, worst quality, low quality, normal quality,
NSFW, watermark
"""
代码
文本

可以在下面的代码块调整各种参数来获得预想的生成效果。

请注意,每次调整参数后需要重新运行该代码块。

代码
文本
[12]
# 随机数种子。固定随机数种子可以保证生成的结果可复现,也可以通过更改这个随机数种子来获得不同的生成结果。
seed = 1002

# 推理步数。对于示例所选用的 Scheduler 来说 30 已经足够。
num_inference_steps = 30

# 分类器指导强度。更高的值会让生成的图片更符合提示词,但代价是更低的图像质量。
guidance_scale = 7

# ControlNet QRCode Monster 相关参数
controlnet_conditioning_scale_qrcode = 1.5 # 指导强度。更高的值会让生成的图像更有二维码的特点。
control_guidance_start_qrcode = 0.1 # 产生作用的起始点。取值范围从0到1,示例中的0.1代表推理步数进行10%后该 ControlNet 开始发挥作用。
control_guidance_end_qrcode = 0.9 # 产生作用的结束点。取值范围从0到1,示例中的0.9代表推理步数进行90%后该 ControlNet 结束发挥作用。

# ControlNet Brightness 相关参数
controlnet_conditioning_scale_brightness = 0.4 # 指导强度。更高的值会让生成的图像更有二维码的特点。
control_guidance_start_brightness = 0.65 # 产生作用的起始点。取值范围从0到1,示例中的0.65代表推理步数进行65%后该 ControlNet 开始发挥作用。
control_guidance_end_brightness = 0.9 # 产生作用的结束点。取值范围从0到1,示例中的0.9代表推理步数进行90%后该 ControlNet 结束发挥作用。

# 生成图像的高度。建议的值为 512 或 768 以达到较好的效果。
height = 768
# 生成图像的宽度。建议的值为 512 或 768 以达到较好的效果。
width = 768
代码
文本

如果你希望得到更加艺术化的生成结果,你可以:

  • 适当调低两个 ControlNet 的指导强度
  • 适当调后两个 ControlNet 产生作用的起始点
  • 适当调前两个 ControlNet 产生作用的结束点

如果生成的二维码无法识别,你可以调整随机数种子多试几次,或者按照与上述调整方法相反的方式调整以使得生成的结果更加有二维码的特点。

代码
文本

将参数传入数据管道以开始推理。稍等大约半分钟,就可以获得结果。如果生成的结果不满足预期,建议调整上面的参数与提示词后重新运行,多尝试几次。

代码
文本
[13]
image = pipe(
prompt,
[qrcode_image, qrcode_image],
num_inference_steps=num_inference_steps,
generator=torch.Generator("cuda").manual_seed(seed),
negative_prompt=negative_prompt,
guidance_scale=guidance_scale,
controlnet_conditioning_scale=[
controlnet_conditioning_scale_qrcode,
controlnet_conditioning_scale_brightness,
],
control_guidance_start=[
control_guidance_start_qrcode,
control_guidance_start_brightness,
],
control_guidance_end=[control_guidance_end_qrcode,
control_guidance_end_brightness],
height=height,
width=width,
).images[0]
image
代码
文本

生成出满意的二维码之后,可以将其保存到 /data 目录中。保存之后,你可以打开侧边栏,点击左上角的刷新按钮,然后就能看到出现了 qrcode.png,右键即可将其下载到电脑中。

代码
文本
[14]
image.save("qrcode.png")
代码
文本

附录

如果您想了解提示词的具体格式和含义,您可以阅读下述文章:

如果您想了解 Hugging Face AI 的更多用法,您可以阅读:

如果您想了解关于 Stable Diffusion 和 ControlNet 的更多信息,您可以参考:

代码
文本
AIGC
中文
AIGC中文
点个赞吧
推荐阅读
公开
Hugging Face AI 生成炫酷二维码
Hugging Face中文Tutorialnotebook
Hugging Face中文Tutorialnotebook
ZFWANG
发布于 2023-07-10
15 赞37 转存文件10 评论
公开
Uni-ELF APP Hands-on
Uni-ELF
Uni-ELF
Letian
更新于 2024-08-14
3 赞
评论
 # Hugging Face AI 生成...

WeChatUservyko

2023-07-19
厉害

83785738@qq.com

2023-07-19
哇哦
评论