はじめに
こんにちは、Python初学者の皆さん。今日はPythonを使って(Jupyter notebook)、無料のAPIを使用して猫の画像データセットを作成する方法をご紹介します。この記事は初学者でも理解できるように、各ステップを詳しく説明します。さらに、必要なコードも提供し、それぞれの部分について詳しく解説します。
まず、この記事で扱う「API」とは何か、理解しましょう。APIとはApplication Programming Interfaceの略で、異なるソフトウェア間で情報をやりとりするための仕組みです。特定のウェブサイトやサービスからデータを取得する際に、APIが非常に役立ちます。今回は、写真共有サービスのUnsplashから、猫の画像を取得するためのAPIを使用します。
ただし、APIを利用する際には利用規約をよく読み、適切に利用することが重要です。特に、APIキーは個人情報と同様に扱い、他人に漏らさないように注意しましょう。また、取得したデータを商用利用する場合や大量にデータを取得する場合は、サービスの利用規約やAPIの利用制限をよく確認してください。
PythonでAPIを使用して画像データセットを作成する
必要なモジュールのインポート
まずは必要なPythonのモジュールをインポートします。今回はrequests
, os
, urllib.request
の3つのモジュールを使用します。
import requests
import os
import urllib.request
-
requests
: WebサイトなどのリソースにアクセスするためのPythonのライブラリです。今回は、APIにリクエストを送るために使用します。 -
os
: OSの機能を使うためのモジュールです。今回は、保存先のディレクトリを作るために使用します。 -
urllib.request
: URLを開き、その内容を扱うためのモジュールです。今回は、画像のURLから画像をダウンロードするために使用します。
APIキーの指定
次に、Unsplash APIを使用するためのAPIキーを指定します。自分のAPIキーを以下のように設定します。
api_key = '自分のキー'
APIキーは Unsplashのウェブサイト から取得できます。取得方法がわからない場合は、 Digitalstage .inc 様 の creater blog にわかりやすい解説が記載されているので、参考にしてみてください。APIキーは個人的なものであり、他人と共有しないように注意してください。
画像の取得
以下に示すfetch_images
関数は、指定したキーワードで画像を検索し、その結果から画像のURLを取得します。関数の引数は以下の通りです。
-
query
: 検索するキーワード -
page
: 取得するページ番号(省略可能、デフォルトは1) -
per_page
: 1ページあたりに取得する画像の数(省略可能、デフォルトは10)
def fetch_images(query, page=1, per_page=10):
url = f'https://api.unsplash.com/search/photos?query={query}&page={page}&per_page={per_page}'
headers = {'Authorization': f'Client-ID {api_key}'}
response = requests.get(url, headers=headers)
data = response.json()
image_urls = [item['urls']['small'] for item in data['results']]
return image_urls
この関数ではまず、検索クエリとページ番号、1ページあたりの画像数を使ってAPIのURLを作成します。次に、ヘッダーにAPIキーを指定します。このヘッダーはAPIにリクエストを送る際に必要となります。
requests.get
関数を使ってAPIにリクエストを送り、その結果を取得します。取得した結果はJSON形式なので、response.json()
を使ってPythonの辞書型に変換します。
最後に、取得したデータから画像のURLを抽出し、それらをリストとして返します。このとき、各画像にはいくつかのサイズのバージョンがありますが、ここではsmall
サイズのURLを使用します。
画像の保存
以下に示すsave_images
関数は、指定したURLの画像をダウンロードし、指定したディレクトリに保存します。関数の引数は以下の通りです。
-
urls
: 保存する画像のURLのリスト -
save_dir
: 画像を保存するディレクトリのパス
def save_images(urls, save_dir):
if not os.path.exists(save_dir):
os.makedirs(save_dir)
for i, url in enumerate(urls):
response = urllib.request.urlopen(url)
data = response.read()
with open(os.path.join(save_dir, f'cat_img{i}.jpg'), mode="wb") as f:
f.write(data)
この関数ではまず、指定したディレクトリが存在しない場合は作成します。次に、URLのリストをループして各URLから画像をダウンロードします。
ダウンロードした画像データはバイナリ形式なので、ファイルをバイナリ書き込みモード("wb"
)で開き、データを書き込みます。画像ファイルの名前は、リストのインデックス(i
)を使ってcat_img0.jpg
, cat_img1.jpg
, cat_img2.jpg
...といった形で生成します。
画像の検索と保存の実行
以上で必要な関数の定義が完了しました。最後にこれらの関数を使って、猫の画像を検索し、保存します。
# 猫の画像を検索します。
image_urls = fetch_images('cat', page=1, per_page=10)
# 画像を保存します。
save_images(image_urls, 'cats')
ここでは、fetch_images
関数を使って猫の画像のURLを10件取得し、そのURLをsave_images
関数に渡して画像をダウンロードし、cats
ディレクトリに保存します。
以上が、Unsplash APIを利用して特定のキーワードの画像を検索し、ダウンロードするためのPythonコードです。
まとめ
この記事では、Pythonと無料のAPIを使用して猫の画像データセットを作成する方法を紹介しました。初学者でも理解できるように、必要なモジュールの説明から始め、APIキーの取得方法、画像の取得と保存方法について詳しく解説しました。
APIを利用することで、簡単に大量のデータを取得することが可能ですが、利用規約や法的な注意点についても理解しておくことが重要です。
これらの知識と技術を活用して、さまざまなデータを自由に取得し、Pythonのスキルをさらに深めていきましょう!
最後に
最後まで記事を読んでいただきありがとうございます!
この記事があなたのPythonの学習に少しでも役立ったら、"いいね"を押していただけると嬉しいです!これからも役立つ情報をお届けするので、ぜひフォローお願いいたします!。
また、私が独学でPythonエンジニアになった方法を元に、1年間の独学ロードマップとスケジュールを下記に紹介していますので、どうぞご覧ください!
1年でPythonエンジニアになる!独学でスキルアップするためのロードマップとスケジュール