Использование возможностей ИИ

Ты все еще используешь жесты рук🖐✌☝👌 только для селфи??

Ну, жесты рук могут сделать гораздо больше.

Давайте исследуем

В этом блоге я расскажу о проекте, основанном на интеграции машинного обучения с облаком AWS для работы администратора.

Проблема состоит в том, чтобы масштабировать докер-контейнер, просто показывая пальцами. Пальцы вверх указывают на количество новых контейнеров, которые необходимо запустить.

Запуск экземпляра EC2

Мы знаем, что каждый сервис в AWS — это отдельный сервис.
Для подключения EC2 к SSM нам нужно использовать роли IAM.

Перейдите на панель инструментов IAM, затем перейдите к Ролям, используя панель Навигатора слева.

Нажмите «Создать роль».

Выберите, как показано.

Найдите SSM и выберите политику для полного доступа к SSM.

Задайте имя Роли и создайте.

мы можем создать роль.

Теперь запустите инстанс EC2.
Для этой демонстрации я использую Amazon Linux 2.

Оставьте остальные по умолчанию, просто внесите изменения, как показано ниже.

Продолжайте без какой-либо пары ключей.

В дополнительных сведениях выберите прикрепленную роль IAM, которую вы создали для подключения к SSM.

Экземпляр запущен.

Теперь давайте настроим SSM для управления ec2 сначала вручную, затем мы также автоматизируем его.

Перейдите на панель инструментов AWS SYSTEM MANAGER и выберите «Выполнить команду» на панели навигации.

Щелкните Выполнить команду.

Найдите оболочку и выберите AWS-RunShellScript.

затем прокрутите вниз и дайте команду для тестирования.

Затем прокрутите вниз и выберите, как показано ниже.

Прокрутите вниз, оставьте остальные значения по умолчанию и нажмите «Выполнить».

Команда успешно выполнена SSM.

Каталог /sayantan создан!!

Настройте службу докеров на сервере Linux.

Примечание.Не SSM приходит к экземпляру EC2 и настраивает его, а EC2 подключается к SSM и регистрирует себя.
Поскольку EC2 является двумя независимыми службами, нужна сила, чтобы прийти к SSM. Итак, прикрепите роль IAM к инстансу EC2 и дайте полный доступ к SSM.

Теперь запустите эти команды.

#first  login as root 

# install docker service
yum install docker -y

# check the status of docker service

systemctl status docker

# start the service and enable on boot
systemctl start docker
systemctl enable docker

# pull container image
docker pull ubuntu:14.04

# you can use any other image.

Создайте лямбда-функцию.

Мы используем Lambda в качестве бессерверной службы, которая подключается к SSM и указывает запустить необходимые команды.

Напишите код и разверните его.

Давайте кратко разберемся с этим кодом.

  1. Импортируйте необходимые модули «json» и «boto3».
  2. Определите функцию lambda_handler, которая принимает два параметра: «событие» и «контекст». «event» содержит информацию о событии, которое вызвало функцию, а «context» предоставляет информацию о функции во время выполнения.
  3. Настройте Lamda в качестве клиента SSM (Systems Manager) с помощью модуля boto3.
    ssm_client = boto3.client(‘ssm’, region_name=’ap-south-1’)
  4. Создайте команду для выполнения на экземпляре EC2 с помощью метода send_command клиента SSM.
    Сначала определите команду и поместите ее в переменную для дальнейшего использования.
    cmd = { “ команды”: [ “docker run -dit ubuntu:14.04” ] }

    Команда похожа на параметр, какую команду вы хотите запустить, сохраните команду в переменной,
    ssm_client.send_command(DocumentName="AWS-RunShellScript", InstanceIds=["i-043cd8dfb03183120"], Parameters=cmd )
    Здесь команда должна создать контейнер Docker из образа контейнера Ubuntu , на экземпляре EC2 с идентификатором i-043cd8dfb03183120.
  5. Вернуть ответ с кодом состояния 200 и сообщением в формате JSON о том, что «Docker запущен!»
    return {
    'statusCode': 200,
    'body': json. dumps('Docker запущен!')

ПРИМЕЧАНИЕ.Не забудьте создать роль IAM для Lambda, поскольку Lambda и SSM — это независимые сервисы. Здесь Lambda активирует SSM и скажет запустить контейнеры докеров.

Если одна роль создана по умолчанию, то прикрепите соответствующие политики.

Следуйте инструкциям, как показано.

Перейдите к разделу «Добавить разрешения и прикрепить политики».

Выберите политику AmazonSSMFullAccess и прокрутите вниз.

Нажмите Добавить разрешения.

♦ Настройка шлюза API:

Я использую тот же Rest API, что и в ML Project-1.

Поскольку мы не можем напрямую подключиться к нашей лямбда-функции из нашей локальной системы.
Мы должны ввести API GATEWAY в качестве их промежуточной службы, чтобы через общедоступный Интернет мы могли подключаться к соответствующей конечной точке API и вызывать лямбда-функцию.

Один новый ресурс, который мы создаем как «/docker», который при попадании будет запускать контейнеры.

Выберите Lambda, которая будет запущена, а затем скажите SSM запустить контейнеры Docker, в моем случае «MngDocker.py».

Поскольку мы внесли некоторые изменения, повторно разверните его.

Нажмите на конечную точку API /docker и посмотрите результат!

проверьте, запущен ли один докер-контейнер.

видите, это работает очень хорошо.

Опять попадание, опять еще один контейнер запущен.

Пока мы просто создаем контейнеры, давайте сделаем что-то большее.
Теперь давайте представим функцию Lambda для удаления контейнеров.

Примечание. Не забудьте прикрепить политики доступа к SSM.

Создайте конечную точку API, как показано ранее, и выберите DockerRM в качестве лямбда-функции.

Теперь, чтобы API заработал, снова используйте Deploy API, так как были внесены некоторые изменения.

Теперь тестирование.

Снова нажмите URL-адрес на этот раз в конечной точке /rmvcont API.

У нас есть одна модель ИИ, давайте поговорим об этом.

МОДЕЛЬ ИИ

Этот код отправляет HTTP-запрос на указанный URL-адрес https://kxzehhlpr5.execute-api.ap-south-1.amazonaws.com/test/docker и печатает ответ.

https://kxzehhlpr5.execute-api.ap-south-1.amazonaws.com/test/docker этот URL уже создан нами с помощью сервиса AWS API GATEWAY.

`/docker` — это конечная точка API и

https://kxzehhlpr5.execute-api.ap-south-1.amazonaws.com/test/docker → это URL-адрес, который при нажатии вызывает соответствующую лямбда-функцию и, таким образом, используя лямбда, указывает службе SSM запустить некоторые команды сценариев оболочки в экземпляре EC2 Linux. (ранее обсуждалось)

Вот разбивка того, что делает код:

1. Строка import urllib.request импортирует модуль urllib.request, который предоставляет классы и функции для создания HTTP-запросов.

2. Строка `request_url = urllib.request.urlopen(“https://kxzehhlpr5.execute-api.ap-south-1.amazonaws.com/test/docker’)` использует функцию `urlopen` из модуль urllib.request для открытия соединения с указанным URL. Он отправляет HTTP-запрос GET на URL-адрес и возвращает файловый объект, представляющий ответ.

3. Строка `print(request_url.read())` считывает содержимое ответа из файлового объекта `request_url` и выводит его на консоль. Метод read считывает все содержимое ответа как последовательность байтов.

Мы собираемся использовать эту модель ИИ несколько раз в будущем.

Разработка кода Python

В основном коде много задач, поэтому лучше сначала обсудить подзадачи, а потом переходить к основному коду. (концепция рекурсии, не так ли?)

Во-первых, давайте поговорим о том, как щелкнуть фотографию с помощью кода Python.

Захват изображения📸

В целом, этот код захватывает кадр с веб-камеры, отображает его в окне с именем «моя фотография» и ожидает нажатия клавиши Enter. После нажатия клавиши Enter программа завершает работу, и окно закрывается.

Разберем код шаг за шагом:

  1. `!pip install opencv-python`: эта строка устанавливает библиотеку OpenCV, а именно пакет `opencv-python`, используя диспетчер пакетов `pip`. Этот пакет предоставляет необходимые функции и классы для задач обработки изображений и видео.
    В командной строке просто введите «pip install opencv-python». Здесь
    “!” обычно используется в средах Jupyter Notebook или JupyterLab для выполнения команд оболочки непосредственно из блокнота.

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

3. `cap = cv2.VideoCapture(0)`: эта строка инициализирует объект захвата видео `cap`, используя `cv2.VideoCapture(0)`. Он открывает устройство видеозахвата по умолчанию (обычно веб-камеру) с индексом 0, указывающим на первую доступную камеру. `0` означает встроенную камеру системы.

4.`ret, photo = cap.read()`: эта строка захватывает кадр с устройства видеозахвата с помощью метода `read()` функции `cap ` объект. Возвращаемое значение `ret` указывает, был ли кадр успешно захвачен, а `photo` содержит захваченный кадр.
в основном `cap.read()` возвращает два выхода, и для этого мы использовали переменные twp.

5. `cv2.imshow("моя фотография", фото)`: эта строка отображает захваченный кадр в окне с именем "моя фотография" с помощью ` imshow()` из OpenCV. Переменная `photo` содержит данные изображения.

6. `if cv2.waitKey() == 13:`: Эта строка ожидает события нажатия клавиши. Функция `waitKey()` блокирует программу до тех пор, пока не будет нажата клавиша. Значение, возвращаемое функцией `waitKey()`, затем сравнивается со значением ASCII клавиши Enter (13).
Вы также можете использовать 27, это значение для кнопки `esc`. на клавиатуре.

7. `cv2.destroyAllWindows()`: эта строка закрывает все открытые окна, созданные OpenCV. Вызывается при нажатии клавиши Enter (в данном случае здесь написано 13), на что указывает предыдущее условие.

ПРИМЕЧАНИЕ. Не забудьте отпустить камеру после завершения работы.

Прямая трансляция видео🎥с кодом💻

`while loop` непрерывно щелкает фотографии каждые 10 мс и показывает изображение, обеспечивая плавную прямую трансляцию видео!!

ПРИМЕЧАНИЕ. Не забудьте отпустить камеру после завершения работы.

Обнаружение рук

Разберем код шаг за шагом:

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

2. `from cvzone.HandTrackingModule import HandDetector`: эта строка импортирует определенный модуль под названием `HandDetector` из библиотеки `cvzone` (не импортируйте все функции, а одну конкретную). Этот модуль обеспечивает функциональность для обнаружения и отслеживания рук.

3. `detector = HandDetector(maxHands=1, discoveryCon=0.8)`: Эта строка создает экземпляр класса `HandDetector` с двумя параметрами: `maxHands` и `detectionCon`. `maxHands` установлено в 1, что означает, что будет отслеживаться только одна рука. `detectionCon` установлено на 0,8, что является доверительным порогом для обнаружения рук. 0,8 означает 80% здесь.

4. `cap = cv2.VideoCapture(0)`: эта строка инициализирует объект захвата с помощью `cv2.VideoCapture(0)`, который открывает устройство видеозахвата по умолчанию (обычно веб-камеру) для захвата видеокадров.

Сделав снимок, на этот раз одной рукой, давайте узнаем, сможет ли моя программа обнаружить мою руку!

Мы используем объект «детектор» для вызова функции findHands() и сохраняем детали в другой переменной, которая называется «рука».

`hand =Detector.findHands(photo,draw=False)`
Строка кода использует алгоритм обнаружения рук для обнаружения и нахождения рук на изображении, представленном переменной «photo».

Строка присваивает результат обнаружения переменной «рука», которая, вероятно, содержит сведения об обнаруженных руках, такие как их положения, ориентиры и другую соответствующую информацию. Параметр «draw=False» указывает, что обнаруженные руки не должны быть визуально аннотированы или выделены на изображении.

Вы можете использовать «draw=True», если хотите увидеть все аннотации.

Этот код выполняет некоторые операции с обнаруженной рукой, хранящейся в переменной «рука».

Строка «d = hand[0]» извлекает первую обнаруженную руку из переменной «рука» и присваивает ее переменной «d». Эта строка предполагает, что на изображении обнаружена хотя бы одна рука. Мы собираемся использовать переменную `detecthand` вместо d для лучшего понимания.
(Как и ранее, мы установили `maxHands=1` при создании объекта `detector` из класса `HandDetector`).

Следующая строка, «detector.fingersUp(d)», вызывает функцию с именем «fingersUp» объекта «детектор», передавая обнаруженную руку «d» в качестве аргумента. Эта функция предназначена для определения того, какие пальцы руки подняты или вытянуты.

Функция «fingersUp» специально определяет, подняты ли второй (указательный 1) и третий (указательный 2) пальцы руки. ) Функция возвращает логическое значение или некоторую форму представления, указывающую состояние каждого пальца (поднят или не поднят).
В этом случае возвращается массив логических значений.

Мы шаг за шагом переходим к правильному коду, так что следите за обновлениями!

Здесь нечего объяснять, как видите, мы транслируем живое видео, используя цикл while.

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

Вы также можете внести некоторые изменения, например, разорвать цикл, пока все пальцы подняты, вы можете выполнять некоторые задачи и останавливать его только при нажатии клавиши «Ввод» на клавиатуре (13 = клавиша «Ввод»).

Теперь давайте подойдем к окончательному коду и интегрируем модель ИИ с обнаружением пальцев.

ОКОНЧАТЕЛЬНЫЙ КОД🎯

Два URL-адреса в этом коде, которые при нажатии вызывают соответствующие функции Lambda.

Один из них →
https://kxzehhlpr5.execute-api.ap-south-1.amazonaws.com/test/docker для запуска контейнеров докеров (интегрированная функция Lambda → MngDocker.py). Этот URL попадает только тогда, когда обнаружена правая рука, в противном случае, если обнаружена левая рука, попадает другой URL-адрес, который является https://kxzehhlpr5.execute-api.ap-south-1.amazonaws.com/test/rmvcont. , и, следовательно, запускает функцию Lambda DockerRM.py.

Посмотрите мое видео на LinkedIn, чтобы узнать окончательный результат👇💙



Теперь пришло ваше время реализовать это !!

Надеюсь, вам понравился блог!!

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

Репозиторий GitHub: https://github.com/Sayantan2k24/Scaling_Finger_Detection_Docker_ML.git

Моя контактная информация:

📩Электронная почта:- [email protected]
LinkedIn:- https://www.linkedin.com/in/sayantan-samanta/