data source
機械学習モデルにデータを与えるパイプラインを一般化するために作りました。
srcはこちらです。
- 様々なフォーマット(csv, 画像, webcam, 動画)からのデータの吐き出し
- 訓練データとテストデータの分割
- 複数データ・セットを包括して一つのデータ・セットとして保持する
ということができます。
Installing
pip install -r requirements.txt
使い方
モジュールをインポートします。
import cv2
import data_source_factory as dsf
from numpy import *
画像セットの読み込み
現状は以下の様なディレクトリ構成をサポートしています。
sample/directory_type1
├── cat00.jpg
├── cat01.jpg
├── cat02.jpg
├── cat03.jpg
├── cat04.jpg
├── cat05.jpg
├── cat06.jpg
├── cat07.jpg
├── cat08.jpg
├── cat09.jpg
└── cat10.jpg
sample/directory_type2
├── a
│ ├── cat00.jpg
│ ├── cat01.jpg
│ └── cat02.jpg
├── b
│ ├── cat00.jpg
│ ├── cat01.jpg
│ └── cat02.jpg
├── c
│ ├── cat00.jpg
│ ├── cat01.jpg
│ └── cat02.jpg
└── d
├── cat00.jpg
├── cat01.jpg
└── cat02.jpg
下記のようにディレクトリパスを定義します。
images_1 = dsf.DataSourceFactory().create('sample/directory_type1')
images_2 = dsf.DataSourceFactory().create('sample/directory_type2')
このクラスはイテレータ属性がついており、for分で回すことができます。
print('images 1:')
for i in images_1:
print(i)
print('images 2:')
for i in images_2:
print(i)
結果はPIL.Image形式で返ります。
images 1:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x374 at 0x10DEC2AC8>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=300x280 at 0x10DF5E630>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=312x396 at 0x10DF54518>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x414 at 0x10DF5E630>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=499x375 at 0x10DF5E2E8>
images 2:
[<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x374 at 0x10DF5E668>, <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=300x280 at 0x10DF5E748>, <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=312x396 at 0x10DF5E7B8>]
[<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x374 at 0x10DF5E6A0>, <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=300x280 at 0x10DF5E828>, <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=312x396 at 0x10DF5E898>]
動画の読み込み
現在はavi, mov mp4形式に対応しています。ただし内部でOpenCVを使っているため、そちらで使えるよう設定されていることが必要です。
以下のようにして動画を読み込みます。
dog_movie = dsf.DataSourceFactory().create('sample/dog.mov')
データの長さはlen()で確認できます。
len(dog_movie)
画像セットと同様for文で回せます。下記のようにすることで動画再生ができます(ただし、動画再生が目的ではないので遅いです)。
for i in dog_movie:
cv2.imshow("dog", array(i)[...,::-1])
cv2.waitKey(1)
DataSouceはWeb cameraに対応しています。カメラ番号をpathとして入力すると、カメラが起動します。
こちらも下記のようにして動画にできます(遅いです)。
for i in web_cam:
cv2.imshow("web cam", array(i)[...,::-1])
cv2.waitKey(1)
CSVファイルの読み込み
例えば、以下のようなiris.csvを読み込みます。
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
5.4,3.9,1.7,0.4,setosa
4.6,3.4,1.4,0.3,setosa
5,3.4,1.5,0.2,setosa
4.4,2.9,1.4,0.2,setosa
:
:
必要なカラム名をcolumn_lst
に入力します。
#select what columns extract from csv file as to input 'column_lst'
csv = dsf.DataSourceFactory().create('sample/iris.csv', column_lst=['sepal_length', 'species'])
下記のように指定したカラムのデータが吐き出されます。
for i, line in enumerate(csv):
print(line)
if i == 10: break
[5.1 'setosa']
[4.9 'setosa']
[4.7 'setosa']
[4.6 'setosa']
[5.0 'setosa']
[5.4 'setosa']
[4.6 'setosa']
[5.0 'setosa']
[4.4 'setosa']
[4.9 'setosa']
[5.4 'setosa']