QA@IT

顔画像のクラスタリングをしたい

566 PV

Python3を用いて顔画像をクラスタリングできるプログラムを作成したいです。
既に国旗画像をクラスタリングできるプログラムはあって、それを顔画像にも応用したいです。
以下がソースコードです。

import os
import shutil
import numpy as np
from PIL import Image
from skimage import data
import pandas as pd
from sklearn.cluster import KMeans


for path in os.listdir('C:/Clustering2/human_origin'):
    img=Image.open(f'C:/Clustering2/human_origin/{path}')
    img=img.convert('RGB')
    img_resize=img.resize((200,100))
    img_resize.save(f'C:/Clustering2/human_convert/{path}.jpg')


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


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


labels=model.labels_


for label,path in zip(labels,os.listdir('C:/Clustering2/human_convert')):
    os.makedirs(f"C:/Clustering2/human_group/{label}",exist_ok=True)
    shutil.copyfile(f"C:/Clustering2/human_origin/{path.replace('.jpg','')}",f"C:/Clustering2/human_group/{label}/{path.replace('.jpg','')}")
    print(label,path)

以下がエラーコードです。

FileNotFoundError: [Errno 2] No such file or directory: 'C:/Clustering2/human_origin/img_1022'

画像に問題があると思い、再三見直しましたが解決できていない状態です。

画像の読み込み、リサイズ、学習、ラベル付けまでは上手くいくのですが、ラベル毎の振り分けがうまくいきません。

回答

国旗画像の場合は元の画像が.png形式であったため、特徴抽出する前に.jpg形式に変更する処理をしていて、今回は顔画像のクラスタリングで.jpg形式のままだったので拡張子を変更する処理をカットしました。その結果、無事解決することができました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。