画像生成AIを使った自分だけのおしゃれなQRコードの作成手法

# はじめに

今回ご紹介するのは最近流行りのQRコードに絵を描く技術です。タイトル通り、今回紹介する方法で自分だけのおしゃれなQRコードを作成できます。このQRコードはもちろん読み取ることができます。注：読み取ると弊社の採用ページに飛びます。(画面サイズにもよりますが、少し引き気味で撮るとうまく認識しやすいです）

![00004-1847487018 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/9b285624-38cc-2e90-5081-b246d1aa9796.png)


これは画像生成AIモデルの**Stable Diffusion**を活用することで実現できます。
簡単にStable Diffusionについて解説したあと、方法を解説します。

::: note
弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よかったら、Organizationのページも覗いてみてください。
また、Nucoでは一緒に働く仲間も募集しています！興味をお持ちいただける方は、[こちら](https://www.recruit.nuco.co.jp/?qiita_item_id=10819d3dc10f4c0807f2)まで。
:::
https://www.recruit.nuco.co.jp/?qiita_item_id=10819d3dc10f4c0807f2

# Stable Diffusionとは
<font color="MediumBlue">**Stable Diffusion**</font>とは、入力されたテキストを元に画像を生成するAIモデルです。

例えば「Big mountains」と入力すると以下のような画像を生成してくれました。
![00000-2392506131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/1d97a362-8323-c789-e149-e317bfdeaa96.png)

このStable Diffusionを活用していきます。絵を埋め込んだQRコードの作成にはControlNetと呼ばれるStable Diffusionの拡張機能を使用します。今回はローカルのWindows環境(自分の手元のPCはNVIDIA GeForce RTX 3060が入ってます)を想定して生成を行います。手元のM1チップのMacbookAirではメモリ不足で生成できませんでした。Macで挑戦してみたい方は適宜補ってみてください。

# Stable Diffusionの導入
Stable Diffusionを使用するにはまず、PythonとGitのダウンロードが必要です。Gitは必須ではありませんが、覚えておくと便利なので是非、使用してみましょう。

#### Pythonのインストール
Pythonのバージョンは3.10.6が推奨されているので推奨バージョンを[ダウンロード](https://www.python.org/downloads/release/python-3106/)します。(3.11.xは動かないとか...)

ダウンロード時にはAdd 3.10にチェックボタンを入れましょう。（パスを通さずに操作していくとエラーを出します）
![python_Qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/c49b3625-4706-b400-1319-14e19865b5ed.png)

#### Gitのインストール
バージョン管理システムのGitを[ダウンロード](https://gitforwindows.org/)します。

https://gitforwindows.org/

Gitのダウンロードに不安のある方はこちらを参考にしてみてください。

https://sejuku.net/blog/73444

#### Stable Diffusionのインストール
Stable Diffusion web uiをインストールします。Stable Diffusion web uiでは、ローカルサーバーをたて、Web上でStable Diffusionの操作を行えます。

https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

コマンドプロンプト上で、展開したい場所に移動したら、以下を実行してください。

```
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
```

ダウンロードが完了したら、stable-diffusion-webuiフォルダが作成されるので、フォルダ内にあるwebui.bat（Macはwebui.sh)を実行しましょう。実行完了まで時間がかかるので時間があるときに実行しましょう。30分くらいで終わるらしいですが、筆者は1時間ほどかかってしまいました。

実行が完了すると、コマンドプロンプト上に

```
Running on local URL: サイトURL
```
と表示されるのでURLを踏んだら、以下の画面となり、準備完了です。

![stableUI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/a54fb494-ee45-fe2e-a7e9-3f796bd06112.png)

#### 使用するモデル
絵を生成するモデルを選びます。今回はCounterfeit-V3.0を採用しました。モデルは適宜、好みなモデルを試してみてください。[Hugging Face](https://huggingface.co/)や[Civital](https://civitai.com/)からモデルを探すことができます。Civitalではどんな絵が生成されるのか表示されているのでおすすめです。モデルが多すぎて選べないという方はこのようにまとめられたサイトもあるので参考にしてみてください。

https://photoshopbook.com/2023/05/21/stable-diffusion-models/

![cicital.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/5a988892-b946-2ff4-2d83-f83266c0d7be.png)

モデルのダウンロードが完了したら、stable-diffusion-webui/models/Stable-diffusion/に保存したファイルを置きます。これでモデルの導入は完了です。

ダウンロード方法の詳細は[こちら](https://ikuriblog.com/how-to-put-a-model-in-stable-diffusion/)を参考にしてみてください。

#### 拡張機能の実装
QRコードに絵を描画させるにはControlNetと呼ばれる拡張機能を導入します。Stable Diffusion内にある「Extensions」を選択します。Extensions内の「install from URL」を選択しましょう。「URL for extension's git repository」にこちらのControlNetのURLをペーストしてinstallを押します。

https://github.com/Mikubill/sd-webui-controlnet

![extensions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/7a343328-4195-4fc1-45b5-1e86f10e3f00.png)

Installが完了したら、「Extensions」/「Installed」のApply and restart UIをクリックしましょう。

#### ControlNetのモデルのインストール
絵を生成するモデルとは別で、ControlNetに使用するモデルを導入します。
[こちら](https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main)から、「control_v11f1e_sd15_tile.pth」をダウンロードします。↓ボタンを押すことで、ダウンロード可能です。
![controlnet_mini.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/9de4ee31-ad02-8eee-a616-03990654e569.png)

ダウンロードしたファイルをstable-diffusion-webui/extensions/sd-webui-controlnet/models/に配置します。これでもう一度、Stable Diffusionを再起動させましょう。

ここまできたらダウンロードはすべて完了です！
実際にQRコードを作成しましょう。

# 作成
### QRコードの作成
まず、こちらのサイトからQRコードを作っていきます。

https://34qr.com/en/

URLを選択して、QRコードを読み込んだときに、飛ぶ先のリンクを埋め込みます。
![スクリーンショット 2023-07-06 12.58.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/f5911f6a-432d-80f3-476d-d52ee2719efb.png)

Generateボタンを押して、QRコードを生成しましょう。
![スクリーンショット 2023-07-06 13.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/fdc4b656-bfcb-cfa5-d9fa-082775c3c7b0.png)

最後に生成されたQRコードをPNGでダウンロードします。これでQRコードの準備は完了です。
![スクリーンショット 2023-07-06 13.12.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/51ccbf6d-35b6-b221-2ab6-15e415067599.png)


実際に弊社のリクルート採用のページをQRコードにしてみました。
![リクルートQR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/99243971-188d-c483-5cf5-b137d291bb81.png)

### Stable Diffusionの操作
Stable Diffusionのパラメータをいじっていきます。

#### ①絵の生成モデルの選択
画面最上部の「Stable Diffusion checkpoint」から導入したモデルを選択します。
#### ②img2imgのタブを選択
img2imgタブを選択し、生成したい絵のプロンプトを張り付け、QRコード画像をアップロードします。
設定はCivitalなどを参考に調整してみてください。Civitalではこのように絵の詳細な設定が公開されています。冒頭のQRコードは[こちら](https://civitai.com/images/1401096?period=AllTime&periodMode=published&sort=Newest&view=categories&modelVersionId=57618&modelId=4468&postId=359689)を参考にしました。

https://civitai.com/images/1401096?period=AllTime&periodMode=published&sort=Newest&view=categories&modelVersionId=57618&modelId=4468&postId=359689

![civital.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/3890c333-2bd7-30de-3c9d-8f54d16d41b2.png)

#### ③ControlNetの設定
img2imgの設定下にControlNetがたたまれているので、展開するとControlNetの設定ができるようになります。

![new_controlnet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/a33036bd-32a9-0b8a-1d3f-35d6ec6f75a9.png)
ControlNetにもimg2imgと同様に、QRコード写真をアップロードします。以下の画像のようにControlNetの設定を行います。
![controlnet_syousai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/e1188d34-7f78-5798-9c73-ade7b9032798.png)

あとは、主にControl Weight, Starting Control Step, Ending Control Stepの値を調整しながら画像の生成を行っていきます。（この作業がなかなか大変です）


### 実際の設定
冒頭のQRコードの設定をご紹介します。プロンプトは参考にした絵をそのまま入力し、img2imgとControlNetの設定をQRコードとして読み込まれるように調整しました。
#### img2imgの設定
Just resize
Sampling method:DPM++ 2M Karras
sampling steps:25
width:768
Height768
Batch count, size:1
CFG Scale:7
Denoising strength:0.85
Seed:1847487018

#### ControlNetの設定
Control Weight:1.75
Starting Control Step:0.33
Ending Control Step:1

# 結果
上記の設定で実行すると冒頭で紹介したQRコードが生成されました。これ以外にもプロンプトやパラメータをいじると様々な絵をQRコードに組み込むことができます。

この技術を使用して、自身のホームページなどのQRコードを作成して、名刺などに添えるのも面白いかもしれません。


![00004-1847487018 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/72683770-416a-da4c-f2b3-aaa42a5bb08e.png)


# うまく生成するためのコツ
パラメータを調整するときのポイントをいくつか紹介します。生成する際に大きく影響するパラメータとして、Controle Weight, Starting Control Stepが大きく影響してきます。Controle Weightのイメージとしては入力画像に対する重み付けで、値が大きいほど入力画像であるQRコードの影響が強くなります。Starting Control StepはどのタイミングでControlNetを反映させるか、つまりQRコードを紛れ込ませるかの設定となります。この値が低い（入力画像をすぐ反映させる）とQRコードに近い画像が生成され、値が大きい（入力画像を遅めに反映させる）とプロンプトの影響が大きい絵が生成されます。実際に生成するとこのようになります。

**Starting Control Step:0.1**
![00007-1847487018 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/310b7eb3-b845-12b7-390f-fd404791638d.png)

**Starting Control Step:1**
![00006-1847487018 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/94e6c261-f627-0e66-7fe4-a8c1ff3e9304.png)


この2つのパラメータを調整してもうまく行かない場合はimg2imgの「Denoising strength」と「Samplig steps」を調整してみてください。生成したい絵とは少し異なる画像にはなってしまう可能性が高いですが、とりあえずQRコードを生成したい方は参考にしてみてください。

英語にはなってしまいますが、[こちら](https://stable-diffusion-art.com/qr-code/)のサイトではQRコードの生成例が載っているので参考にしてみるのもよいと思います。このサイトでは 絵の生成モデルとして[GhostMix](https://civitai.com/models/36520/ghostmix)を使用しています。

https://stable-diffusion-art.com/qr-code/

# 他にもいくつか・・・
いくつか生成に成功したQRコードを納めときます。(読み込むと弊社の[ホームページ](https://nuco.co.jp/)に飛びます）
![00008-3723099727 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/3f5e623f-d451-237f-a044-d642926f3d24.png)
参考

https://civitai.com/images/1399124?period=AllTime&periodMode=published&sort=Newest&view=categories&modelVersionId=57618&modelId=4468&postId=359266

Control Weight:1.65, Starting Control Step:0.37

---
![00009-582962177 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/6ccf0437-aac9-e196-6e80-e1cb439f5b6f.png)
参考

https://civitai.com/images/861915?period=AllTime&periodMode=published&sort=Most+Reactions&view=categories&modelVersionId=57618&modelId=4468&postId=230956

Sampling steps:40
Control Weight:0.88, Starting Control Step:0.335

---

![00001-1293666383 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125904/e8dd291f-90ef-dc67-cebb-91c66308f4b9.png)

参考

https://civitai.com/images/625765?period=AllTime&periodMode=published&sort=Most+Reactions&view=categories&modelVersionId=57618&modelId=4468&postId=175104

Control Weight:1.3, Starting Control Step:0.34


# まとめ
今回は流行りの絵を埋め込んだQRコードの作成方法を紹介しました。ぜひみなさんも自分の手で動かして試してみてください！


::: note
弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よかったら、Organizationのページも覗いてみてください。
また、Nucoでは一緒に働く仲間も募集しています！興味をお持ちいただける方は、[こちら](https://www.recruit.nuco.co.jp/?qiita_item_id=10819d3dc10f4c0807f2)まで。
:::
https://www.recruit.nuco.co.jp/?qiita_item_id=10819d3dc10f4c0807f2