Пошаговое руководство по настройке вашего API с помощью FastAPI Python для развертывания модели машинного обучения для обнаружения объектов изображения.

К концу этого руководства вы сможете разработать API для предоставления вашей модели машинного обучения через API с использованием Python и известной библиотеки Python API: «FastAPI». Модель машинного обучения, которую мы будем использовать, представляет собой предварительно обученную модель обнаружения объектов YOLOV5.

Обратите внимание, что я не буду подробно рассказывать о модели и о том, как она работает, однако мы сосредоточимся на технических деталях представления модели с помощью API.

Я предполагаю, что вы знаете, как работает API и как настроить API с помощью FastAPI и Python. если нет, пожалуйста, проверьте мой следующий учебник:



Готов идти? тогда приступим!

Прежде чем мы начнем, пожалуйста, нажмите кнопку «Подписаться», чтобы получать уведомления каждый раз, когда публикуется новый учебник!

Вы можете поддержать других авторов и меня на Medium, став участником:



Шаги по разработке вашего API машинного обучения с помощью Python FastAPI

Предположим, что вы инженер машинного обучения или специалист по данным, вы долгое время работали над моделью машинного обучения (вероятно, вы использовали ноутбук для запуска кода Python и настройки…), и теперь ваша модель готова!

Итак, как развернуть его как сервис, чтобы другие могли получить доступ к вашей модели и использовать его как «сервис» без необходимости загружать ваш код и запускать его в блокноте, как предоставить доступ пользователям со всего мира к вашей потрясающей модели машинного обучения?

Ответ: можно через веб-API! Подождите секунду, но я не веб-разработчик (я не знаю nodeJs, javascript…), я разработчик Python!

Что ж, в этом руководстве вы узнаете, как разработать свой ML API с помощью Python с использованием FastAPI.

Подготовьте свою модель: я предполагаю, что ваша модель уже подготовлена ​​(обучена, все параметры в порядке…). В этом руководстве мы будем использовать предварительно обученную модель для обнаружения объектов под названием YOLOv5. Это обнаружение и классификация объектов изображения: это означает, что вы даете модели изображение, она дает вам то, что она нашла на изображении (человек, стул, …), называемое классом, и где модель нашла их на изображении, называемом классом. Ограничительная рамка

Шаги по настройке API модели машинного обучения:

  • Импортировать все необходимые библиотеки
  • Загрузите свою модель в свой код Python и протестируйте ее.
  • Подготовьте свой API и протестируйте его.
  • Интегрируйте свою модель машинного обучения в свой API.
  • Протестируйте свой API

Хотите разработать API-интерфейс обнаружения изображений для машинного обучения с помощью Python FastAPI? Время кодирования!

1. Импортируйте все необходимые библиотеки

В этом уроке мы будем использовать:

  • Пакет «fastapi»: из которого мы будем импортировать модули «Файл», «Запрос» и «FastAPI».
  • «факел»: известный пакет Pytorch
  • «io»: для обработки потока (для запроса потока байтов изображения)
  • «Изображение»: для обработки изображений
  • «json»: для обработки объектов JSON.

Теперь, чтобы убедиться, что у вас есть все необходимые пакеты для запуска вашей модели, вы должны установить все ее требования, выполнив следующую команду:

pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txt

Вам может потребоваться установить следующий пакет, чтобы иметь возможность обрабатывать файлы в вашем API:

pip install python-multipart

затем импортируйте все пакеты:

import io
import json
from PIL import Image
from fastapi import File,FastAPI
import torch

2. Загрузите свою модель в свой код Python

Теперь мы загрузим нашу предварительно обученную модель обнаружения объектов изображения в наш код Python:

model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

Обратите внимание, что мы будем использовать «yolov5s» и «s» для малых: это означает, что мы будем использовать маленькую версию yolov5 (она будет использовать небольшую вычислительную мощность, но будет менее точной, чем более крупная версия yolov5).

С помощью этой строки кода вы сможете загрузить и загрузить модель из репозитория YOLOv5 GitHub (при развертывании в производстве попробуйте загрузить модель и сохранить ее на рабочей машине, а затем загрузить модель со своей машины, это будет более эффективный)

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

img = 'https://ultralytics.com/images/zidane.jpg'
results = model(img)
print(results.pandas().xyxy[0].to_json(orient="records"))

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

Когда вы запустите код, результат будет:

[{"xmin":743.2905273438,"ymin":48.3437805176,"xmax":1141.7564697266,"ymax":720.0,"confidence":0.8798604608,"class":0,"name":"person"},{"xmin":441.9895935059,"ymin":437.3366699219,"xmax":496.5851135254,"ymax":710.0362548828,"confidence":0.6751187444,"class":27,"name":"tie"},{"xmin":123.0510559082,"ymin":193.2380371094,"xmax":714.6906738281,"ymax":719.7713012695,"confidence":0.6666940451,"class":0,"name":"person"},{"xmin":978.9898071289,"ymin":313.5794677734,"xmax":1025.3028564453,"ymax":415.526184082,"confidence":0.2615171075,"class":27,"name":"tie"}]

мы получаем массив объектов, обнаруженных на этом изображении, каждый объект имеет:

  • xmin, ymin, xmax, ymax: координаты ограничивающей рамки
  • достоверность: от 0 до 1 и 1 означает, что модель почти уверена в своем прогнозе
  • Класс: класс объекта
  • имя: имя класса (удобочитаемое имя того, что является обнаруженным объектом, например, человек, галстук,…)

Круто, работает!

3. Настройте свой API с помощью Python FastAPI

Сначала вам нужно создать свой API:

app = FastAPI()

Теперь определите путь, который ваши пользователи будут использовать для отправки вам запроса (в этом случае пользователь отправит вам изображение, а вы отправите ему обратно массив объектов, обнаруженных на изображении)

@app.post("/objectdetection/")
async def get_body(file: bytes = File(...)):
  return {"result": "ok"}

Здесь мы настроили метод POST для получения запроса пользователя по пути «/objectdetection/». Затем мы получаем изображение в переменной «файл» и возвращаем результат {«результат»: «ок»} (просто чтобы проверить, все ли в порядке с нашим API)

Теперь запустите свой API с помощью:

uvicorn server:app --reload

Обратите внимание, что мой файл Python называется server.py, в любом случае, если вы не знаете, как запустить FastAPI, посмотрите это руководство: ссылка

Мой сервер работает на локальном хосте (http://127.0.0.1:8000/), а путь к моему API — «/objectdetection/». Давайте проверим это:

Совет: для тестирования API вы можете использовать такой инструмент, как Postman, но на этот раз мы проверим его другим способом, мы будем использовать документацию Swagger API, сгенерированную автоматически. Чтобы увидеть его, откройте навигатор и коснитесь ленты :

http://127.0.0.1:8000/docs

вы получите это:

Теперь перейдите в «Попробовать»:

Затем выберите свое изображение и нажмите кнопку «Выполнить». И результатом будет:

Потрясающий! наш API работает! давайте интегрируем нашу модель.

4. Интегрируйте свою модель машинного обучения для обнаружения объектов в свой Python FastAPI.

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

Поскольку на первых шагах все уже было подготовлено, все будет очень просто:

@app.post("/objectdetection/")
async def get_body(file: bytes = File(...)):
  input_image =Image.open(io.BytesIO(file)).convert("RGB")
  results = model(input_image)
  results_json =   json.loads(results.pandas().xyxy[0].to_json(orient="records"))
  return {"result": results_json}

Первым шагом является чтение файла изображения (полученного в виде байтов), его открытие и преобразование в изображение RGB. Затем мы даем его модели, чтобы сделать прогноз. Результаты сохраняются в переменной «результаты». Мы можем получить результаты в виде строки JSON, которую мы должны интерпретировать в объект JSON с помощью «json.loads ()», и, наконец, мы отправляем объект JSON обратно пользователю!

Давайте попробуем (вы можете проверить это, как мы сделали на предыдущем шаге):

Потрясающий! оно работает!

Полный код

Заключение

К концу этого руководства вы узнали, как настроить API модели машинного обучения для обнаружения объектов изображения с помощью Python FastAPI, выполнив следующие действия:

  • Импортировать все необходимые библиотеки
  • Загрузите свою модель в свой код Python и протестируйте ее.
  • Подготовьте свой API и протестируйте его.
  • Интегрируйте свою модель машинного обучения в свой API.
  • Протестируйте свой API

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

Дайте мне знать, если вам нужен учебник о том, как развернуть ваш API в реальном облаке (оставьте мне комментарий!).

Надеюсь, это было полезно! Смотрите все мои уроки здесь.

Не забудьте нажать кнопку Подписаться.

Вы можете поддержать меня и других авторов, присоединившись к сообществу Medium, пройдя по ссылке:



Если вы хотите узнать больше об API для обнаружения объектов (с Python API с использованием YOLOV8), ознакомьтесь с этим руководством:



Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord . Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.