Pada akhir artikel ini Anda seharusnya sudah bisa menerapkan dan menampilkan model ML Anda di server web.

Sebagai permulaan, saya sangat menyarankan Anda membaca dokumentasi pengguna Amazon AWS EC2 (tautan di bawah), namun berikut beberapa definisi singkat yang akan membantu Anda lebih memahami langkah-langkah dalam artikel ini. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html

Amazon EC2adalah salah satu layanan AWS paling populer saat ini. EC2 adalah singkatan dari Elastic Compute Cloud yang memungkinkan Anda menyewa mesin virtual dan menjalankan aplikasi komputer Anda di dalamnya. Jadi Anda dapat menikmati konfigurasi server-server ini yang luar biasa dan sangat kuat dan membayar berdasarkan waktu penggunaan.

Amazon Machine Image atau AMI dapat dianggap sebagai templat yang terdiri dari berbagai detail konfigurasi seperti sistem operasi (Linux, Unix, atau Windows), penyimpanan, atau arsitektur sistem (32-bit atau 64-bit) . Anda harus memilih template AMI saat meluncurkan sebuah instance (Ingin tahu apa itu? Teruslah membaca)

Instance dibuat saat Anda meluncurkan server virtual. Pada titik peluncuran, ini menyalin detail konfigurasi AMI yang dipilih dan meluncurkan satu atau beberapa instans berdasarkan permintaan dan kebutuhan Anda. Seperti inilah contoh yang sedang berjalan:

Anda dapat menghentikan instance jika berencana memulainya nanti. Dalam hal ini Amazon EBS Anda akan tetap melekat pada instans (Peringatan terminologi : Amazon Elastic Block Store atau EBS adalah penyimpanan tingkat blok yang dikaitkan dengan instans)

Anda juga dapat mengakhiri sebuah instance, sehingga Anda tidak dapat memulai ulang instance tersebut di kemudian hari.

Jenis instance menentukan konfigurasi perangkat keras yang Anda daftarkan. Ini bisa berupa kapasitas penyimpanan, manajemen memori, kemampuan komputasi, dll. Kami akan menggunakan t2.micro karena ini memberikan opsi yang layak bagi pengguna Tingkat Gratis.

Mari siapkan Instans AWS EC2 baru

  1. Hal pertama yang perlu Anda lakukan adalah mendaftar di https://us-west-2.console.aws.amazon.com/console

2. Setelah Anda masuk, segera setelah Anda mengklik tombolLuncurkan Instance di pojok kanan atas, halaman di bawah ini akan terbuka. Langkah pertama adalah memilih AMI. Saya akan memilih Ubuntu. Selanjutnya dari drop down Anda dapat memilih konfigurasi yang Anda sukai, namun pastikan Anda memeriksa ketersediaan konfigurasi tersebut jika Anda menggunakan layanan Tingkat Gratis.

3. Sekarang pilih jenis Instance, kita akan melanjutkan dengan t2.micro.

4. Langkah selanjutnya adalah membuat pasangan kunci untuk dapat login ke instance Anda dengan koneksi aman. Pasangan kunci terdiri dari kunci publik di ujung AWS dan kunci pribadi di ujung Anda. Anda dapat langsung memilih kunci .ppk jika Anda akan terhubung ke instans EC2 melalui putty.

5. Selanjutnya pada pengaturan jaringan, pilih “Di Mana Saja” hanya jika Anda tidak ingin ada pembatasan pada IP yang dapat mengakses instance Anda dan klik “Luncurkan Instance”.

Wah! contoh kita sudah aktif dan berjalan! Langkah selanjutnya adalah menyambungkan ke instance tersebut sehingga Anda dapat mentransfer semua skrip dan file yang diperlukan ke Server EC2 dan men-deploy aplikasi ML Anda.

Hubungkan ke instans AWS EC2 & jalankan aplikasi Anda menggunakan Streamlit

  1. Seperti disebutkan di atas, Anda bisa membuat pasangan kunci.ppk secara langsung atau dalam kasus saya, saya akan mengonversi .pem kunci .ppk menggunakan Putty Generator (olangkah opsional jika Anda sudah memiliki kunci .ppk).

2. Salin Alamat IPv4 dari instance yang sedang berjalan dan ikuti langkah-langkah berikut untuk terhubung dari putty.

Tempelkan alamat IPv4 di kotak teks “Nama Host”.

Di bawah Koneksi -› Data -› Login , sebutkan nama pengguna sebagai "ubuntu".

Terakhir, pilih kunci .ppk di bawah SSH -› Auth -› Telusuri -› Pilih kunci.

3. Selanjutnya kita harus mentransfer file dari mesin lokal kita ke server Instans EC2. Hal ini dapat dilakukan dengan menggunakan berbagai metode transfer file. Saya menggunakan WinSCP. Nama hostnya akan berupa alamat IPv4 yang sama dan Kuncinya akan berupa file kunci.pem asli.

4. Setelah Anda menarik dan melepas semua file yang diperlukan dari lokal Anda ke server EC2, kembali ke terminal dan jalankan perintah berikut.

› sudo apt-get perbarui && sudo apt-get install python3 pip

Perintah sudo apt-get digunakan untuk mengunduh informasi paket dari semua sumber yang dikonfigurasi.

5. Sekarang instal semua perpustakaan yang diperlukan satu per satu atau jika Anda memiliki beberapa dependensi perpustakaan, Anda juga dapat menggunakan file require.txt untuk melakukan instalasi pip sekaligus.

· pip instal streamlit

· pip instal plotly_express

· pip instal opencv-python

5. Jalankan Script Python dengan perintah “streamlit”. Ini kode untuk app.py saya. Saya telah menggunakan beban terlatih dari model YOLOV3 untuk mendeteksi topi pengaman pada gambar diam dari lokasi konstruksi. Anda dapat menerapkan aplikasi ML lainnya dengan cara yang sama.

› streamlit menjalankan 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. Setelah Anda menjalankan app.py, Anda akan mendapatkan URL serupa seperti di bawah ini. Salin URL Eksternal dan tempel di browser Anda dan voila!!

Aplikasi web Anda siap digunakan.

Saya harap artikel ini dapat membantu Anda. Ingatlah selalu untuk berlatih dan menjelajah lebih jauh.

Selamat Belajar!!