0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonとUnsplash APIを利用した猫の画像データセット作成入門

Last updated at Posted at 2023-05-13

はじめに

 こんにちは、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エンジニアになる!独学でスキルアップするためのロードマップとスケジュール

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?