Написание кода — это одно, а фактическое развертывание, чтобы кто-то мог использовать совершенно другую и крутую вещь. Это действительно так приятно, когда конвейер построен, чтобы на самом деле проверить его. Недавно я пытался использовать pytesseract для преобразования текста в изображение. Это довольно просто и понятно. Мне всегда было любопытно, что такое развертывание, я давно этим не занимался. Итак, я пошел дальше и попытался развернуть простой код Python, который действует как простая модель OCR. Все это время я следил за этой статьей и документацией fastAPI. Тем не менее, я подумал, что было бы действительно полезно переписать, сделав акцент на решении проблем, с которыми я столкнулся.
Я упомянул здесь детали конфигурации инстанса, просто чтобы упростить его, а также меню AWS немного изменилось с тех пор, как была опубликована статья, на которую я ссылался.
Нажмите «Запустить экземпляр».
Теперь мы настроим EC2 на операционную систему, в которой мы хотим его запустить.
Все вышеперечисленные конфигурации были настроены с параметрами, которые подходят для уровня бесплатного пользования, у AWS есть 12-месячный доступ к бесплатному уровню, с которым здорово поиграть и делать интересные вещи, вы должны проверить это на ура!
Вам необходимо создать пару ключей, она используется при подключении к экземпляру EC2 через вашу систему. Я лично хотел SSH, потому что это просто и удобно с точки зрения подключения, потому что я могу просто использовать SSH через командную строку. Однако вы можете создать пару ключей по своему усмотрению.
После настройки экземпляра нам нужно настроить входящие правила. Для настройки ролей входящего трафика перейдите на панель инструментов групп безопасности, используя параметры поиска в консоли AWS, как мы перешли в меню EC2.
Установите флажок в группе безопасности, соответствующей вновь созданному экземпляру EC2.
Как только мы это сделаем, мы увидим меню внизу экрана следующим образом:
Нам нужно добавить правило HTTP, чтобы наш код мог работать через порт 80 по HTTP.
Теперь почти пришло время для действительно захватывающих вещей, но перед этим нам нужно подключиться к нашему экземпляру EC2.
Мы можем подключиться к нашему экземпляру через командную строку (я использую Windows, поэтому команды могут немного отличаться, если вы используете другую операционную систему).
ssh -i your_keypair_filename.pem ubuntu@your_EC2_instance's_IPV4
Как только вы это сделаете, вы будете подключены к вашему экземпляру EC2.
Мы должны настроить среду, установив все зависимости.
#finding out the version the current symlink is pointing to python3 --version #Removing the current symlink if its not pointing to the version we #want sudo rm /usr/bin/python3 #Installing the required version of python sudo apt-get install python3.8 #Updating the symlink sudo ln -s /usr/bin/python3.8 /usr/bin/python
Ниже приведена часть, где я столкнулся со многими проблемами. Инстансы EC2 поставляются с предустановленными версиями Python, обычно 2.7 и 3.6. Нужные нам библиотеки могут быть несовместимы с имеющимися версиями. Итак, нам нужно установить нужную версию python, в моем случае python 3.8 и сменить на нее симлинк python3. Это то, с чем имеет дело приведенный выше фрагмент.
sudo apt-get update sudo apt install python3-pip sudo apt-get install libsm6 libxrender1 libfontconfig1 libice6 nginx gunicorn pip3 install numpy==1.21.1 fastapi==0.54.1 starlette==0.13.2 opencv-python-headless==4.1.2.30 pytesseract==0.3.3 matplotlib==3.3.1 pydantic==1.4 uvicorn==0.11.3 gunicorn==20.0.4 python-multipart==0.0.5 #If you are facing an issue with the above uninstall and reinstall #apt sudo apt update sudo apt install tesseract-ocr sudo apt install libtesseract-dev
Время развертывания
Это простой код для выполнения OCR, мы используем fastAPI для защиты входного изображения, его обработки и возврата результата. (Это было взято непосредственно из статьи, основная цель этой статьи — подчеркнуть и помочь решить проблемы, с которыми я столкнулся во время развертывания).
#save the file as test.py import numpy as np import sys, os from fastapi import FastAPI, UploadFile, File from starlette.requests import Request import io import cv2 import pytesseract from pydantic import BaseModeldef read_img(img): text = pytesseract.image_to_string(img) return(text) app = FastAPI()class ImageType(BaseModel): url: str@app.post(“/predict/”) def prediction(request: Request, file: bytes = File(…)):if request.method == “POST”: image_stream = io.BytesIO(file) image_stream.seek(0) file_bytes = np.asarray(bytearray(image_stream.read()), dtype=np.uint8) frame = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR) label = read_img(frame) return label return “No post request found”
Создайте каталог для хранения кода Python в вашем экземпляре EC2.
mkdir pythond #Move into the directory cd pythond
Перенесите этот код Python в экземпляр EC2 с помощью следующей команды:
#Navigate to the directory where your python file is present in the #system you're using to connect with EC2 and #use the following command to transfer the scp -i ~\path\your_keypair_filename.pem test.py ubuntu@your_instance's_Public_ipv4_DNS:~/pythond/
Настройка сервера nginx — следующий шаг
#Come back to the home directory and follow the below cd /etc/nginx/sites-enabled/ sudo vim myApp
Нам нужно добавить следующее в файл myApp, обязательно замените IP-адрес на свой ipv4.
server{ listen 80; server_name your_EC2_instance's_IPV4; location / { proxy_pass http://127.0.0.1:8000; } }
Как только это будет сделано, просто перезапустите nginx, чтобы изменения отразились. После этого сервер будет запущен.
sudo service nginx restart #return to the home directory cd PythonDir gunicorn -w 1 -k uvicorn.workers.UvicornWorker pythoncode:app
Если вы столкнулись с какими-либо ошибками, вы можете просмотреть журнал с помощью команды ниже:
#This command will kill the port 8000 which in most cases fixes the #problem sudo fuser -k 8000/tcp
http://ваш_экземпляр_EC2_IPV4/docs
Попробуйте выполнить, загрузив приведенный ниже образец изображения:
Это так весело, когда ты на самом деле пробуешь это сам. Развертывание — это то, что делает код осмысленным и имеет смысл в большинстве сценариев. Кроме того, это расширяет базу пользователей, которые могут использовать код.
Подписание,
Шри
Скоро вернемся с большим количеством контента!