Bohrium
robot
新建

空间站广场

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

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
asdfasdf
adf
adf
bulindog
发布于 2023-09-20
推荐镜像 :ABACUS:3.3.2-user-guide
推荐机型 :c2_m4_cpu
Hugging Face AI 生成炫酷二维码
第一步:加载 ControlNet 模型
第二步:加载 Stable Diffusion 模型
第三步:生成原始二维码
第四步:生成艺术化二维码
附录
参考资料及项目

Open In Bohrium

代码
文本
双击即可修改
代码
文本
[ ]

代码
文本

Hugging Face AI 生成炫酷二维码

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

代码
文本

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
Writing to /root/.config/pip/pip.conf
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting diffusers==0.18.2
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/74/17/f8bfb7ce78bd8190b691fba7f303df396d0cf5db7aa722528097654e6364/diffusers-0.18.2-py3-none-any.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 16.1 MB/s eta 0:00:0000:010:01
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.19.0)
Collecting accelerate
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/70/f9/c381bcdd0c3829d723aa14eec8e75c6c377b4ca61ec68b8093d9f35fc7a7/accelerate-0.21.0-py3-none-any.whl (244 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 244.2/244.2 kB 44.4 MB/s eta 0:00:00
Collecting safetensors
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/9d/63/4b25608fae880cc832ca816917f9dff10e9e9e7ba91bc46d50d681fd997f/safetensors-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 48.0 MB/s eta 0:00:00
Collecting transformers
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/5b/0b/e45d26ccd28568013523e04f325432ea88a442b4e3020b757cf4361f0120/transformers-4.30.2-py3-none-any.whl (7.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2/7.2 MB 66.5 MB/s eta 0:00:00:00:010:01m
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: Pillow in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (9.4.0)
Requirement already satisfied: requests in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (2.29.0)
Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (1.24.3)
Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (3.9.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: importlib-metadata in /opt/conda/lib/python3.10/site-packages (from diffusers==0.18.2) (6.6.0)
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: torch>=1.10.0 in /opt/conda/lib/python3.10/site-packages (from accelerate) (2.0.1)
Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from accelerate) (23.0)
Requirement already satisfied: pyyaml in /opt/conda/lib/python3.10/site-packages (from accelerate) (6.0)
Requirement already satisfied: psutil in /opt/conda/lib/python3.10/site-packages (from accelerate) (5.9.0)
Collecting tokenizers!=0.11.3,<0.14,>=0.11.1
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/94/60/ff26cce378023624ffcad91edaa4871f561d6ba7295185c45037ddba80e2/tokenizers-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.8/7.8 MB 62.9 MB/s eta 0:00:0000:0100:01m
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: 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: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests->diffusers==0.18.2) (3.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: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests->diffusers==0.18.2) (2.0.4)
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)
Installing collected packages: tokenizers, safetensors, transformers, diffusers, accelerate
  Attempting uninstall: diffusers
    Found existing installation: diffusers 0.16.1
    Uninstalling diffusers-0.16.1:
      Successfully uninstalled diffusers-0.16.1
  Attempting uninstall: accelerate
    Found existing installation: accelerate 0.19.0
    Uninstalling accelerate-0.19.0:
      Successfully uninstalled accelerate-0.19.0
Successfully installed accelerate-0.21.0 diffusers-0.18.2 safetensors-0.3.1 tokenizers-0.13.3 transformers-4.30.2
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
Collecting ipywidgets<8
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/34/65/e97c8528ce10091a7467fe82ade2d101270a233b9fb7324012ed0ebd0586/ipywidgets-7.7.5-py2.py3-none-any.whl (123 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.9/123.9 kB 4.5 MB/s eta 0:00:00
Collecting jupyterlab-widgets<3,>=1.0.0
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/47/78/b8db068414b354da1abd01dfc2326b8b3123d334173683941a075d36e3da/jupyterlab_widgets-1.1.4-py3-none-any.whl (246 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 246.1/246.1 kB 10.4 MB/s eta 0:00:00
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: 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: traitlets>=4.3.1 in /opt/conda/lib/python3.10/site-packages (from ipywidgets<8) (5.7.1)
Collecting widgetsnbextension~=3.6.4
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/20/3e/3c14aa36acbf60e72eac522b54e6b6a0fe9afadc2eb83f1733a77bbb8670/widgetsnbextension-3.6.4-py2.py3-none-any.whl (1.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 19.1 MB/s eta 0:00:0000:0100:01
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: 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: 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: 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: packaging in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (23.0)
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: debugpy>=1.0 in /opt/conda/lib/python3.10/site-packages (from ipykernel>=4.5.1->ipywidgets<8) (1.5.1)
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: backcall 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: 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: stack-data 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: 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: pexpect>4.3 in /opt/conda/lib/python3.10/site-packages (from ipython>=4.0.0->ipywidgets<8) (4.8.0)
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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: asttokens in /opt/conda/lib/python3.10/site-packages (from stack-data->ipython>=4.0.0->ipywidgets<8) (2.0.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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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)
Collecting uri-template
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl (11 kB)
Collecting isoduration
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl (11 kB)
Collecting fqdn
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl (9.1 kB)
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)
Collecting webcolors>=1.11
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d5/e1/3e9013159b4cbb71df9bd7611cbf90dc2c621c8aeeb677fc41dad72f2261/webcolors-1.13-py3-none-any.whl (14 kB)
Collecting arrow>=0.15.0
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/67/67/4bca5a595e2f89bff271724ddb1098e6c9e16f7f3d018d120255e3c30313/arrow-1.2.3-py3-none-any.whl (66 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.4/66.4 kB 14.2 MB/s eta 0:00:00
Installing collected packages: webcolors, uri-template, jupyterlab-widgets, fqdn, arrow, isoduration, widgetsnbextension, ipywidgets
Successfully installed arrow-1.2.3 fqdn-1.5.1 ipywidgets-7.7.5 isoduration-20.11.0 jupyterlab-widgets-1.1.4 uri-template-1.3.0 webcolors-1.13 widgetsnbextension-3.6.4
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

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

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

代码
文本

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

代码
文本
[4]
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 是专门为生成二维码训练的模型,使用它可以使得生成的图像包含二维码信息,又富有艺术性。

代码
文本
[5]
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 模型结合。我们可以将提示词等参数传入这个数据管道,即可自动完成推理步骤,得到结果。

代码
文本
[6]
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")
vae/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。

代码
文本
[7]
from diffusers import DPMSolverMultistepScheduler

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

第三步:生成原始二维码

代码
文本
[8]
# 更改此处来修改二维码的内容,较短的内容往往能获得更好的效果
qrcode_data = "https://nb.bohrium.dp.tech/detail/1345"
代码
文本
[9]
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
代码
文本

第四步:生成艺术化二维码

代码
文本

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

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

代码
文本
[10]
# 提示词及负面提示词, 更详细的提示词能获得更好的结果
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
"""
代码
文本

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

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

代码
文本
[11]
# 随机数种子。固定随机数种子可以保证生成的结果可复现,也可以通过更改这个随机数种子来获得不同的生成结果。
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 产生作用的结束点

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

代码
文本

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

代码
文本
[12]
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,右键即可将其下载到电脑中。

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

附录

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

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

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

代码
文本
adf
adf
点个赞吧
推荐阅读
公开
test
Deep Learning
Deep Learning
bulindog
发布于 2023-09-20
3 转存文件
公开
testt
test
test
bulindog
发布于 2023-09-20
4 转存文件