AI駆動型開発03:ライブラリの利用
今回使用したコード(Google Colab)
コード(プログラム)の細かいところは生成AIで生成したものを使うか、次のGoogle Colabを参照してください。
ライブラリとは?
ライブラリとは?
ライブラリとは機能を提供するプログラムの集まりです。ライブラリを利用することで、高度な機能を簡単な記述で実現することが可能になります。
「AI駆動型開発02:コードの生成から実行まで」でハートのグラフを描画するコードを生成AIで生成したとき、次のようなコードが生成されました。
import matplotlib.pyplot as plt
import numpy as np
# tという名前の変数に、0から2π(約6.28)までの数を1000個並べたものを入れる
t = np.linspace(0, 2 * np.pi, 1000)
# xとyという名前の変数に、ハートの形を作るための数式を入れる
x = 16 * np.sin(t)**3 # 横の位置を決める数
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t) # 縦の位置を決める数
# 絵を描く
plt.figure(figsize=(6,6)) # 絵の大きさを決める(6x6インチ)
plt.fill(x, y, color='blue') # xとyを使って、青いハートの形を塗りつぶす
plt.title('Heart Shape Graph') # 絵にタイトルをつける
plt.axhline(0, color='black', linewidth=0.5) # 横軸を描く
plt.axvline(0, color='black', linewidth=0.5) # 縦軸を描く
plt.grid(True, which='both', linestyle='--', linewidth=0.5) # グリッド線を描く
plt.axis('equal') # 縦と横の比率を同じにして、ハートの形が変にならないようにする
# 絵を表示する
plt.show()
このプログラムでは「matplotlib.pyplot」と「numpy」という2つのライブラリを利用しています。
import matplotlib.pyplot as plt
import numpy as np
の部分が「matplotlib.pyplot」と「numpy」のライブラリを呼び出している部分で、プログラムの中ではこれらのライブラリを「plt」「np」として使うと宣言しています。これをインポートといいます。
後のコードでは「plt.〜」や「np.〜」など記述している部分はすべてライブラリの機能を使っている部分です。plt.の「ピリオド」は「〜の」と読みます。「pltというライブラリの〇〇という機能を実行する」といった意味になります。
ライブラリの重要性と使い方
先のコード(プログラム)見るとほとんど「plt.」や「np.」で記述されています。つまりプログラミングでは、プログラム言語の文法をマスターすることも重要ですが、ライブラリを使いこなすことのほうがより重要であることを示しています。でないと高度な処理を行うことができません。
例えて言うならばプログラムの基本文法だけで犬小屋などは作れますが(プログラミングの教科書に乗っているような処理)、ビルなど高度なものは作れないのです。
ライブラリの使い方はある程度決まっていて次のような流れになります。
ライブラリをインポートする(名前をつける)
ライブラリの機能を使う
Pythonの場合は次のようになります。
import ライブラリ名 as 名前
結果=名前.機能(情報)
ライブラリをインポートした後は必要な機能を次のように実行していきます。
t = np.linspace(0, 2 * np.pi, 1000)
これはnpのlinspaceを実行すると書いていて、()の中に必要な情報を入れて、結果をtにしているということになります。専門用語でlinspace(0, 2 * np.pi, 1000)は「機能名(情報)」という記述で、(情報)の「情報」を「引数:ひきすう」といい、tに結びつける(代入する)結果を「戻り値:もどりち」といいます。
このあたりは超基本なので形とともに専門用語も覚えておくと良いと思いますが、大事なことはどのライブラリのどの機能を使うと自分の希望する結果を得ることができるかです。
ライブラリの呼び出し方法や使い方は決まった形がありますが、どのようなライブラリがどのような機能を提供しているかなど細かいところは開発者(プログラマ)も知らないんです(もちろんよく使うのは覚えていますが)。だからプログラマは必要な機能を提供するライブラリを検索し、そのマニュアルを読んで実際に希望した動作をするか確認しならがプログラムを組んでいくのです。
ちなみにPythonのライブラリのマニュアルは次のとおりです。
つまり、検索を行ってサンプルを探したり、マニュアルを読んでサンプルを作ったりしてプログラミングを行っていたのが今までの開発スタイルになります。今後はこれらの検索やマニュアルを読む、サンプルを作ると行った部分が生成AIに置き換わっていくものと考えれます。
【今までの開発スタイル】
検索などので必要なライブラリを知る
マニュアルを読んでで機能を知る
簡単なプログラムを組んで動作を確認する
【これからこ開発スタイル(AI駆動型開発)】
生成AIにどのようなライブラリがあるか聞く
コードを生成して実行する
改造しながら理解を深めアプリ化へ進める
プログラムの文法も大事ですが、まずは実行可能なコードを如何に手に入れ、それを生成AIとの対話を通じ改造し、アプリ化していくかといったところがポイントになると考えています。
プログラミング言語の文法については生成AIがいくらでも解説してくれますが、知っていたほうが問題が起きたときの解決の速度や精度が早くなります。
標準ライブラリと外部ライブラリ
「matplotlib.pyplot」や「numpy」は基礎的なライブラリでPythonの実行環境を構築する時点で同時にインストールされていて、importするだけで利用可能です。これら標準ライブラリといいます。
標準ライブラリ以外に世界中のプログラマが作ったたくさんのライブラリが公開されています。多くのライブラリがGitHubというところで公開されています。
GitHubにはPythonに限らずオープンソース(多くは無料で利用可能)のライブラリやアプリが数多く登録されています。現在の運営母体はMicrosoftです。メジャーなライブラリは生成AIに聞いたり検索を行ってライブラリ名を知ることができます。ライブラリ名を知ったら、サンプルのコードを実行していく、もしくは生成AIでコードを生成して実行するという流れになります。
画像収集のライブラリ利用
どのようなライブラリがあるか知る
それではよくある画像収集のライブラリについてどのようなものがあるか調べていきましょう。画像収集のライブラリは認識系のAIの学習データを集めるときによく使われた手法でWeb検索などの検索結果から画像だけを抜き出して保存するようなものです。Webスクレイピング(削る)というカテゴリの技術でWeb(ホームページ)のデータから必要な情報のみを抜き出す仕組みです。
Webスクレイピングは著作権の問題から禁止されているサイトなども多く存在します。法的見解も分かれるところですので、学習や練習でなく実務で利用する場合は規約の確認を行う必要があります。
それでは生成AIに画像収集のライブラリについて聞いてみましょう。ライブラリを知るためのプロンプトは「やりたいこと」「プログラム言語名または実行環境」「【ライブラリ】というキーワード」を入れる必要があります。例えば次のようにプロンプトを記述します。
これをChatGPT4oに投げると次のように回答が生成されます。
外部ライブラリは実行環境にインストールされていないのでまずインストールが必要になります。Pythonの場合、ライブラリのインストールは
となります。ライブラリをインストールした後に、生成されコードを実行します。ここでは「google_images_download」「icrawler」「requests と BeautifulSoup の組み合わせ」の3つの方法が提示されました。
他にもあるかもしれませんので、「他にはありますか?」と問いかけましょう。
1回だとよく使うライブラリが表示されない場合があるので、2回程度は問い合わせてみましょう。ChatGPT4o以外ではサンプルコードが生成されない場合があります。その場合は「ライブラリ名でサンプルを生成してください」とプロンプトをいれると生成してくれます。では順番に実行してみましょう。
google_images_download
エラーは起きませんでしたが、結果の英文を読むとうまくいかなかったようです。
この場合はエラーメッセージを生成AIに投げて原因を探ったりするわけですが、ライブラリが動かない原因は多くの可能性が考えられるので、サクッと次のライブラリに進むことをおすすめします。
icrawler
icrawlerの場合は何も言わずに終了しました。うまく行ったのでしょうか?次に進みましょう。
requests と BeautifulSoup の組み合わせ
requests と BeautifulSoupも何も反応なく、処理が終了しました(エラーにはならないけれど画像は取得できていません)。
コードの改造
icrawler
実行結果が分からないと、うまく行ったかどうかわかりませんので、生成されたコードと、保存と画像表示までを行うようにコードを改造してもらいましょう。
生成されたコードを実行すると次のように表示されます。
うまくいかないときの考え方
生成AIで生成したコードが上手く動かないことはよくあります。この原因はさまざまなので、うまくいかないコードを生成AIとの対話で修正するという方法も取れますが、ある程度原因にあたりを付けてプロンプトを工夫できないと、生成AIは入力されたプロンプトに対して正直にコードを生成するだけで、解決には至らないか可能性が高いです。そこで生成AI駆動型の開発では
いくつかのライブラリで試してみる
うまくいきそうな場合に深堀りする
うまくいかない場合はそもそも実現可能なことをやろうとしているのか検討する
粒度を落とす
といった対応で開発を進めていくことになります。またうまくいかない場合は、検索も活用するようにしましょう。検索して実例があるか調べるなどをしたほうが解決が早い場合があります。
世の中には先人がいますし、コードや結果を公開してまとめている人がいます。例えば「Google Colab 画像収集」で検索すると次のように表示されます。
うまくいかない原因
どこに保存されるか問題
Google Colabで保存された画像などのファイルは左側のフォルダーのアイコンをクリックすることで確認が可能です。
フォルダーのアイコンをクリックし展開すると次のように表示されます。
ファイル名をダブルクリックすることで画像を閲覧することが可能です。imagesというフォルダーに保存されましたが、保存先を変更するには例えば
# 画像を保存するディレクトリ
save_dir = 'images'
の部分をicrawler_imagesの場合は、icrawler_imagesなどと変更します。
Google Colabの場合、一時的な作業場所(インスタンス)で作業をするため、ライブラリをインストールしたことや保存画像などは時間が立つと消えてしまいます。この問題を解決するためにはGoogle Driveに画像を保存します。生成AIに次のようにコードの修正をお願いします。
実行するとGoogle ColabからGoogle Driveを認識するためのセキュリティのダイアログボックスが表示されます。
うまくいくと次のようにGoogle DriveをGoogle Colabから参照することができます。
物体抽出ライブラリの利用
続いて認識系AIである物体抽出ライブラリを利用していみたいと思います。生成AIにどのようなライブラリがあるか聞いてみましょう。実はこの「物体抽出」というキーワードが大事でして、画像認識などをキーワードにすると機械学習用の基礎的なライブラリが提案されてしまいます。
それでは生成されたYOLOのサンプルを実行してみましょう。
img = cv2.imread('path/to/your/image.jpg')
の部分は取得した画像に変更する必要があります。Google Colabから画像を右クリックし「パスのをコピー」を行い例えば次のように書き換えます。
# 画像のロード
img = cv2.imread('/content/drive/MyDrive/icrawler_images/000001.jpg')
実行すると次のようなエラーになりました。
エラーになった場合は一度エラーメッセージを生成AIに送ってみましょう。修正コードを生成してくれます。修正コードを実行すると次のように結果が表示されます。
今回はエラーの内容を送ることで修正ができましたが、外部ライブラリは更新が早い場合があり、生成AIの学習が追いついていない場合があります。その場合は公式サイトなどにあたったほうが早い場合があります。例えばYOLOの場合は、V8(2024年6月現在)最新版のようです。
公式サイトにサンプルが出ていますので、こちらを実行してみましょう。判定した画像は直接は表示されず、runの中に保存されます。