Добавил:
chrysler_a57_mltbnk
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
import os
import skimage
import numpy
import matplotlib.pyplot as plt
import threading
import time
#Создание класса-наследника класса Thread с возвращением элементов
class ThreadRV(threading.Thread):
def __init__(self, group=None, target=None, name=None, args=(), kwargs={}, Verbose=None):
threading.Thread.__init__(self, group, target, name, args, kwargs)
self._return = None
def run(self):
if self._target is not None:
self._return = self._target(*self._args, ** self._kwargs)
def result(self):
return self._return
#Функция вызова потоков
def thrd_call(trg, argnt1, argnt2, a):
thread1 = ThreadRV(target=trg, args =argnt1)
thread2 = ThreadRV(target=trg, args =argnt2)
thread1.start()
thread2.start()
if a == False:
thread2.join()
thread1.join()
elif a == True:
thread1.join()
thread2.join()
return (thread1.result(), thread2.result())
#Функция считывания названий файлов
def f_name(s):
lt = os.listdir(s)
return lt
#Функция создания списков изображений
def img_read(ls, path):
array = []
for i in ls:
array.append(numpy.array(skimage.io.imread(f'{path}/{i}')))
return array
#Функция «спрямления» изображений
def img_flatten(ls):
for i in ls:
i.shape = (len(i)*len(i[0])*3)
i = i.T
#Функция пересоздания массива
def arr_rec(index_array, orig_array):
copy_array = numpy.copy(orig_array)
for i in range(0, len(index_array)):
copy_array[i] = orig_array[index_array[i]]
orig_array = numpy.copy(copy_array)
return orig_array
#Функция извлечения части из массива
def arr_cut(array, left_border, right_border):
array_cut = array[left_border:right_border]
return array_cut
#Функция вывода изображения на экран
def img_out(number, img, val):
plt.figure(number)
plt.imshow(numpy.reshape(img, (64,64,3)))
if val == 0:
print(f'This is image without trees')
elif val == 1:
print(f'This is image with trees')
#Очистка окна консоли
os.system('cls')
#Запуск таймера
t1 = time.perf_counter_ns()
#1. Создание списков названий файлов в папках
trees_list, no_trees_list = thrd_call(f_name,
("Trees",), ("NoTrees",), True)
#2. Создание списков изображений в папке
trees_img_list, no_trees_img_list = thrd_call(img_read,
(trees_list, "Trees"), (no_trees_list, "NoTrees"), True)
##Вывод необходимого изображения
plt.figure(1)
plt.imshow(no_trees_img_list[6])
#3. Создание массива параметров для машинного обучения
##3а. «Спрямление» массивов изображений
thrd_call(img_flatten, (trees_img_list,),
(no_trees_img_list,), False)
##3б. Объединение массивов в массив параметров
X = numpy.vstack((numpy.array(trees_img_list[0:len(trees_img_list)+1]),
numpy.array(no_trees_img_list[0:len(no_trees_img_list)+1])))
#4. Создание массива результатов
Y = numpy.hstack((numpy.ones(len(X)//2),
numpy.zeros(len(X)//2))).T
#5. Перемешивание строк массивов результатов и параметров
index = numpy.linspace(0, len(X)-1, len(X), dtype=numpy.int16)
index = numpy.random.permutation(index)
X, Y = thrd_call(arr_rec, (index, X), (index, Y), True)
#6 Разделение на части
##Выделение данных на обучение
X_learn, Y_learn = thrd_call(arr_cut, (X,0,6400), (Y,0,6400), True)
##Выделение данных на кроссвалидацию
X_cross, Y_cross = thrd_call(arr_cut, (X,6400,8400), (Y,6400,8400), True)
##Выделение данных на тестирование
X_test, Y_test = thrd_call(arr_cut, (X,8400,10400), (Y,8400,10400), True)
#7 Вывод необходимых изображений на экран
##Вывод первого изображения из набора для обучения
img_out(2, X_learn[0], Y_learn[0])
##Вывод первого изображения из набора для кроссвалидации
img_out(3, X_cross[0], Y_cross[0])
##Вывод первого изображения из набора для тестов
img_out(4, X_test[0], Y_test[0])
#Вывод времени выполнения программы
print(f'Total program execution time: {(time.perf_counter_ns()-t1)/10**9} seconds')
plt.show()
Соседние файлы в папке лабы
