SZI-Smieciarka/tworzenie_danych_AO.py

69 lines
1.9 KiB
Python

from sklearn.preprocessing import LabelEncoder
import numpy as np
import mahotas
import cv2
import os
import h5py
rozmiar_zdj = tuple((500, 500))
sciezka_do_zdj = "resources/smieci_stare"
h5_dane = 'parametry_zdjec.h5'
h5_etykiety = 'etykiety.h5'
def wyznaczHuMomenty(zdj):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
return momenty
def wyznaczHaralick(zdj):
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
return haralick
def wyznaczHistogram(zdj, mask=None):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
cv2.normalize(hist, hist)
return hist.flatten()
klasy = os.listdir(sciezka_do_zdj) # glass metal paper plastic
klasy.sort()
dane = [] # parametry kazdego zdjecia
etykiety_zdj = [] # typ kazdego zdjecia
for klasa in klasy:
katalog = os.path.join(sciezka_do_zdj, klasa)
for plik in os.listdir(katalog):
zdj = cv2.imread(os.path.join(katalog, plik)) # odczyt zdjecia
zdj = cv2.resize(zdj, rozmiar_zdj) # zmiana rozmiaru
# wyznaczanie parametrow zdjecia
momenty = wyznaczHuMomenty(zdj)
haralick = wyznaczHaralick(zdj)
histogram = wyznaczHistogram(zdj)
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
etykiety_zdj.append(klasa)
dane.append(wiersz)
# ilosc wszystkich etykiet to 1987 - tyle ile wszystkich zdj
le = LabelEncoder()
znormalizowane_etykiety = le.fit_transform(etykiety_zdj) # normalizacja do 0-glass 1-metal itp.
h5f_dane = h5py.File(h5_dane, 'w')
h5f_dane.create_dataset('dataset_1', data=np.array(dane))
h5f_etykiety = h5py.File(h5_etykiety, 'w')
h5f_etykiety.create_dataset('dataset_1', data=np.array(znormalizowane_etykiety))
h5f_dane.close()
h5f_etykiety.close()