Рубрики
Без рубрики

Обнаружение дуги с лазурным настраиваемым видением и Python

В нашем недавнем проекте «Dragonfly Mini» здесь в Stratiteq мы использовали разные технологии и программи … Помечено с Azure, CustomVision, Python, Ai.

В нашем недавнем проекте “Стрекоза mini” здесь на Stratiteq. Мы использовали различные технологии и языки программирования, чтобы создать автономное транспортное средство, питаемое NVIDIA Jetson Nano, оснащенную дроном, который собирает и обрабатывает данные и загружает его в облако Microsoft Azure. После этого проекта мы опубликуем серию блогпостов здесь в Dev.to объяснить, как добиться конкретных вещей, и в этом первом сообщении в блоге я покажу, насколько легко обучать модель для пользовательского обнаружения с помощью Azure Custy Vision и как вы можете использовать это Модель через Python.

Тупин, как вы, наверное, знаете, маленькая птица с ярко окрашенным клювом и Исландией является домом для атлантических тупиков. Одним из применений, которые мы продемонстрировали в проекте «Dragonfly Mini», было вдохновлено защитой исчезающих видов с помощью AI, поэтому мы обучали пользовательскую модель, которая способна обнаруживать тупики. Если вы хотите построить модель, которая может распознать различные птицы, вы можете использовать: WAH C., Branson S., Walinder P., Perona P., соблюдение S. «Caltech-UCSD Birds-200-2011 Dataset» Оценка и нейронные системы Технический отчет, CNS-TR-2011-001 Отказ Вы также можете найти много других наборов данных на Kaggle для этого использования. Подготовка данных является ручной работы и требует некоторого времени, но больше усилий, которые вы инвестируете в подготовку и помечение ваших изображений, результаты будут лучше.

Это действительно легко создавать проект обнаружения объекта с помощью Azure Custom Vision, и я объяснил это пошаговое прохождение в одном из предыдущих блогопостов “Где жеватель? Обнаружение объекта с кастомным зрением Azure « ». Войдите в Пользовательское видение Создайте новый проект для обнаружения объекта, добавить и теги изображений, обувь свой проект и опубликуйте обученную итерацию. Прежде чем публиковать итерацию, убедитесь, что вы делаете несколько тестов с разными изображениями. Использование только Caltech DataSet не будет достаточным, чтобы сделать хорошее распознавание, поэтому попробуйте добавить больше изображений из других наборов данных или из других интернет-источников.

Мы можем использовать эту модель из Python менее чем за 20 строк кода. Сначала давайте установим SPENCV и Custom Vision Service SDK для Python, запустив следующие команды:

pip install opencv-python
pip install azure-cognitiveservices-vision-customvision
pip install msrest

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

Создайте новый сценарий Python и импортировать пакеты, которые вы только что установили.

import cv2
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
from msrest.authentication import ApiKeyCredentials

Определите камеру и установите свойства для ширины и высоты, помните, что вы должны сохранить соотношение сторон, в моем случае он будет 640 на 480 пикселей.

camera = cv2.VideoCapture(0)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

VideoCapture OpenCV может использовать вход с камеры, но она также может использовать видеофайл в качестве ввода, который является действительно полезной функцией.

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

credentials = ApiKeyCredentials(in_headers={"Prediction-key": "
"})
predictor = CustomVisionPredictionClient("", credentials)

Клавиша прогнозирования можно найти в пользовательском интерфейсе Vision, нажав кнопку «URL-адрес прогноза». В окне, который всплывает, вы увидите его ниже URL.

URL EndPoint можно найти в том случае, если настройки проекта в верхней панели щелкните настройки, и вы найдете URL конечного точка (используйте его без идентификатора ресурса). В настройках вы также найдете идентификатор проекта, который будет в следующем формате: AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEEE.

Мы сделаем изображение с камеры, и мы сохраним его как «Capture.png» со следующими двумя строками кода.

ret, image = camera.read()
cv2.imwrite('capture.png', image)

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

with open("capture.png", mode="rb") as captured_image:
    results = predictor.detect_image("", "", captured_image)

Теперь мы можем зацикливаться через наши результаты, и мы возьмем предсказания, которые имеют вероятность более 50%. С этими прогнозами мы будем нарисовать ограничивающие коробки на изображении и хранить его как новое изображение «Reals.png». Для ограничивающих ящиков мы производим простые расчеты на основе размера изображения, мы устанавливаем ограничивающуюся коробку цвета и толщину границы.

for prediction in results.predictions:
    if prediction.probability > 0.5:
        bbox = prediction.bounding_box
        result_image = cv2.rectangle(image, (int(bbox.left * 640), int(bbox.top * 480)), (int((bbox.left + bbox.width) * 640), int((bbox.top + bbox.height) * 480)), (0, 255, 0), 3)
        cv2.imwrite('result.png', result_image)

В конце мы выпускаем камеру, которую мы использовали.

camera.release()

Когда вы выполняете код, камера включится, сделайте изображение, Azure Custom Vision следует вызывать через URL-адрес, чтобы получить результаты, и результаты будут сохранены как новый образ. Вот быстрый тест, который я сделан с помощью магнита на холодильник с пышными пуфами.

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

Полный код, который мы использовали в этом руководстве здесь:

import cv2
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
from msrest.authentication import ApiKeyCredentials

camera = cv2.VideoCapture(0)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

credentials = ApiKeyCredentials(in_headers={"Prediction-key": "
"})
predictor = CustomVisionPredictionClient("", credentials)

ret, image = camera.read()
cv2.imwrite('capture.png', image)

with open("capture.png", mode="rb") as captured_image:
    results = predictor.detect_image("", "", captured_image)

for prediction in results.predictions:
    if prediction.probability > 0.5:
        bbox = prediction.bounding_box
        result_image = cv2.rectangle(image, (int(bbox.left * 640), int(bbox.top * 480)), (int((bbox.left + bbox.width) * 640), int((bbox.top + bbox.height) * 480)), (0, 255, 0), 3)
        cv2.imwrite('result.png', result_image)

camera.release()

Я надеюсь, что вы узнали, насколько это просто использовать Azure Custy Vision через Python, и, поскольку вы могли видеть, что это было сделано менее чем за 20 строк кода.

Спасибо за прочтение!

Оригинал: "https://dev.to/stratiteq/puffins-detection-with-azure-custom-vision-and-python-2ca5"