Распознавание объектов на Python / Глубокое машинное обучение

Coinoscope. Поиск монет

Да, программу можно назвать весьма узкоспециализированным приложением для нумизматов, ведь оно нацелено лишь на определенную категорию предметов, а именно, на монеты. Программа может распознавать как современные, так и древние монеты. Однако помимо этих возможностей, Coinoscope — это еще и настоящий архив с описанием монет самых разных эпох. Небольшой учебник для начинающих коллекционеров или просто любителей старины.

Скачать: Coinoscope

Пишем код для работы с командной строкой.

Далее анализируем аргументы командной строки:

# construct the argument parse and parse the arguments  ap = argparse.ArgumentParser()  ap.add_argument("-p", "--prototxt", required=True,  help="path to Caffe 'deploy' prototxt file")  ap.add_argument("-m", "--model", required=True,  help="path to Caffe pre-trained model")  ap.add_argument("-c", "--confidence", type=float, default=0.2,  help="minimum probability to filter weak detections")  args = vars(ap.parse_args())
  • —prototxt : Путь к prototxt Caffe файлу.
  • —model : Путь к предварительно подготовленной модели.
  • —confidence : Минимальный порог валидности (сходства) для распознавания объекта (значение по умолчанию — 20%).

Пишем код для работы с кадрами.

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

# loop over the frames from the video stream  while True:  # grab the frame from the threaded video stream and resize it  # to have a maximum width of 400 pixels  frame = vs.read()  frame = imutils.resize(frame, width=400)    # grab the frame dimensions and convert it to a blob  (h, w) = frame.shape[:2]  blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)),  0.007843, (300, 300), 127.5)    # pass the blob through the network and obtain the detections and  # predictions  net.setInput(blob)  detections = net.forward()

Первое, что мы делаем — считываем кадр (строка 43) из потока, затем заменяем его размер (строка 44).

Поскольку чуть позже нам понадобится ширина и высота, получим их сейчас (строка 47). Затем следует преобразование кадра в blob с модулем dnn (строки 48 и 49).

Теперь к сложному: мы устанавливаем blob как входные данные в нашу нейросеть (строка 53) и передаём эти данные через net (строка 54), которая обнаруживает наши предметы.

Google Lens. Программа для распознавания всего

Google Lens работает благодаря продвинутой технологии компьютерного зрения, что позволяет распознавать огромный спектр самых разнообразных предметов. Google Lens отличает друг от друга породы животных, растения, цветы, гаджеты от различных производителей и многое другое. Кроме того, для некоторых объектов Google Lens также будет предоставлять ссылки на покупку, если это возможно. Ясное дело, что купить кошку вам никто предлагать не будет. Но вот почему бы не приобрести домой симпатичный столик, который вы увидели в кафе?

Скачать: Google Lens

Тестирование

Создайте файл и разместите в нем следующий код:

from imageai.Detection import ObjectDetection import os  exec_path = os.getcwd()  detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath(os.path.join( exec_path, "resnet50_coco_best_v2.0.1.h5") ) detector.loadModel()  list = detector.detectObjectsFromImage( input_image=os.path.join(exec_path, "objects.jpg"), output_image_path=os.path.join(exec_path, "new_objects.jpg"), minimum_percentage_probability=90, display_percentage_probability=True, display_object_name=False )

Осталось запустить код и ожидать появление результатов работы в консоли. Дальше следует пройти в каталог, где установлен файл FirstDetection.py. Здесь же должна появиться новая фотография или несколько. Чтобы лучше понимать, что произошло, следует открыть изначальную и новую картинку.

Время рассмотреть принцип работы кода:

from imageai.Detection import ObjectDetection import os  exec_path = os.getcwd()

Описание строк:

  • 1 строка: перенос ImageAI и класса для поиска предмета;
  • 2 строка: импорт Python os;
  • 4 строка: создание переменной, в которой указывается путь к директории с файлом Python, RetinaNet, моделью и образом.
detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath(os.path.join( exec_path, "resnet50_coco_best_v2.0.1.h5") ) detector.loadModel()  list = detector.detectObjectsFromImage( input_image=os.path.join(exec_path, "objects.jpg"), output_image_path=os.path.join(exec_path, "new_objects.jpg"), minimum_percentage_probability=90, display_percentage_probability=True, display_object_name=False )

Описание строк:

  • 1 строка: объявление нового класса для поиска объектов;
  • 2 строка: установка типа модели RetinaNet;
  • 3 строка: указание пути к модели RetinaNet;
  • 6 строка: загрузка модели внутрь класса для поиска;
  • 8 строка: вызов функции обнаружения (распознавания объектов) и запуск парсинга пути начального и конечного изображений.

ImageAI имеет поддержку массы различных настроек для поиска объектов. Например, можно настроить извлечение всех найденных объектов во время обработки картинки. Класс поиска способен создать отдельную папку с названием image, а затем извлечь, сохранить и вернуть массив с путём ко всем объектам.

list, extracted_images = detector.detectObjectsFromImage (input_image=os.path.join(execution_path , "objects.jpg"),  output_image_path=os.path.join(execution_path , "new_objects.jpg"),  extract_detected_objects=True)

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий