Эта статья была впервые опубликована сколонна Джижи
С помощью всего 10 строк кода Python мы можем реализовать обнаружение объектов в компьютерном зрении.
from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))
for eachObject in detections:
print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
Правильно, всего с 10 строками кода можно реализовать технологию обнаружения целей, которая широко используется в современных продуктах ИИ.
После прочтения кода давайте поговорим о технической подоплеке обнаружения целей и объясним происхождение и принцип реализации этих 10 строк кода Python.
Введение в обнаружение объектов
Важной областью искусственного интеллекта является компьютерное зрение, которое относится к науке о компьютерных и программных системах, распознающих и понимающих изображения и видео. Компьютерное зрение включает в себя множество направлений подразделения, таких как распознавание изображений, обнаружение объектов, генерация изображений и сверхразрешение изображений. Среди них обнаружение целей имеет наиболее далеко идущее значение в области компьютерного зрения из-за его широкого спектра использования.
Обнаружение объектов относится к способности компьютеров и программных систем находить объекты на изображениях/картинках и идентифицировать их. Технология обнаружения целей широко используется в распознавании лиц, обнаружении транспортных средств, статистике потоков людей, сетевых изображениях, системах безопасности и беспилотных транспортных средствах. Как и другие технологии компьютерного зрения, обнаружение целей в будущем станет важной частью искусственного интеллекта и имеет широкие перспективы развития.
Однако использование современных методов обнаружения объектов в программных приложениях и системах и создание приложений на их основе не является простым делом. Ранние реализации обнаружения целей в основном применяли некоторые классические алгоритмы, такие как поддерживаемые в OpenCV. Однако производительность этих алгоритмов нестабильна и сильно различается в разных ситуациях.
Прорыв в технологии глубокого обучения в 2012 году привел к появлению большого количества высокоточных алгоритмов обнаружения целей, таких как R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet, а также быстрых и точных SSD и YOLO. Использование этих методов и алгоритмов, основанных на глубоком обучении, требует понимания большого количества математики и сред глубокого обучения. Сейчас миллионы разработчиков по всему миру создают новые продукты и новые проекты с помощью технологии обнаружения объектов, но из-за сложности и трудности понимания и использования все еще есть много людей, которые упускают суть.
Чтобы решить эту проблему, которая преследует разработчиков, эксперт по компьютерному зрению Мозес Олафенва возглавил команду, чтобы запустить библиотеку Python ImageAI, которая позволяет разработчикам легко применять самые передовые технологии компьютерного зрения к своим собственным проектам с помощью всего нескольких строк кода. продукты.
Реализация 10-строчного кода, показанная в начале, предназначена для использования ImageAI.
Как легко добиться обнаружения объектов с помощью ImageAI
Чтобы выполнить обнаружение объектов с помощью ImageAI, вам нужно всего 4 шага:
1. Установите Python на свой компьютер
2. Установите ImageAI и его зависимости от среды
3. Скачайте файл модуля обнаружения целей
4. Запустите пример кода, который представляет собой 10 строк, которые мы показываем.
Ниже мы подробно объясним шаг за шагом.
1) Загрузите и установите Python 3 с официального сайта Python.
2) Установите следующие зависимости среды через pip
1.Tensorflow
pip install tensorflow
2.Numpy
pip install numpy
3.SciPy
pip install scipy
4.OpenCV
pip install opencv-python
5.Pillow
pip install pillow
6.Matplotlib
pip install matplotlib
7.H5py
pip install h5py
8.Keras
pip install keras
9.ImageAI
pip install
3) черезСсылка на сайтЗагрузите файлы моделей RetinaNet для обнаружения объектов.
Теперь, когда мы установили все зависимости, мы готовы написать наш первый код обнаружения целей. Создайте файл Python, назовите его (например, FirstDetection.py) и напишите в файл следующий код: Скопируйте файл модели RetinaNet и изображение, которое вы хотите обнаружить, в папку, содержащую файл Python.
FirstDetection.py
from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))
for eachObject in detections:
print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
Затем запустите код и подождите, пока консоль напечатает результат. После того, как консоль напечатает результаты, вы можете открыть папку, в которой находится FirstDetection.py, и вы обнаружите, что в ней сохранены новые изображения. Например, два примера изображений ниже и два новых изображения, сохраненных после обнаружения объекта.
Перед обнаружением объекта:
После обнаружения объекта:Мы видим, что имена и вероятности обнаруженных объектов отображаются на изображении.
Расшифровка 10 строк кода
Ниже мы объясним, как работают эти 10 строк кода.
from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
В приведенных выше 3 строках кода мы импортируем класс обнаружения объектов ImageAI в первую строку, импортируем класс ОС Python во вторую строку и определяем переменную в третьей строке, чтобы получить доступ к нашему файлу Python, файлу модели RetinaNet и image Путь к папке, в которой он находится.
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))
В приведенных выше 5 строках кода мы определяем наш класс обнаружения объектов в первой строке, устанавливаем тип модели RetinaNet во второй строке, устанавливаем путь модели к пути модели RetinaNet в третьей строке и загружаем модель. в четвертой строке Класс обнаружения объектов, затем мы вызываем функцию обнаружения в пятой строке и анализируем ее во входном и выходном путях изображения.
for eachObject in detections:
print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
В приведенных выше двух строках кода мы перебираем все результаты, возвращенные функциейdetect.detectObjectFromImage в первой строке, а затем распечатываем результаты обнаружения модели (имя и вероятность) для каждого объекта на изображении во второй строке.
ImageAI поддерживает множество мощных функций настройки обнаружения объектов, одной из которых является возможность извлекать изображение каждого объекта, обнаруженного на изображении. Просто проанализируйте дополнительный параметр extract_detected_objects=True в функции detectObjectsFromImage, как показано ниже, класс обнаружения объектов создаст папку для объектов изображения, извлечет каждое изображение, сохранит их во вновь созданной папке и вернет файл, содержащий дополнительный массив путей через каждое изображение.
detections, extracted_images = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), extract_detected_objects=True)
Используя первое изображение выше в качестве примера, мы можем получить отдельные изображения каждого объекта, обнаруженного на изображении:
ImageAI предоставляет множество функций, которые можно использовать для пользовательского и производственного развертывания различных задач обнаружения объектов. включают:
- Настройте минимальную вероятность: Объекты с вероятностью по умолчанию менее 50% не будут отображаться.При необходимости вы можете настроить это число самостоятельно.
- Обнаружение пользовательских объектов: используя предоставленный класс CustomObject, вы можете обнаружить один или несколько определенных объектов.
- Отрегулируйте скорость обнаружения: вы можете настроить скорость обнаружения, установив скорость обнаружения на три разных уровня: «быстро», «быстрее» и «самый быстрый».
- Тип ввода и вывода: вы можете настроить путь к изображению, массиву Numpy или файловому потоку изображения в качестве ввода и вывода.
Это правда, что просто смотреть на каждую строку из этих 10 строк кода не удивительно, и это также использует много библиотек, но только 10 строк кода могут позволить нам легко достичь проблемного обнаружения цели раньше, и это все еще может быть называется "мощный" Два слова.
Дополнительные функции и подробности см.GitHub
Использованная литература:towardsdatascience.com
Выпуск 0806 "Искусственный интеллект - от нуля до мастерства"
Ограниченная по времени скидка!
Нажмите здесь, чтобы узнать подробности
Болтать и смеяться Онлайн-программирование Узнать об этом? (Первые 25 студентов также могут получить купон на 200 иен)