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 5 years have passed since last update.

シンプルなデータインジェクションツール

Last updated at Posted at 2018-10-02

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']
0
1
0

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?