Livebookを使って画像識別AIや音声識別AI、お絵描きAIを使ってみた

こんにちは！
プログラミング未経験文系出身、Elixirの国に迷い込んだ？！見習いアルケミストのaliceと申します。
今回は、2023/5/23開催「[LiveViewJP#17：画像識別AIや音声識別AI、お絵描きAIをLivebookでハンズオン](https://liveviewjp.connpass.com/event/282201/)」で学んだことをまとめます。

# 目的
Livebookを使って画像識別AIや音声識別AI、お絵描きAIを使ってみます。

## 実行環境
Windows 11 ＋ WSL2 ＋ Ubuntu 22.04
Elixir v1.14.3
Livebook v0.9.2

# 環境構築
## Livebookのインストール
Dockerコンテナからの環境構築、アプリ版の環境構築もありますが今回はCLI経由で実施しました。
※インストール方法の一覧はこちらから(https://github.com/livebook-dev/livebook#installation)

```shell:shell
git clone https://github.com/livebook-dev/livebook.git
cd livebook
mix deps.get --only prod
MIX_ENV=prod mix phx.server
```
localhostでLivebookが立ち上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/5c40fe4f-0e3c-025c-6d45-324568148bff.png)


## スマートセルを使うための準備
#### 1\. +New notebookを押下します。
![スクリーンショット 2023-05-24 11460101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/30444f49-f3ab-93c8-3326-5d20ebd4e06e.png)

#### 2\. +Smartを押下し、プルダウンからNeural Network taskを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/2f19e971-d954-b364-808f-435a93ae5317.png)

#### 3\. 依存パッケージの導入を許可します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/71b5c899-febb-024e-1664-fae6f20a4ed1.png)

#### 4\. 準備完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/63883138-a004-0742-f3c7-d48137757379.png)


# 実際に遊んでみた
## 画像識別AI
#### 1\. TASKから Image classificationを選択し、一度evaluate。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/56fe9241-1d52-c5ed-a299-5b157d3250de.png)

#### 2\. 画像を撮影またはアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/c36492d2-bd14-b3ba-7a1e-f996d62a4e80.png)

#### 3\. Runを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/f4ce3e36-b528-d512-cf0e-ae5e78aa6a7a.png)

#### 4\. できました(^▽^) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/bdc1ffa8-e7db-6c1b-1bdc-f86f80ea47f6.png)


## 音声識別AI（英語）
#### 1\. TASKから Speech-to-textを選択し、一度evaluate。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/296edeed-b3dd-b5e3-cb28-9cb31dbcee63.png)

#### 2\. 音声を録音またはアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/479c291b-be31-8384-cd9d-e63011396c66.png)

#### 3\. Runを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/e8f9d1d2-ac15-0649-f9c1-5287c55e317b.png)

#### 4\. できました(^▽^) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/bd3731ec-763e-04eb-dcfb-90be01bbccce.png)


## 音声識別AI（日本語に対応する）
#### 1\. TASKから Speech-to-textを選択し、Convert to Code cellを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/52fb4bbb-6ce9-b0c9-a19a-c634f3feb267.png)

#### 2\. 表示されたコードブロックを以下のように書き換え、一度evaluate。
```diff_elixir:elixir
{:ok, model_info} = Bumblebee.load_model({:hf, "openai/whisper-tiny"})
{:ok, featurizer} = Bumblebee.load_featurizer({:hf, "openai/whisper-tiny"})
{:ok, tokenizer} = Bumblebee.load_tokenizer({:hf, "openai/whisper-tiny"})
{:ok, generation_config} = Bumblebee.load_generation_config({:hf, "openai/whisper-tiny"})
generation_config = Bumblebee.configure(
  generation_config,
  max_new_tokens: 100,
+  forced_token_ids: [
+      {1, Bumblebee.Tokenizer.token_to_id(tokenizer, "
")},
+      {2, Bumblebee.Tokenizer.token_to_id(tokenizer, "
")},
+      {3, Bumblebee.Tokenizer.token_to_id(tokenizer, "
")}
+    ]
)

serving =
  Bumblebee.Audio.speech_to_text(model_info, featurizer, tokenizer, generation_config,
    compile: [batch_size: 1],
    defn_options: [compiler: EXLA]
  )
```
↓ソースコード教えていただきありがとうございました。引用させていただきました。

https://github.com/RyoWakabayashi/elixir-learning/blob/main/livebooks/bumblebee/japanese_whisper.livemd#section

↓音声識別AIの仕組みを学ばせていただきました。ありがとうございます。

https://qiita.com/the_haigo/items/9d9e3ebad6cae6a5c65a#whsiper%E3%81%A8%E3%81%AF

#### 3\. 音声を録音またはアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/479c291b-be31-8384-cd9d-e63011396c66.png)

#### 4\. Runを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/e8f9d1d2-ac15-0649-f9c1-5287c55e317b.png)

#### 5\. できました(^▽^) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/00c25dc9-fe7d-dfcd-6f3d-afd18b9aa79a.png)


## お絵描きAI
#### 1\. TASKから Text-to-imageを選択し、一度evaluate。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/f9723a94-6d98-617e-d249-e154e668aab1.png)

#### 2\. プロンプトを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/eeed53a1-cd82-45ca-8bad-e476427a7606.png)

#### 3\. Runを押下します。
※出力する枚数、step数、プロンプトの内容次第で時間がかかることがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/e2fac762-8b18-a4b3-8951-346d5d299840.png)

#### 4\. できました(^▽^) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/03c9e7c9-da3a-3d15-30ed-63a61dc8c0ee.png)



# ～Elixirの国のご案内～
↓Elixirって何ぞや？と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

https://qiita.com/piacerex/items/09876caa1e17169ec5e1

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ！私もエンジニア未経験から学習中です。

https://elixir-lang.info/topics/entry_column


↓[We Are The Alchemists, my friends!:bouquet:](https://qiita.com/torifukukaiou/items/6bcd5bbb80df9e594e9e "Awesome-san's Awesome article")[^10]
Elixirコミュニティは本当に優しくて温かい人たちばかり！
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。[^11]


https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian




[^10]: @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。


[^11]: @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中！