ในตอนท้ายของบทความนี้ คุณควรจะปรับใช้และแสดงโมเดล ML ของคุณบนเว็บเซิร์ฟเวอร์ได้

สำหรับผู้เริ่มต้น ฉันขอแนะนำอย่างยิ่งว่าคุณควรอ่านเอกสารประกอบผู้ใช้ Amazon AWS EC2 (ลิงก์ด้านล่าง) อย่างไรก็ตาม ต่อไปนี้เป็นคำจำกัดความสั้นๆ บางส่วนที่จะช่วยให้คุณเข้าใจขั้นตอนต่างๆ ในบทความนี้ได้ดีขึ้น https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html

Amazon EC2เป็นหนึ่งในบริการของ AWS ที่ได้รับความนิยมมากที่สุดในปัจจุบัน EC2 ย่อมาจาก Elastic Compute Cloud ซึ่งช่วยให้คุณสามารถเช่าเครื่องเสมือนและเรียกใช้แอปพลิเคชันคอมพิวเตอร์ของคุณบนเครื่องเหล่านั้นได้ ดังนั้นคุณจึงสามารถเพลิดเพลินกับการกำหนดค่าอันงดงามและทรงพลังของเซิร์ฟเวอร์เหล่านี้ และชำระเงินตามเวลาที่ใช้งาน

Amazon Machine Image หรือ AMI ถือได้ว่าเป็นเทมเพลตที่ประกอบด้วยรายละเอียดการกำหนดค่าต่างๆ เช่น ระบบปฏิบัติการ (Linux, Unix หรือ Windows) พื้นที่จัดเก็บข้อมูล หรือสถาปัตยกรรมระบบ (32 บิตหรือ 64 บิต) . คุณต้องเลือกเทมเพลต AMI เมื่อคุณเปิดใช้งานอินสแตนซ์ (สงสัยว่ามันคืออะไร อ่านต่อ)

อินสแตนซ์ถูกสร้างขึ้นเมื่อคุณเปิดเซิร์ฟเวอร์เสมือน ณ จุดเปิดใช้งาน ระบบจะคัดลอกรายละเอียดการกำหนดค่าของ AMI ที่เลือกและเปิดใช้งานอินสแตนซ์เดียวหรือหลายอินสแตนซ์ตามคำขอและความต้องการของคุณ นี่คือลักษณะของอินสแตนซ์ที่ทำงานอยู่:

คุณสามารถหยุดอินสแตนซ์ได้ หากคุณวางแผนที่จะเริ่มอินสแตนซ์ในภายหลัง ในกรณีนี้ Amazon EBS ของคุณจะยังคงแนบอยู่กับอินสแตนซ์ (การแจ้งเตือนคำศัพท์ : Amazon Elastic Block Store หรือ EBS คือพื้นที่จัดเก็บระดับบล็อกที่เชื่อมโยงกับอินสแตนซ์)

คุณยังสามารถยุติอินสแตนซ์ได้ ในกรณีนี้ คุณจะไม่สามารถรีสตาร์ทอินสแตนซ์ในภายหลังได้

ประเภทอินสแตนซ์ ระบุการกำหนดค่าฮาร์ดแวร์ที่คุณสมัครใช้งาน ซึ่งอาจเป็นความจุในการจัดเก็บข้อมูล การจัดการหน่วยความจำ ความสามารถในการคำนวณ ฯลฯ เราจะใช้ t2.micro เนื่องจากเป็นตัวเลือกที่เหมาะสมสำหรับผู้ใช้ Free Tier

มาตั้งค่าอินสแตนซ์ AWS EC2 ใหม่กัน

  1. สิ่งแรกที่คุณต้องทำคือลงทะเบียนที่ https://us-west-2.console.aws.amazon.com/console

2. เมื่อคุณเข้าไปแล้ว ทันทีที่คุณคลิกที่ปุ่มเปิดอินสแตนซ์ ที่มุมขวาบน หน้าด้านล่างจะเปิดขึ้น ขั้นตอนแรกคือ เลือก AMI ฉันจะเลือกอูบุนตู ถัดจากเมนูแบบเลื่อนลง คุณสามารถเลือกการกำหนดค่าที่ต้องการได้ แต่อย่าลืมตรวจสอบความพร้อมใช้งานของการกำหนดค่านั้นหากคุณใช้บริการ Free Tier

3. ตอนนี้เลือกประเภทอินสแตนซ์ เราจะดำเนินการต่อด้วย t2.micro

4. ขั้นตอนต่อไปคือการสร้างคู่คีย์เพื่อให้สามารถเข้าสู่ระบบอินสแตนซ์ของคุณด้วยการเชื่อมต่อที่ปลอดภัย คู่คีย์ประกอบด้วยคีย์สาธารณะที่ฝั่ง AWS และคีย์ส่วนตัวที่ฝั่งของคุณ คุณสามารถเลือกคีย์ .ppk ได้โดยตรง หากคุณจะเชื่อมต่อกับอินสแตนซ์ EC2 ผ่านทาง Putty

5. ถัดไปภายใต้การตั้งค่าเครือข่าย เลือก “ทุกที่” เฉพาะในกรณีที่คุณไม่ต้องการข้อจำกัดใดๆ บน IP ที่สามารถเข้าถึงอินสแตนซ์ของคุณได้ และคลิกที่ “เปิดอินสแตนซ์

วู้ฮู! อินสแตนซ์ของเราเริ่มทำงานแล้ว! ขั้นตอนต่อไปคือการเชื่อมต่อกับอินสแตนซ์นั้นเพื่อให้คุณสามารถถ่ายโอนสคริปต์และไฟล์ที่จำเป็นทั้งหมดไปยังเซิร์ฟเวอร์ EC2 และปรับใช้แอป ML ของคุณได้

เชื่อมต่อกับอินสแตนซ์ AWS EC2 และรันแอปของคุณโดยใช้ Streamlit

  1. ตามที่กล่าวไว้ข้างต้น คุณสามารถสร้างคู่คีย์.ppk ได้โดยตรง หรือในกรณีของฉัน ฉันจะแปลง .pem คีย์ไปยัง .ppk โดยใช้ Putty Generator (oขั้นตอนทางเลือกหากคุณมีคีย์ .ppk อยู่แล้ว)

2. คัดลอก ที่อยู่ IPv4 จากอินสแตนซ์ที่ทำงานอยู่ และทำตามขั้นตอนเหล่านี้เพื่อเชื่อมต่อจาก Putty

วางที่อยู่ IPv4 ลงในช่องข้อความ "ชื่อโฮสต์"

ภายใต้ Connection -› Data -› Login ระบุชื่อผู้ใช้ว่า “ubuntu”

สุดท้าย เลือกคีย์ .ppk ใต้ SSH -› Auth -› เรียกดู -› เลือกคีย์

3. ต่อไป เราจะต้องถ่ายโอนไฟล์จากเครื่องของเราไปยังเซิร์ฟเวอร์ EC2 Instance ซึ่งสามารถทำได้โดยใช้วิธีการถ่ายโอนไฟล์ต่างๆ ฉันใช้ WinSCP ชื่อโฮสต์จะเป็นที่อยู่ IPv4 เดียวกัน และคีย์จะเป็นไฟล์คีย์ .pem ดั้งเดิม

4. เมื่อคุณลากและวางไฟล์ที่จำเป็นทั้งหมดจากภายในเครื่องของคุณไปยังเซิร์ฟเวอร์ EC2 ให้กลับไปที่เทอร์มินัลแล้วรันคำสั่งต่อไปนี้

› sudo apt-get update && sudo apt-get ติดตั้ง python3 pip

คำสั่ง sudo apt-get ใช้เพื่อดาวน์โหลดข้อมูลแพ็คเกจจากแหล่งที่กำหนดค่าทั้งหมด

5. ตอนนี้ให้ติดตั้งไลบรารีที่จำเป็นทั้งหมดทีละรายการ หรือหากคุณมีการพึ่งพาไลบรารีหลายรายการ คุณยังสามารถใช้ไฟล์require.txtเพื่อติดตั้ง pip ทั้งหมดในครั้งเดียวได้

· pip ติดตั้ง streamlit

· pip ติดตั้ง plotly_express

· pip ติดตั้ง opencv-python

5. รันสคริปต์ Python ด้วยคำสั่ง “streamlit” นี่คือรหัสสำหรับ app.py ของฉัน ฉันใช้ตุ้มน้ำหนักที่ได้รับการฝึกจากรุ่น YOLOV3 เพื่อตรวจจับหมวกนิรภัยในภาพนิ่งจากสถานที่ก่อสร้าง คุณสามารถปรับใช้แอป ML อื่นๆ ได้ในลักษณะเดียวกัน

› สตรีมรัน app.py

# Importing required libraries
import streamlit as st
import cv2
from PIL import Image
import numpy as np
import os


def detect_objects(image):
    confidenceThreshold = 0.2
    NMSThreshold = 0.3

    modelConfiguration = 'yolov3_testing.cfg'
    modelWeights = 'yolov3_training_final.weights'

    labelsPath = 'classes.txt'
    labels = open(labelsPath).read().strip().split('\n')

    np.random.seed(10)
    COLORS = np.random.randint(0, 255, size=(len(labels), 3), dtype="uint8")

    net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
    image = np.array(image.convert('RGB'))
    (H, W) = image.shape[:2]

    # Determine output layer names
    layerName = net.getLayerNames()
    layerName = [layerName[i[0] - 1] for i in net.getUnconnectedOutLayers()]

    blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416), swapRB=True, crop=False)
    net.setInput(blob)
    layersOutputs = net.forward(layerName)

    boxes = []
    confidences = []
    classIDs = []
    for output in layersOutputs:
        for detection in output:
            scores = detection[5:]
            classID = np.argmax(scores)
            confidence = scores[classID]
            if confidence > confidenceThreshold:
                box = detection[0:4] * np.array([W, H, W, H])
                (centerX, centerY, width, height) = box.astype('int')
                x = int(centerX - (width / 2))
                y = int(centerY - (height / 2))

                boxes.append([x, y, int(width), int(height)])
                confidences.append(float(confidence))
                classIDs.append(classID)

    outputs = {}
    # Apply Non Maxima Suppression
    detectionNMS = cv2.dnn.NMSBoxes(boxes, confidences, confidenceThreshold, NMSThreshold)
    if len(detectionNMS) > 0:
        for i in detectionNMS.flatten():
            (x, y) = (boxes[i][0], boxes[i][1])
            (w, h) = (boxes[i][2], boxes[i][3])

            color = [int(c) for c in COLORS[classIDs[i]]]
            cv2.rectangle(image, (x, y), (x + w, y + h), color, 2)
            text = '{}: {:.4f}'.format(labels[classIDs[i]], confidences[i])
            cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

    return image


def about():
    st.write('''Helmet Detection App using Streamlit''')


def main():
    st.title("My ML App")

    activities = ["Home", "About"]
    choice = st.sidebar.selectbox("Select the Option", activities)

    if choice == "Home":
        st.write("Go to the About section from the sidebar to learn more about it.")

        # You can specify more file types below if you want
        image_file = st.file_uploader("Upload image", type=['jpeg', 'png', 'jpg'])

        if image_file is not None:
            image = Image.open(image_file)
            if st.button("Process"):
                result_img = detect_objects(image)
                st.image(result_img, use_column_width=True)
    # st.success("Found {} faces\n".format(len(result_faces)))

    elif choice == "About":
        about()


if __name__ == "__main__":
    main()

6. เมื่อคุณรัน app.py คุณจะได้รับ URL ที่คล้ายกันดังต่อไปนี้ คัดลอก URL ภายนอกและวางลงในเบราว์เซอร์ของคุณและ voila!!

แอปพลิเคชันเว็บของคุณพร้อมใช้งานแล้ว

ฉันหวังว่าบทความนี้จะช่วยคุณได้ อย่าลืมฝึกฝนและสำรวจเพิ่มเติมเสมอ

เรียนรู้อย่างมีความสุข!!