test
This commit is contained in:
commit
3c354c2357
239
loadImages.py
Normal file
239
loadImages.py
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
from skimage.io import imread
|
||||||
|
import cv2 as cv
|
||||||
|
from pathlib import Path
|
||||||
|
import random
|
||||||
|
from shutil import copyfile, rmtree
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
import seaborn as sns
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
import matplotlib
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
from keras.preprocessing import image
|
||||||
|
from sklearn.model_selection import GridSearchCV, train_test_split
|
||||||
|
import warnings
|
||||||
|
warnings.filterwarnings('ignore')
|
||||||
|
pd.set_option('display.max_columns', 30*30 + 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import tensorflow as tf
|
||||||
|
def load_train_images(container_path, newSize=(64, 64), interpol=cv.INTER_AREA, colorConv=None):
|
||||||
|
'''
|
||||||
|
Obraz jest wczytywany przez funkcję imread z skimage (zwraca ndr)
|
||||||
|
|
||||||
|
:param container_path: katalog z podkatalogami oznaczającymi kategorie do klasyfikacji
|
||||||
|
:param newSize: docelowey rozmiar obrazu dla funkcji resize z OpenCV
|
||||||
|
:param interpol: typ interpolacji rozmiaru obrazu dla funkcji resize z OpenCV
|
||||||
|
:param colorConv: stała konwersji - konversja przez funkcję cvtColor z OpenCV
|
||||||
|
:return:
|
||||||
|
'''
|
||||||
|
|
||||||
|
image_dir = Path(container_path)
|
||||||
|
categories_name = []
|
||||||
|
for file in os.listdir(image_dir):
|
||||||
|
d = os.path.join(image_dir, file)
|
||||||
|
if os.path.isdir(d):
|
||||||
|
categories_name.append(file)
|
||||||
|
|
||||||
|
folders = [directory for directory in image_dir.iterdir() if directory.is_dir()]
|
||||||
|
|
||||||
|
train_img = []
|
||||||
|
categories_count=[]
|
||||||
|
labels=[]
|
||||||
|
for i, direc in enumerate(folders):
|
||||||
|
count = 0
|
||||||
|
for obj in direc.iterdir():
|
||||||
|
if os.path.isfile(obj) and os.path.basename(os.path.normpath(obj)) != 'desktop.ini':
|
||||||
|
labels.append(os.path.basename(os.path.normpath(direc)))
|
||||||
|
count += 1
|
||||||
|
img = imread(obj)#zwraca ndarry postaci xSize x ySize x colorDepth
|
||||||
|
if colorConv:# przykładowo: cv.COLOR_BGR2GRAY
|
||||||
|
img = cv.cvtColor(img, colorConv)# zwraca ndarray, , domyślnie rgb zwraca jako bgr
|
||||||
|
img = cv.resize(img, newSize, interpolation=interpol)# zwraca ndarray
|
||||||
|
img = img / 255#normalizacja
|
||||||
|
train_img.append(img)
|
||||||
|
categories_count.append(count)
|
||||||
|
X={}
|
||||||
|
X["data"] = np.array(train_img)
|
||||||
|
X["categories_name"] = categories_name
|
||||||
|
X["categories_count"] = categories_count
|
||||||
|
X["labels"]=labels
|
||||||
|
return X
|
||||||
|
|
||||||
|
def load_test_images(container_path, newSize=(64, 64), interpol=cv.INTER_AREA, colorConv=None):
|
||||||
|
'''
|
||||||
|
Obraz jest wczytywany przez funkcję imread z skimage (zwraca ndr)
|
||||||
|
|
||||||
|
:param container_path: katalog z podkatalogami oznaczającymi kategorie do klasyfikacji
|
||||||
|
:param newSize: docelowey rozmiar obrazu dla funkcji resize z OpenCV
|
||||||
|
:param interpol: typ interpolacji rozmiaru obrazu dla funkcji resize z OpenCV
|
||||||
|
:param colorConv: stała konwersji - konversja przez funkcję cvtColor z OpenCV
|
||||||
|
:return:
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
image_path = Path(container_path)
|
||||||
|
|
||||||
|
labels_path = image_path.parents[0] / 'test_labels.json'
|
||||||
|
|
||||||
|
#with labels_path.open("r", encoding ="utf-8") as f:
|
||||||
|
jsonString = labels_path.read_text()
|
||||||
|
objects = json.loads(jsonString)
|
||||||
|
|
||||||
|
print(objects)
|
||||||
|
|
||||||
|
categories_name = []
|
||||||
|
categories_count=[]
|
||||||
|
count = 0
|
||||||
|
c = objects[0]['value']
|
||||||
|
for e in objects:
|
||||||
|
if e['value'] != c:
|
||||||
|
print(count)
|
||||||
|
print(c)
|
||||||
|
categories_count.append(count)
|
||||||
|
c = e['value']
|
||||||
|
count = 1
|
||||||
|
else:
|
||||||
|
count += 1
|
||||||
|
if not e['value'] in categories_name:
|
||||||
|
categories_name.append(e['value'])
|
||||||
|
|
||||||
|
categories_count.append(count)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
test_img = []
|
||||||
|
|
||||||
|
labels=[]
|
||||||
|
for e in objects:
|
||||||
|
p = image_path / e['filename']
|
||||||
|
img = imread(p)#zwraca ndarry postaci xSize x ySize x colorDepth
|
||||||
|
if colorConv:# przykładowo: cv.COLOR_BGR2GRAY
|
||||||
|
img = cv.cvtColor(img, colorConv)# zwraca ndarray, , domyślnie rgb zwraca jako bgr
|
||||||
|
img = cv.resize(img, newSize, interpolation=interpol)# zwraca ndarray
|
||||||
|
img = img / 255#normalizacja
|
||||||
|
test_img.append(img)
|
||||||
|
labels.append(e['value'])
|
||||||
|
|
||||||
|
|
||||||
|
X={}
|
||||||
|
X["data"] = np.array(test_img)
|
||||||
|
X["categories_name"] = categories_name
|
||||||
|
X["categories_count"] = categories_count
|
||||||
|
X["labels"]=labels
|
||||||
|
return X
|
||||||
|
|
||||||
|
|
||||||
|
def gen_train_test(container_dir):
|
||||||
|
'''
|
||||||
|
Zwraca podkatalogi train i test wewnątrz katalogu z listą podkatalogów oznaczających katagorie
|
||||||
|
Podkatalog train ma strukturę identyczną z oryginalną (podkatalogi kategorii)
|
||||||
|
Podkatalog test zawiera listę plików testowych i plik .csv z dwukolumnową kolumną: nazwa pliku, nazwa klasy
|
||||||
|
:param X:
|
||||||
|
:return:
|
||||||
|
'''
|
||||||
|
image_path = Path(container_dir)
|
||||||
|
categories_name = []
|
||||||
|
for file in os.listdir(image_path):
|
||||||
|
d = os.path.join(image_path, file)
|
||||||
|
if os.path.isdir(d):
|
||||||
|
categories_name.append(file)
|
||||||
|
|
||||||
|
folders = [directory for directory in image_path.iterdir() if directory.is_dir()]#zwraca listę obiektów Path
|
||||||
|
|
||||||
|
train_test_image_path = image_path.absolute().parents[0] / 'train_test_sw'
|
||||||
|
|
||||||
|
if not train_test_image_path.is_dir():
|
||||||
|
train_test_image_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
train_image_path = train_test_image_path / 'train_sw'
|
||||||
|
test_image_path = train_test_image_path / 'test_sw'
|
||||||
|
|
||||||
|
if train_image_path.is_dir():
|
||||||
|
rmtree(train_image_path)
|
||||||
|
|
||||||
|
if test_image_path.is_dir():
|
||||||
|
rmtree(test_image_path)
|
||||||
|
|
||||||
|
train_image_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
test_image_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
labels = []
|
||||||
|
|
||||||
|
for i, direc in enumerate(folders):
|
||||||
|
lf = list(direc.glob('*'))
|
||||||
|
count = len(lf)
|
||||||
|
train_filenames = random.sample(lf, int(0.8*count))
|
||||||
|
|
||||||
|
train_category_image_path = train_image_path / direc.parts[len(direc.parts)-1]
|
||||||
|
|
||||||
|
train_category_image_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
for src_path in train_filenames:
|
||||||
|
dest_path = train_image_path / src_path.parts[len(src_path.parts)-2] / src_path.parts[len(src_path.parts)-1]
|
||||||
|
copyfile(src_path,dest_path)
|
||||||
|
|
||||||
|
|
||||||
|
for src_path in direc.glob('*'):
|
||||||
|
if not src_path in train_filenames:
|
||||||
|
dest_path = test_image_path / src_path.parts[len(src_path.parts)-1]
|
||||||
|
copyfile(src_path,dest_path)
|
||||||
|
labels.append({"filename": src_path.parts[len(src_path.parts)-1], "value":src_path.parts[len(src_path.parts)-2]})
|
||||||
|
|
||||||
|
print(dest_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jsonString = json.dumps(labels, indent=4)
|
||||||
|
print(jsonString)
|
||||||
|
|
||||||
|
json_path = train_test_image_path / "test_labels.json"
|
||||||
|
|
||||||
|
with json_path.open("w", encoding ="utf-8") as f:
|
||||||
|
f.write(jsonString)
|
||||||
|
|
||||||
|
print("koniec")
|
||||||
|
|
||||||
|
def show_image_corelations(X):
|
||||||
|
matplotlib.use('TkAgg')
|
||||||
|
|
||||||
|
# Apply the default theme
|
||||||
|
sns.set_theme()
|
||||||
|
|
||||||
|
sns.relplot(
|
||||||
|
data=X,
|
||||||
|
x="categories_name", y="categories_count",
|
||||||
|
)
|
||||||
|
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def show_categories(X, dim = (2,0,1)):
|
||||||
|
'''
|
||||||
|
Wizualizacja kategorii: 1D,2D
|
||||||
|
:param X: słownik zwracany przez funkcję load_images
|
||||||
|
:param dim: wymiar i współrzędne wizualizacji - krotka (n,mx,my): n - wymiar, mx,my: wizualizowane indeksy składowych obrazu
|
||||||
|
(1,0,0) - dane monochromatyczne - wizualizcja 1D
|
||||||
|
(2,mx,my) - dane 3D lub 4D, (mx,my) dwa indeksy piksela obrazu ze zbioru {0,1,2}
|
||||||
|
:return:
|
||||||
|
'''
|
||||||
|
|
||||||
|
if dim == (1,0,0):
|
||||||
|
#wizualizacja 1D
|
||||||
|
print("test")
|
||||||
|
else:
|
||||||
|
#wizualizacja 2D danych X["data"]
|
||||||
|
print("test")
|
Loading…
Reference in New Issue
Block a user