пʼятниця, 17 червня 2022 р.

OpenVINO

OpenVINO™ — OpenVINO (Open Visual Inference and Neural Network Optimization) — це набір інструментів, розроблений Intel для розробки та розгортання програм комп’ютерного бачення та глибокого навчання. Він містить набір оптимізованих бібліотек для фреймворків глибокого навчання, оптимізатор моделі для перетворення моделей у формат, який можна запускати на апаратному забезпеченні Intel, і набір інструментів для розгортання моделей на різних типах пристроїв, включаючи процесори, графічні процесори та VPU. OpenVINO призначений для прискорення розробки програм комп’ютерного бачення, дозволяючи розробникам швидко й легко оптимізувати та розгортати свої моделі на різноманітних платформах.

неділя, 6 червня 2021 р.

Збільшення зображення в покращеній якості (Super Resolution)

Навчені моделі EDSR_x2.pb EDSR_x4.pb EDSR_x8.pb знаходяться тут

Приклад використання для збільшення в 4 рази

SupRes = cv2.dnn_superres.DnnSuperResImpl_create() # створюємо клас
path = "EDSR_x4.pb"
SupRes.readModel(path)
SupRes.setModel("edsr",4)
new_image = SupRes.upsample(img) 
Також збільшувати зображеня безкоштовно можна на сайтах BigJpg, AI Image Enlarger, Lunapic і у Фотошоп - Зображення -> Розмір -> Зберегти деталі 2.0

Огляд 15 найкращих збільшувачів зображень

понеділок, 31 травня 2021 р.

неділя, 30 травня 2021 р.

Підготовка даних для нейронної мережі

Розглянемо на конкретному прикладі деякі особливості роботи з даними, які ще не розбиті на навчальні та тестові групи так як це було вище і які не можна використовувати для навчання нейронної мережі.

Завантажимо набір даних за посиланням. Він складається із трьох типів зображень по 1000 зображень кожного типу, які знаходяться у трьох папках cats , dogs , panda і ці папки самі розміщені у папці animals. Створимо ще одну папку label в якій будемо зберігати бінарні файли міток train_labels, test_labels. Нагадаємо, що з такими файлами ми вже працювали коли завантажували набори даних MNIST.

# ініціалізуємо данні і мітки
data = []
labels = []
# Утворюємо список  всіх шляхів до файлів із зображеннями та перемішуємо їх
imagePaths = sort(list(paths.list_images("dog_cat_panda\\animals")))
random.seed(42)
random.shuffle(imagePaths)
# Організовуємо цикл по зображенням
for imagePath in imagePaths:
	# Завантажуємо зображення, змінюємо його розмір до 32 x 32 пікселів, 
	# сплющуємо його  в 32x32x3=3072  пікселі і закидаємо в список
	image = cv2.imread(imagePath)
	image = cv2.resize(image, (32, 32)).flatten()
	data.append(image)
	# витягуємо назву мітки з імені шляху  і закидаємо її в список міток
	label = imagePath.split(os.path.sep)[-2]
	labels.append(label)
Використання os.path.sep зрозуміле із наступних прикладів:
'dog_cat_panda\animals\cats\cats_00003.jpg'.split(os.path.sep)
['dog_cat_panda\x07nimals', 'cats', 'cats_00003.jpg']
 'dog_cat_panda\animals\cats\cats_00003.jpg'.split(os.path.sep)[-2]
'cats'
Cписок зображень перетворюємо в NumPy-масив і нормуємо його. Також список міток перетворюємо в масив.
data = np.array(data, dtype="float") / 255.0
labels = np.array(labels) 
Нарешті розіб'ємо данні на навчальні і тестові у співвідношенні 3:1 використовуючи scikit-learn функцію для розщеплення даних train_test_split:
(trainX, testX, trainY, testY) = train_test_split(data,
	labels, test_size=0.25, random_state=42)
Мітки у нас задані як символи, але Keras працює з мітками заданими у числовому форматі. Тому перетворимо мітки у числа використовуючи scikit-learn клас LabelBinarizer:
lb = LabelBinarizer()
trainY = lb.fit_transform(trainY)
testY = lb.transform(testY) 
В результаті отримаємо таку бінаризацію міток
[1, 0, 0] # для  cats
[0, 1, 0] # для dogs
[0, 0, 1] # для panda 
Тепер набір даних частково підготовлений для роботи з нейронною мережею. При подальшій роботі з цими наборами даних, після їхнього завантаження, потрібно уточнити структуру цих даних і виконати необхідну попередню підготовку даних.

субота, 29 травня 2021 р.

Виявлення людських силуетів HOG-детектором

Силуети пішоходів можна виявляти каскадним класифікатором Хаара haarcascade_fullbody.xml проте із цим завданнями краще справляються HOG-класифікатори, а саме класифікатор hogcascade_pedestrians.xml який використовується за умовчанням в функції HOGDescriptor_getDefaultPeopleDetector. HOG-класифікатори використовують алгоритм відмінний від алгоритму Віоли-Джонса.

Приклад використання HOG-класифікатора виявлення силуетів людей.

import cv2 
import numpy as np 
 
scaling_factor = 0.5
hog = cv2.HOGDescriptor()
hog.setSVMDetector( cv2.HOGDescriptor_getDefaultPeopleDetector() )
frame = cv2.imread('foto/pep1.jpg')
face_rects= hog.detectMultiScale(frame, winStride=(8,8), padding=(32,32), scale=1.05)

for (x,y,w,h) in face_rects[0]: 
        cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 3)
 
cv2.imshow('Input image', frame)
print ("Знайдено {0} пішоходи(ів)!".format(len(face_rects[0])))

Знайдено 3 пішоходи(ів!  
Отримуємо
Інший приклад роботи HOG-детектора