こんにちはでめきんです。
ニューラルネットワークコンソールでデータセットを指定する際にCSVファイルにパスを入力していきます。
しかし、これってどうすれば効率的にCSVファイルを作成できるかなと考えてしまいますよね。特に、学習用のデータって枚数がとてつもなく多くなることがあるので・・・・
そこで、今回簡単にデータセットのCSVファイルを作成できるコードを作成してみました。
ちなみに、現在セマンテックセグメンテーションをやっているので、元画像と元画像から領域抽出をした画像のパスを記したCSVファイルを作成していきます。
コードの流れ
コードの流れです。
ファイルダイヤログを開いてCSVに登録するファイルを選択、リスト格納します。これを2回繰り返します。
続いて、空のCSVファイルを作成し。
その後、for文を用いてリストの要素を一つずつ取り出してファイルに書き込みをしていく流れとなります。
コードを作成
いつも通り、ファイル取り込みのモジュールをインポートします。
ファイル取り込みのモジュールは過去の記事にありますのでこちらを参照ください。
そして、作成するCSVのファイル名ですが作成日時をファイル名として作成し、作成場所はルートディレクトリ(作成するプログラムがあるフォルダ)にしたいと思います。
まずは、ライブラリーをインポートしますが、上記流れから使用するライブラリーは現在の時間を取得する’datetime’、CSVの取り扱いをする’csv’、後はファイルを選択する自作の’fileselect’のモジュールとなります。
1 2 3 4 5 |
import fileselect as fs import datetime import csv |
つづいて、CSVに書き込むファイルを選択するコードになります。
1 2 3 4 |
filenames1 = fs.many_files() filenames2 = fs.many_files() |
CSVファイルを作成しますが、ファイル名は現在の時刻としましたのでまずは現在の時刻を変数に取り込みます。そして、その変数を用いて空のCSVファイルを作成します。
1 2 3 4 |
now = datetime.datetime.now() f_name = now.strftime(‘%Y%m%d_%H%M%S’) + ‘.csv’ |
空のCSVファイルが作成できましたので、今度は書き込みになります。
書き込みを行うにはまず、ファイルを開かなければなりません。
1 2 3 |
file = open(f_name, ‘a’, newline=“”) |
その後、書き込みをしていきます。まず、見出し行を書き込みし、その後for文を用いてファイルパスを順に書き込みをしていき最後にファイルを閉じます。
1 2 3 4 5 6 7 8 9 |
writer = csv.writer(file) writer.writerow([’x:imageIn’, ‘y:imageOut’]) for i in range(len(filenames1)): writer.writerow ( [ filenames1[i] , filenames2[i] ]) file.close() |
以上で終了となります。
完成したコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import fileselect as fs import datetime import csv filenames1 = fs.many_files() filenames2 = fs.many_files() now = datetime.datetime.now() f_name = now.strftime(‘%Y%m%d_%H%M%S’) + ‘.csv’ file = open(f_name, ‘a’, newline=“”) writer = csv.writer(file) writer.writerow([’x:imageIn’, ‘y:imageOut’]) for i in range(len(filenames1)): writer.writerow ( [ filenames1[i] , filenames2[i] ]) file.close() |
お疲れ様でした。