Инструкция: Распознаём Предметы на Картинке.

У вас есть ферма, и вам нужно посчитать количество коров на поле, чтобы убедиться, что ни одна не пропала. Машина может сделать это за вас:

Программа нашла 77 коров за одну секунду.

Примеры из реальной жизни: подсчитать клиентов, которые зашли в магазин сегодня, отсортировать фрукты или посчитать автомобили на парковке.

Мы создадим простой анализатор изображений, чтобы посчитать количество коров на поле и автоматически выделить их на фото. Опыт программирования не требуется. Если что-то непонятно, просто спросите ChatGPT.

Код универсален, поэтому вы можете обнаруживать людей или другие объекты, просто отредактировав одну строку кода. Мы будем использовать YOLOv8, передовую и высокоточную библиотеку распознавания изображений, которой можно пользоваться бесплатно.

Требования:

  • Компьютер (Mac или Windows или Linux)
  • Интернет
  • Python (мы его установим)
  • AI-модель YOLOv8 (мы ее скачаем)
  • Изображение коров (мы его скачаем)

Настройка рабочего пространства

Процесс программирования состоит из двух частей: написания кода и его выполнения. Обычно код пишут в текстовом редакторе, а выполняют с помощью инструмента типа «Терминал» на Mac. Однако существуют приложения, специально созданные для программирования, например, Visual Studio Code, которые позволяют писать и выполнять код на одной странице.

Visual Studio также поможет вам установить Python. Вы также можете установить расширения, которые ускоряют написание кода (например, автозаполнение Python и Copilot) или расширение, которое хранит ваш код в интернете (например, репозиторий Git).

Установка Python

Мы будем использовать Python для написания кода и установки AI-моделей. Чтобы запустить код на Python, мы будем использовать Visual Studio Code. Чтобы установить Python, просто откройте «Расширения» на левой панели, введите «Python» в поле поиска и установите расширение Python.

Установка Python на Mac

Во время установки могут возникнуть ошибки. Обратитесь к ChatGPT за помощью в их решении (например, скопируйте и вставьте текст ошибки).

Для установки Python на Mac вам потребуется скачать Homebrew — это своего рода магазин приложений для программистов. Откройте приложение «Терминал» (нажмите Command+Space и введите «Терминал»), затем скопируйте и вставьте код ниже в «Терминал»:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Нажмите Enter и следуйте инструкциям программы.

После установки Brew рекомендуется выполнить

brew update

Это гарантирует, что у вас будет последняя версия Homebrew, и вы скачаете самую свежую версию Python.

Загрузите Python, введя

brew install python

Следуйте инструкциям и обратитесь к ChatGPT, если возникнут ошибки.

Установка на Windows

Перейдите на официальную страницу установки Python и выберите последний установщик Python для Windows.

Установка проста, но могут возникнуть некоторые проблемы. Если это случится, опишите ошибки для ChatGPT (например, скопируйте и вставьте текст ошибки).

Написание кода

Создайте новый документ, нажав Command+N. Затем сохраните файл с помощью Command+S под именем «analyze_image.py», где «analyze_image» — имя, а «.py» указывает на файл Python.

Теперь напишите простой код, который выводит «Привет!»:

print("Привет!")

Сохраните код, нажав комбинацию клавиш Command+S

Запуск кода

Чтобы запустить код, нажмите кнопку воспроизведения. Вы увидите результат в окне «Терминал» внизу.
(Примечание: ваш терминал может выглядеть иначе, чем мой, но это не имеет значения)

Вы получите ответ здесь

Вы также можете нажать кнопку F5. В первый раз вам будет предложено выбрать отладчик (то же, что и запуск кода). Выберите первый.

Кроме того, вы можете запустить программу с использованием терминала в Visual Studio Code или «Терминал» на Mac. Это немного сложнее. Сначала откройте папку, в которой находится файл Python. Она отображается сверху в Visual Studio Code.

Чтобы открыть его, введите путь и функцию «cd» (change directory) в командную строку. Не указывайте имя файла; остановитесь на последней папке.

cd /Users/daniil_kovekh/Desktop/bot/Image/find_cow

Теперь вы можете перечислить все файлы в папке.

ls

Чтобы запустить код Python, введите «python» и имя файла с «.py» на конце.

python analyse_image.py

Вот и все. Если возникнет ошибка, попросите помощи у ChatGPT. Возможно, в коде есть ошибка.

Загрузка библиотек

Основы

Библиотека — это код, написанный другими разработчиками. Вот как его использовать:

Например, если вы хотите создать график с количеством клиентов, посетивших ваш магазин на прошлой неделе, вы можете использовать существующую функцию построения графиков, такую как «Matplotlib». Эта библиотека может нарисовать любой график, который вам нужен.

Сначала загрузите библиотеку из интернета. Используйте командную строку в Visual Studio Code для этого (вы также можете использовать приложение «Терминал» на Mac). Мы будем использовать установщик Python, называемый «pip».

pip install matplotlib

Нажмите «Enter» на клавиатуре.

После загрузки просто напишите этот код.

Символ «#» используется для комментариев. Текст после него в строке будет виден вам, но не машине.

# Импортируем библиотеку и модуль pyplot. Модуль содержит функции.
import matplotlib.pyplot

# Определяем данные. Мы храним данные в виде списков - элементов одного формата.
# days - список, содержащий текст - это формат "строки"
days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']

# customers - список, содержащий числа - формат "целых чисел"
customers = [120, 140, 110, 100, 170, 200, 210]

# Добавляем данные на график (X, Y).
# Мы используем столбчатую диаграмму - функция также называется "bar".
matplotlib.pyplot.bar(days, customers)

# Рисуем и отображаем график.
matplotlib.pyplot.show()

Сохраните код с помощью кнопки Command+S и нажмите кнопку воспроизведения для запуска кода (или используйте другие методы, которые мы изучили ранее). График появится в другом окне или, возможно, на другом рабочем столе.

Бесплатные или платные

Большинство библиотек бесплатны, но некоторые требуют оплаты. Например, Yahoo Finance предоставляет бесплатный доступ к данным о ценах на акции. Однако OpenAI, поставщик ChatGPT, взимает $0.06 за каждые 1000 слов, напечатанных с использованием ChatGPT-4.

YOLOv8 — анализатор изображений можно использовать бесплатно.

Доступ в Интернет

Некоторые библиотеки требуют доступа в интернет. Yahoo Finance и OpenAI оба работают с интернетом. Yahoo Finance использует интернет для доступа к своей базе данных с ценами на акции. OpenAI использует интернет по другой причине: оно получает текст, который вы написали, запускает программу AI на своем сервере и отправляет вам ответ.

YOLOv8 работает как онлайн, так и офлайн. YOLOv8 требует доступа в интернет для доступа к базе данных с обученными моделями, которые определяют, что изображено на картинке. Если вы обучите модель самостоятельно, загрузив сотни фотографий и указав, что на них изображено, то она будет работать офлайн.

Импорт библиотеки YOLOv8

Библиотека YOLO разработана Ultralytics. Чтобы установить ее, просто выполните следующую команду:

pip install ultralytics

Вы можете столкнуться с ошибками, связанными с необходимостью загрузки других библиотек или устаревших пакетов. Просто скопируйте и вставьте эти сообщения об ошибках сюда, в ChatGPT.

Получение изображений коров

Мы найдем коров на лугах, используя эти изображения:
https://koveh.com/img/cows.jpg
https://koveh.com/img/cows2.jpg
https://koveh.com/img/cows3.jpg
Загрузите эти изображения и разместите их в папке с скриптом «analyse_image.py».

Написание кода для обнаружения коров.

Давайте напишем основной код для обнаружения коров на изображениях. Сначала задайте путь к исходному изображению. Затем определите модель — мы будем использовать простую универсальную предварительно обученную модель под названием «yolov8n.pt». Затем определите, следует ли сохранить новое изображение с выделенными коровами. Также установите порог уверенности для компьютера, чтобы определить корову (от 0 до 1). Чем ниже уровень уверенности, тем больше шансов, что корова будет найдена, но риск того, что другой объект будет выбран в качестве коровы, также будет выше (например, автомобиль может стать коровой). Установите порог уверенности на 0.4.

Дополнительные настройки можно найти на официальной веб-странице

Обратите внимание: мы не определяем специально, что ищем коров; код просто определяет наиболее очевидные объекты на картинке. Мы уточним это позже.

from ultralytics import YOLO

source = "/Users/daniil_kovekh/Desktop/bot/Image/find_cow/cows.jpg"

# Загрузка модели YOLOv8 из предварительно обученного файла весов
model = YOLO('yolov8n.pt')

# Найти корову с уверенностью 0.4 и сохранить изображение
model.predict(source, save=True, conf=0.4)
Результаты сохраняются в папке runs/detect/predict. Если папка «predict» уже существует, она будет названа «predict1» и т. д.

Вот результаты изображения с 2 коровами на нем:

Результаты с большим количеством коров:

Как видим, когда коровы меньше и перекрывают друг друга, код допускает ошибки из-за неуверенности.

Улучшение результатов — уменьшение уверенности.

Чтобы улучшить результаты, мы можем настроить порог уверенности и Intersection Over Union (IOU) — который учитывает перекрывающихся коров, например, когда корова прячется за деревом. Измените эти настройки в диапазоне от 0 до 1.

from ultralytics import YOLO

source = "/Users/daniil_kovekh/Desktop/bot/Image/find_cow/cows.jpg"

# Загрузка модели YOLOv8 из предварительно обученного файла весов
model = YOLO('yolov8n.pt')

# Найти корову с уверенностью 0.4 и сохранить изображение
model.predict(source, save=True, conf=0.4, iou= 0.4)

Результаты все еще могут быть неидеальными, потому что при низком пороге уверенности AI может ошибочно определить другие объекты, такие как автомобили, в качестве коров.

Улучшение результатов — увеличение размера изображения

По умолчанию ширина изображения составляет 640 пикселей. Размер изображения cows3.jpg составляет примерно 5000x3000 пикселей, в то время как размер изображения cows.jpg отличается. Определите подходящий размер изображения для каждой картинки с использованием Python Imaging Library (PIL).

Установите PIL с помощью команды терминала и pip:

pip install Pillow

Теперь напишите код на Python в Visual Studio:

from PIL import Image

source = "/Users/daniil_kovekh/Desktop/bot/Image/find_cow/cows3.jpg"

# Загрузите изображение и получите его ширину
image = Image.open(source)
width, _ = image.size # _ означает высоту, которая нам не нужна. 

# Загрузка модели YOLOv8 из предварительно обученного файла весов
model = YOLO('yolov8n.pt')

# использовать imgsz равное ширине
model.predict(source, imgsz=width, save=True, conf=0.4, iou= 0.4)

Этот подход дает лучшие результаты, но не стесняйтесь экспериментировать с настройками для их дальнейшего улучшения.

Подсчет коров

Чтобы посчитать коров, мы будем подсчитывать количество индексов «коровы». Индексы коров хранятся в словаре, аналогичном приведенному ниже примеру:

животные = {"корова": 0.8, "корова":0.5, "собака":0.4, "корова":0.66, "утка":0.4}

В этом словаре записывается каждый обнаруженный объект на изображении и его уверенность как указанное животное. Мы будем считать все коровы, присутствующие в словаре. В приведенном выше примере насчитывается три коровы.


from ultralytics import YOLO
from PIL import Image

source = "/Users/daniil_kovekh/Desktop/bot/Image/find_cow/cows3.jpg"

# Загрузите изображение и получите его ширину
image = Image.open(source)
width, _ = image.size

# Загрузка модели YOLOv8 из предварительно обученного файла весов
model = YOLO('yolov8n.pt')

# Определите индекс класса коровы
cow_class_index = None # по умолчанию, если на картинке нет коров

for key, value in model.names.items():
    if value == "cow":
        cow_class_index = key # ключ - это первый элемент в словаре Python
        break
<code>
# Запустите прогнозирование на первом изображении
results = model.predict(source, save=True, imgsz=width, conf=0.3, iou = 0.5)
boxes = results[0].boxes
cow_detections = [box for box in boxes if int(box.cls) == cow_class_index]

print(f"Количество коров на {source}: {len(cow_detections)}")
</code>

Screenshot-2023-04-07-at-18.41.03.jpg

cows3_resized.jpg
Компьютер подсчитывает 77 коров (из 78).

# Анализируйте что угодно
Теперь вы готовы писать код для обнаружения объектов различных видов. Если вы хотите обнаруживать людей, просто измените значение с "корова" на "человек" или "чашка".

home.jpg
4 человека

street.jpg
18 человек

espresso.jpg
3 чашки кофе

Исследуйте ((https://docs.ultralytics.com/modes/predict/#arguments документацию)) и анализируйте что угодно – вы можете анализировать видео или прямые трансляции, обнаруживать движения человека или даже рисовать скелет индивида для оценки движений спортсменов.

Если вам нужно приложение на базе ИИ, сайт, бот для Telegram, расширение для Google, инструмент автоматизации или веб-скрепер, не стесняйтесь связаться со мной по адресу daniil@koveh.com. Моя команда и я рады помочь вам.