LoginSignup
2

More than 3 years have passed since last update.

pythonの機械学習ライブラリ(scikit-learn)を用いて、県旗を分類する

Last updated at Posted at 2019-05-26

目的

pythonの機械学習ライブラリ(scikit-learn)を用いて、画像データを分類する事ができます。
今回は日本の県旗の分類を試みました。

本取り組みを行う上で、こちらのサイトを参考にさせて頂きました。

準備

・python scikit-learnライブラリ
都道府県旗-wikipedia の画像データ
(47都道府県+東京都シンボル旗=48個の旗データを取得します)
スクリーンショット 2019-04-29 19.06.37.png
・フォルダ
例に習って下記3フォルダを事前に作成します。
 flag_origin :元データ(48個)
 flag_convert:サイズ変換後データ(48個)
 flag_group :分類後データ(5クラス)
スクリーンショット 2019-04-29 19.09.52.png

コード

$ python resize.py
resize.py
import os
from PIL import Image

for path in os.listdir('./flag_origin'):
    img = Image.open(f'./flag_origin/{path}')
    img = img.convert('RGB')
    img_resize = img.resize((240, 160))
    img_resize.save(f'./flag_convert/{path}.jpg')
$ python classify.py
classify.py
import os
import shutil
import numpy as np
from skimage import data
from sklearn.cluster import KMeans

feature = np.array([data.imread(f'./flag_convert/{path}') for path in os.listdir('./flag_convert')])
feature = feature.reshape(len(feature), -1).astype(np.float64)

model = KMeans(n_clusters=5).fit(feature)

labels = model.labels_

for label, path in zip(labels, os.listdir('./flag_convert')):
    os.makedirs(f"./flag_group/{label}", exist_ok=True)
    shutil.copyfile(f"./flag_origin/{path.replace('.jpg', '')}", f"./flag_group/{label}/{path.replace('.jpg', '')}")
    print(label, path)

テスト

5クラスに分けた結果、下記のようになりました。

▪️クラス0 薄い青系
左から、福岡、兵庫、石川、滋賀、山形
class0.png

▪️クラス1 背景白い系
左から、東京都シンボル旗、青森、岐阜、鹿児島、神奈川、長崎、奈良、大分
沖縄、埼玉、富山、和歌山
class1.png

▪️クラス2 赤系
左から、愛知、秋田、福島、広島、高知、熊本、長野、新潟
島根、山口
class2.png

▪️クラス3 緑系
左から、愛媛、三重、宮崎、栃木
class3.png

▪️クラス4 その他濃い色
左から、千葉、福井、群馬、北海道、茨城、岩手、香川、京都
岡山、大阪、佐賀、静岡、徳島、東京都、鳥取、山梨
宮城

class4.png

人の目で見ても大体納得がいく位には分類する事ができました。
(個人的に、福岡の県旗が素敵に感じます)

CodingError対策

ImportError: cannot import name '_validate_lengths' from 'numpy.lib.arraypad' (/anaconda3/lib/python3.7/site-packages/numpy/lib/arraypad.py)

こちらのサイトを参照し、scikit-imageを最新にすれば良いとの事のため、下記の通りupgradeして解決。

$ pip install --upgrade scikit-image

参考

都道府県旗
scikit-learnで国旗画像をクラスタリングして似ているものを探す

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
2