Flickr APIで取得した画像データをNumpy形式に変換してファイルに保存
Flickr APIで取得した画像データから関係のない画像を削除してクリーニングしたデータをnumpy形式のデータに変換してファイルに保存していく。
Flickr APIを使用して画像の取得に関しては下記の記事で取得している。
hanamichi-sukusuku.hatenablog.com
実行結果
imageディレクトリにphotos.npというファイル名でNumpy形式の画像データが格納される。
必要な変数の定義
main()関数の実行
main()関数、各フォルダの画像データを読み込み、glob_files()関数を呼び出しnumpy形式に変換してファイルに保存
glob_files()関数にファイルのパスとラベルデータを渡してx,yデータを生成。
np.savez()で複数のnumpy配列を保存。(ファイルパス, xデータ, yデータ)。
一つのnumpy配列の場合はnp.save()。
glob_files()関数、引数で受け取ったファイルパスの画像データをnumy形式に変換してx(画像データ),y(ラベルデータ)を作成
glob.glob()で引数で受け取ったパスの.jpgを含むファイル名を全て取得。
random.shuffle()でリストをランダムに並べ替える。
for文の中では100枚のデータを使用するのでif文で100枚を超えた時処理を止めるようにしている。
Pillowは画像処理ライブラリ。ここではPillowライブラリのImage関数を使用して画像の読み込みや色空間の変換を行っているがopencvのような高度な画像処理はできない。ただ、リサイズやトリミングなど簡単な処理はopencvを使用するよりも簡単に実装できるため状況によって使い分けるといい。
Image.open(読み込みたい画像のパス)
img.convert(変換したい色空間の指定)
img.resize*1でサイズ指定
np.asarray()で変換したいオブジェクトを指定。np.array()でもnp.asarray()でもnumpy形式への変換はできる。違いとしては引数に指定したオブジェクトが変更された時それを反映されるかされないか。
例(np.asarrayの引数がnp.ndarrayの時でないと下記の違い発生しない)
np.asarray
neko = [0,1,2,3]
neko = np.array(neko)
n = np.asarray(neko)
neko[0] = 100
print(neko)
print(n)
>>[100,1,2,3]
>>[100,1,2,3]
同期的に元のデータが変更すればasarrayで変換したデータも更新される。
np.array
neko = [0,1,2,3]
neko = np.array(neko)
n = np.array(neko)
neko[0] = 100
print(neko)
print(n)
>>[100,1,2,3]
>>[0,1,2,3]
np.arrayで変換したデータと元データは別物として扱われる。
*1:width, height