OpenVINO™ — OpenVINO (Open Visual Inference and Neural Network Optimization) — це набір інструментів, розроблений Intel для розробки та розгортання програм комп’ютерного бачення та глибокого навчання. Він містить набір оптимізованих бібліотек для фреймворків глибокого навчання, оптимізатор моделі для перетворення моделей у формат, який можна запускати на апаратному забезпеченні Intel, і набір інструментів для розгортання моделей на різних типах пристроїв, включаючи процесори, графічні процесори та VPU. OpenVINO призначений для прискорення розробки програм комп’ютерного бачення, дозволяючи розробникам швидко й легко оптимізувати та розгортати свої моделі на різноманітних платформах.
пʼятниця, 17 червня 2022 р.
неділя, 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
понеділок, 31 травня 2021 р.
Вирізання фрагменту з відео
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
ffmpeg_extract_subclip("input.mp4", start_time, end_time, targetname="output.mp4")
start_time, end_time - час у секундах
неділя, 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-детектора
Підписатися на:
Дописи (Atom)