ChatGPTに登録
まずは、チャットGPTに登録が必要です。
まだ登録していない人は、早くした方がいいです。めちゃ楽になります。
https://chat.openai.com/
「チャットGPT ログイン」
などで検索したらいくらでも記事が出てくるので、登録方法は割愛します。
先日社内で勉強会をやりました。
ポイントだけまとめておきます。
・Googleでログインしたらカンタン
・電話番号を聞かれるので、手持ちのスマホを登録すること(あとで認証コードがSMSで送信され、初回ログインで必要になります)ビビッて他の電話番号にしないように!
プロンプトについて
よく、チャットGPTにあなたは〇〇の専門家です
とか、#制約条件: #入力文: #出力形式:
みたいにしている動画や解説をよく見ますが、実際にやってみると、そこまで重要じゃないかなと思います。(プロンプトとは、チャトGPTに出す指示のことです)
チャットGPTに渡してもいいのか渡してはいけないのかはわかりませんが、APIのキーや自分が使っている環境だったり、動かしたいパスをそのまま投げると、その通りにコードを記載してくれるので、めちゃ快適です。
例えば、以下のように聞いています。
実際の活用例1 写真の背景削除
Pythonでrembgを使い、画像の背景を削除するコードをかいてください
rembg
とは、画像から背景を削除するためのツールで、AIとディープラーニングを利用しています。このツールはPythonパッケージとして利用可能で、コマンドラインツールやPython APIとして使用することができます。
以下のPythonコードは、rembg
を使用して画像の背景を削除するものです。まず初めに、rembg
をインストールする必要があります。これはコマンドラインからpip install rembg
と入力してインストールできます。
from rembg import remove
import numpy as np
import io
from PIL import Image
input_path = 'input.png'
output_path = 'output.png'
def remove_background(input_path, output_path):
with open(input_path, 'rb') as img_file:
img = img_file.read()
# `remove`関数は、バイト列の入力画像から背景を削除します
img_no_bg_bytes = remove(img)
# バイト列の画像をPIL.Imageオブジェクトに変換します
img_no_bg = Image.open(io.BytesIO(img_no_bg_bytes))
# 結果をPNG形式で保存します
img_no_bg.save(output_path, "PNG")
remove_background(input_path, output_path)
このコードは、入力画像の背景を削除し、出力画像をPNG形式で保存します。input_path
は入力画像のパス、output_path
は背景が削除された画像の保存先を表しています。
なお、rembg
はGPUを必要とするため、このコードはGPUをサポートする環境で実行することが推奨されます。また、ライブラリの詳細やアップデートは公式ドキュメンテーションをご覧ください。
上記を実行してみるとエラーがでました。それをまたChatGPTへ確認します。この時のポイントというか、すごいところは、エラーメッセージを貼り付けるだけで、上記の続きから回答を得られるということです!
File "/Users/*****/Documents/python/python_app/pyapp/lib/python3.9/site-packages/PIL/Image.py", line 2410, in save fp = builtins.open(filename, "w+b") IsADirectoryError: [Errno 21] Is a directory: '/Users/******/Documents/python/python_app/cut_app/'
このエラーメッセージは、Pythonがsave
関数を使用してファイルを保存しようとしたときに、指定したパスがディレクトリであるために発生します。つまり、ファイルではなくディレクトリへの書き込みを試みたため、このエラーが発生しています。
save
関数の引数output_path
には、出力画像の完全なファイル名(ディレクトリのパス+ファイル名)を指定する必要があります。おそらく現在、ディレクトリのパスのみを指定しているため、この問題が発生していると考えられます。
したがって、以下のようにoutput_path
を修正してみてください:
output_path = '/Users/*****/Documents/python/python_app/cut_app/output.png'
上記のように、パスの最後に具体的なファイル名(ここではoutput.png
)を追加します。このようにすることで、画像は指定したディレクトリ内のoutput.png
という名前のファイルとして保存されます。
上記のコードで実際に動かしてみると、見事成功!
ただ、ファイルを1枚1枚指示するのは面倒なので、一気にやりたいと思ったので、以下のように質問をしました。
Inputパスをフォルダの中にある写真すべて、という形にしたいです。アウトプットの画像名は、元のファイル名に透過というファイル名を拡張子の前につけたいです
Pythonの os
モジュールを使用することで、指定されたディレクトリ内のすべてのファイルを処理することができます。そして、新しいファイル名を作成するためには、os.path.splitext
関数を使用して元のファイル名から拡張子を分割し、新しい名前を作成します。以下に、要件に合わせて更新したコードを示します。
from rembg import remove
import numpy as np
import io
from PIL import Image
import os
input_dir = '/path/to/input/directory/'
output_dir = '/path/to/output/directory/'
def remove_background(input_dir, output_dir):
# 入力ディレクトリ内のすべてのファイルを処理します
for filename in os.listdir(input_dir):
if filename.endswith('.png') or filename.endswith('.jpg'): # PNGとJPGファイルのみを処理します
with open(os.path.join(input_dir, filename), 'rb') as img_file:
img = img_file.read()
img_no_bg_bytes = remove(img)
img_no_bg = Image.open(io.BytesIO(img_no_bg_bytes))
# 元のファイル名から拡張子を分割します
base_filename, file_extension = os.path.splitext(filename)
# 新しいファイル名を作成します
new_filename = f"{base_filename}_透過{file_extension}"
# 出力ディレクトリに新しいファイル名で保存します
img_no_bg.save(os.path.join(output_dir, new_filename), "PNG")
remove_background(input_dir, output_dir)
このコードは、指定された入力ディレクトリ内のすべての.pngと.jpgファイルの背景を削除し、指定された出力ディレクトリに新しい名前で保存します。新しいファイル名は、元のファイル名に"_透過"が追加されています。ただし、このコードはサブディレクトリ内のファイルは処理しません。入力ディレクトリ内のすべてのサブディレクトリも探索したい場合は、これに対応した追加のコードが必要になります。
また、出力ディレクトリは既に存在している必要があります。出力ディレクトリが存在しない場合、このコードはエラーを引き起こします。
上記を実行してみると、実際にフォルダ内に入っている写真の背景が切り抜かれて、人物だけが残りました。
まとめ
チャットGPTを使うことで、今までエラーを調べていた時間が思いっきり短縮されていきます。よりスピード感をもって開発を進められます。面倒なことや、やりたいことは、すべてチャットGPTに聞いていますが、今のところ、完璧にやってくれます。
一部の人だけのものではなく、これからは、だれでも 簡単に めんどうなことを自動化する時代になってくるんだろうなと思います。