Основи інженерії штучного інтелекту 10-11 класи
Цей документ містить навчальні матеріали для учнів та вчителів курсу «Основи інженерії штучного інтелекту». Навчальна програма курсу за вибором "Основи інженерії штучного інтелекту" Автори: Рибак О.С., Радер Р.І. Протокол №7 від 19.08.2024. Зареєстровано у каталозі надання грифів навчальних матеріалів та навчальних програм № 4.0164-2024 (Текст програми (pdf))
5. Комп'ютерний зір
5.5. Самостійна робота
У цьому завданні ми будемо рахувати кількість риб на зображенні за допомогою двох основних методів комп'ютерного зору:
1. Пошук об'єктів за кольором у просторі HSV (Hue, Saturation, Value - Тон, Насиченість, Яскравість). HSV є більш зручним для пошуку кольорів ніж RGB, оскільки він розділяє інформацію про колір (тон) від інформації про освітленість. Це дозволяє більш точно визначати потрібний колір навіть при різному освітленні.
import cv2
import numpy as np
# Зчитуємо зображення
img = cv2.imread('fish.jpg')
# Конвертуємо зображення з BGR у HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# Визначаємо діапазон кольору риб (наприклад, помаранчевий)
# H: 10-20 для помаранчевого відтінку
# S: 100-255 щоб уникнути дуже блідих кольорів (при S<100 колір майже білий)
# V: 100-255 щоб уникнути дуже темних кольорів (при V<100 колір майже чорний)
lower_orange = np.array([10, 100, 100]) # Нижня межа HSV
upper_orange = np.array([20, 255, 255]) # Верхня межа HSV
# Створюємо маску для виділення об'єктів заданого кольору
mask = cv2.inRange(hsv, lower_orange, upper_orange)
2. Фільтрація знайдених об'єктів за площею (contourArea) - це дозволяє відфільтрувати занадто малі або великі об'єкти, залишивши лише ті, що відповідають розміру риб. Наприклад:
import cv2
import numpy as np
# Знаходимо контури об'єктів
contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Фільтруємо контури за площею
MIN_AREA = 500 # мінімальна площа об'єкта
MAX_AREA = 5000 # максимальна площа об'єкта
filtered_contours = []
for contour in contours:
area = cv2.contourArea(contour)
if MIN_AREA < area < MAX_AREA:
filtered_contours.append(contour)
# Кількість знайдених риб
fish_count = len(filtered_contours)
Спробуйте самі порахувати кількість риб: https://www.rmn.pp.ua/ai-lab-sandbox/#