簡単機械学習③ 画像データの収集と整理

「まずは動かす」って大事。とりあえず動かして「難しいことはそのあと考えればいいや」のマインド。認識させる対象物はシンプルなのがいいでしょう。私は、仕事で使うために、やや複雑な物を対象にしたので「最初は、うまくは行かないだろうなー」っと思っていたけど。。。が、しかし割と上手く行きました。

手順1 画像フォルダを作る

(1)親のフォルダ「dataset」を作って、その下に分類ラベルごとのフォルダを作る。

bash

  親フォルダ----dataset
                └ 00_toyA
                └ 01_toyB
                └ 02_toyC
                └ 03_toyD
                └ 04_toyE

(2)分類ラベルごとのフォルダの下に、関係する画像ファイルをブチ込む   

 画像の色とサイズは統一し、ファイルサイズはできるだけ小さいほうが良いと思います。色があまり関係なければグレースケールにするといいかもですね。画像数は、各100~200枚はあった方がいいでしょう。数は揃えた方がいいかな。それと、できたら背景も合わせるといいかもです。

手順2 必要ならpython を使って画像の整理

 ここで、画像を整理します。最初から整理されていたらここは不要ですが、適当に撮ったら場合は、このスクリプトを動かせばOKです。画像サイズを400×200にして、グレースケールに保存します。保存先は「dataset01」でして、分類ラベルは変更前「dataset」と同じです。このスクリプトは「dataset」と同じフォルダに置く。

python

###############################################################
#      画像の軽量化変換スクリプト(ご参考)
###############################################################

import os
import cv2

# --- フォルダ設定 ---
input_base = "dataset"      # 元画像場所
output_base = "dataset01"   # 変換画像保存先

# --- 出力画像サイズ ---
output_width = 400
output_height = 200

# --- クラス名のリスト(フォルダ名に対応)---
classes = ["00_toyA", "01_toyB", "02_toyC", "03_toyD", "04_toyE"]

# --- 各クラスの画像を処理 ---
for cls in classes:
    input_folder = os.path.join(input_base, cls)
    output_folder = os.path.join(output_base, cls)
    os.makedirs(output_folder, exist_ok=True)  # 保存先フォルダ作成

    for filename in os.listdir(input_folder):
        if filename.lower().endswith(".png"):
            # --- 画像読み込み ---
            img_path = os.path.join(input_folder, filename)
            img = cv2.imread(img_path)

            # --- グレースケールに変換 ---
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

            # --- サイズ変更(400×200) ---
            resized = cv2.resize(gray, (output_width, output_height))

            # --- 保存先パスの生成 ---
            out_path = os.path.join(output_folder, filename)

            # --- 画像保存(PNG形式) ---
            cv2.imwrite(out_path, resized)

            print(f" 保存完了!: {out_path}")