ในตอนท้ายของบทความนี้ คุณควรจะปรับใช้และแสดงโมเดล 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 ใหม่กัน
- สิ่งแรกที่คุณต้องทำคือลงทะเบียนที่ 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
- ตามที่กล่าวไว้ข้างต้น คุณสามารถสร้างคู่คีย์.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!!
แอปพลิเคชันเว็บของคุณพร้อมใช้งานแล้ว
ฉันหวังว่าบทความนี้จะช่วยคุณได้ อย่าลืมฝึกฝนและสำรวจเพิ่มเติมเสมอ
เรียนรู้อย่างมีความสุข!!