Rumah pembangunan bahagian belakang Tutorial Python Membina Pengesanan Objek Masa Nyata Dikuasakan AI dengan OpenCV, Flask, Gemini Vision dan GitHub Actions CI/CD pada AWS EC2

Membina Pengesanan Objek Masa Nyata Dikuasakan AI dengan OpenCV, Flask, Gemini Vision dan GitHub Actions CI/CD pada AWS EC2

Dec 22, 2024 pm 07:36 PM

PENGENALAN:

Bayangkan sistem yang boleh menganalisis suapan video langsung dalam masa nyata, mentafsir adegan dan bertindak balas dengan bijak kepada soalan tentang persekitaran—sama seperti pembantu maya yang mempunyai mata. Ini adalah potensi untuk menggabungkan teknologi canggih seperti OpenCV untuk pemprosesan video dan model visi Gemini Google, memanfaatkan model "gemini-1.5-flash-latest" terbaharunya.

Dalam artikel ini, saya akan membimbing anda membina Sistem Pengesanan Objek Masa Nyata yang menggunakan penstriman video langsung dan analisis adegan dikuasakan AI untuk menyampaikan respons yang berwawasan dan menyedari konteks. Kami akan menggunakan aplikasi pada AWS EC2, menetapkan peringkat untuk skalabiliti dan penggunaan dunia sebenar sambil menggunakan Github Actions untuk CI/CD automatik, memastikan saluran kemas kini yang lancar.

Menjelang akhir tutorial ini, anda akan mempunyai sistem berkuasa AI yang berfungsi sepenuhnya sedia untuk digunakan, dengan keyakinan untuk mengembangkan dan menyesuaikannya untuk pelbagai kes penggunaan.


STRUKTUR PROJEK

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Komponen Teras

  1. Tangkapan Video Masa Nyata (OpenCV) Kelas WebcamCapture dalam app.py mengendalikan penstriman video:
self.stream = cv2.VideoCapture(0)  # Open the default webcam
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ini memastikan penangkapan dan pemprosesan bingkai selamat benang yang cekap.

  1. Pengesanan Objek Dikuasakan AI (Google Gemini) Menggunakan model Gemini, kami menganalisis bingkai untuk pemahaman adegan masa nyata:
self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
  1. Ujung Belakang Kelalang Aplikasi Flask menyediakan titik akhir untuk penstriman video, pertanyaan AI dan semakan status sistem:

/video_feed: Menstrim video langsung.

/process_query: Mengendalikan analisis dikuasakan AI berdasarkan input pengguna dan bingkai video.

  1. UI Depan

    Fail index.html menyediakan antara muka web responsif untuk berinteraksi dengan sistem. Ia menangkap pertanyaan pengguna dan memaparkan respons AI masa nyata.

    PRASYARAT

  2. Akaun AWS.

  3. Nama domain berdaftar (cth., example.com).

  4. Akaun Google Cloud atau akaun Open AI

  5. Tindakan GitHub dikonfigurasikan dalam repositori anda.

4. Pengetahuan asas tentang alat baris arahan SSH dan Linux.

PENGKlonan & PENGGUNAAN PERMOHONAN

Langkah 1: Klon Repositori, Jana API & Tolak fail aplikasi ke Github

A. Klon repositori

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

B. Hasilkan kunci API anda dan tambahkan pada fail .env
i. Cipta fail .env sama ada secara manual daripada pilihan yang tersedia di sebelah kiri editor teks anda (saya menggunakan VScode)
ATAU
Di terminal, jalankan:
$ sentuh .env

Kemudian tambahkan ini dalam .env

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True
Salin selepas log masuk
Salin selepas log masuk

ii. Log masuk ke Google Cloud dan ikuti langkah ini untuk menjana kunci API anda.

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

a. Navigasi ke Bahagian API & Perkhidmatan

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

b. Klik pada Kredensial kemudian ikuti langkah lain di bawah

Buat Bukti Kelayakan > Kunci API , kemudian Kunci API dijana. Ingat untuk ambil perhatian nama kunci API anda. Anda juga boleh memberi nama semasa proses.

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Salin Kunci API yang dijana, kembali ke fail .env anda dan gantikan kunci_google_api_anda dengan kunci yang baru anda salin.

c. Dayakan Gemini API
Cari API Gemini dan klik pada DAYAKAN

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Sahkan bahawa Kunci API anda berada di bawah bahagian METRICS dan Bukti Kelayakan di bawah API Gemini Didayakan.

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

iii. Cipta fail .gitignore dan tambahkan .env pada fail supaya ia tidak ditolak ke github.

N.B.: Amalan standard adalah untuk memastikan rahsia dan pembolehubah persekitaran tidak didedahkan kepada umum. Oleh itu, keperluan untuk .gitignore untuk mengabaikan fail yang ditambahkan di dalamnya sambil menolak ke Github.

B. Tekan ke Repositori.
i. Buat repositori Github dengan nama aplikasi dan ikut arahan di bawah untuk menolak ke github

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

N.B: tukar nama repositori kepada nama repositori anda

Langkah 2: Sediakan Rahsia Persekitaran Tindakan Github

Konfigurasikan rahsia pengguna AWS IAM anda dan pembolehubah persekitaran yang diperlukan untuk projek.

Menempatkan projek melalui AWS memerlukan rahsia AWS serta pembolehubah persekitaran yang ditambahkan secara setempat pada .env anda ditambahkan pada persekitaran Github Actions. Ini adalah untuk memastikan akses kepada akaun AWS khusus yang dimaksudkan untuk penggunaan dan juga memastikan pembolehubah persekitaran yang diperlukan tersedia dalam persekitaran penggunaan.

i. Navigasi ke Tetapan dalam repositori anda

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

ii. Klik pada Rahsia dan Pembolehubah > Tindakan

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

iii. Tambah Rahsia dan Pembolehubah anda seperti di bawah

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

![Rahsia](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7t6vyolkj2jyq85oswh7.png

Langkah 3: Menyediakan Instance AWS EC2

i. Lancarkan Instance EC2

  • Gunakan Konsol Pengurusan AWS untuk melancarkan tika EC2 (cth., Ubuntu 22.04).

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

  • Pilih jenis tika (cth., t2.micro untuk pengguna peringkat percuma).

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

  • Buat dan muat turun pasangan kunci (fail.pem) untuk akses SSH.

Buat pasangan kunci baharu atau gunakan yang sedia ada.

Jika anda mencipta pasangan kunci baharu, klik pada buat pasangan kunci dan berikan nama pilihan anda.

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Pilih jenis Pasangan Kunci sebagai RSA

Format fail sebagai .pem

Pasangan kunci dimuat turun secara automatik ke sistem anda.

  • Konfigurasikan Kumpulan Keselamatan

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Benarkan peraturan masuk berikut:
i. HTTP (port 80): Untuk menyampaikan aplikasi anda.
ii. HTTPS (port 443): Untuk akses selamat.
iii. SSH (port 22): Untuk akses pengurusan.

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

  • Klik pada contoh Pelancaran dan benarkan contoh itu dilancarkan sepenuhnya.

Kini tika anda sedia untuk digunakan sebaik sahaja status menunjukkan "Berjalan".

ii. Konfigurasikan pasangan kunci (.pem key) untuk akses SSH

Untuk pengguna buku Mac atau pengguna Linux dengan terminal bash, konfigurasikan pasangan kunci anda untuk akses SSH demikian:

a. Buka kunci .pem yang dimuat turun menggunakan VScode atau Xcode

b. Pada terminal anda, navigasi ke direktori .ssh dari direktori akar(~)

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

c. Cipta fail .pem dalam direktori .ssh menggunakan penyunting teks nano atau vim; Saya akan menggunakan nano dalam tutorial ini.

Pasang nano jika anda belum memasangnya.

Untuk pengguna macbook

self.stream = cv2.VideoCapture(0)  # Open the default webcam
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Untuk pengguna linux

self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Setelah memasangnya, buat fail .pem dalam direktori .ssh menggunakan nano.

Pastikan fail yang akan dibuat mengandungi nama sebenar fail .pem anda.

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kemudian salin fail .pem yang telah dibuka dan tampal dalam .pem untuk dibuat dalam direktori .ssh.

Tekan Ctrl X, kemudian Y , kemudian Enter untuk menyimpan.

d. Tukar kebenaran fail .pem

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True
Salin selepas log masuk
Salin selepas log masuk

iii. Akses Instance - SSH ke dalam contoh EC2 anda:

Klik pada ID Instance . Setelah contoh berada dalam keadaan berjalan, pilih pada pilihan sambung

Sebaik sahaja anda berada di halaman Connect , Pergi ke SSH Client

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Kemudian salin arahan terakhir pada halaman yang kelihatan seperti ini:

$ git init
$ git add .
$ git commit -m "first commit"
$ git branch -M main
$ git remote add origin https://github.com/Abunuman/repository-name.git
git push -u origin main
Salin selepas log masuk

Tampal ini pada terminal anda dan tekan enter. Anda harus menyambung dengan lancar.

Untuk Pengguna Windows

  • Persediaan Windows

Buka CMD pada mesin tingkap anda

Cari direktori yang dikehendaki di mana fail .pim disimpan

Sebaik-baiknya daripada direktori ini, kita boleh menjalankan arahan ssh yang disalin dan kita sepatutnya boleh menyambung ke EC2. Walau bagaimanapun, kadangkala kami mendapat ralat kebenaran keselamatan apabila kami menjalankan arahan ssh.

Kami perlu menukar kebenaran kepada fail .pem.

Untuk itu ikuti langkah di bawah.

  1. Cari folder fail .pem , klik kanan pada fail dan pilih sifat

  2. Pergi ke tab Keselamatan

  3. Pergi ke tab Lanjutan

  4. Klik Lumpuhkan warisan

  5. Pilihan Pendahuluan ini juga menunjukkan pengguna lain mempunyai semua kebenaran untuk fail .pem. Alih keluar kebenaran untuk semua pengguna lain

  6. Tambah pengguna yang anda cuba sambungkan ke EC2 jika belum ada dalam senarai pengguna.

  7. Dayakan semua kebenaran untuk pengguna ini.

Sebaik-baiknya dengan langkah ini, anda tidak sepatutnya menghadapi ralat.

Jalankan arahan SSH daripada gesaan CMD

Setelah kebenaran dibetulkan , gesaan akan berjaya disambungkan ke EC2

Sekarang anda berjaya menyelesaikan langkah-langkah tersebut dan anda boleh menjalankan arahan daripada windows CMD pada contoh EC2.

iv.Pasang Ketergantungan - Kemas kini senarai pakej dan pasang pakej yang diperlukan:

Setelah disambungkan ke tika EC2 anda melalui SSH, pasang kebergantungan pada EC2.

Pada terminal anda yang disambungkan, jalankan arahan berikut:

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Semak versi python3 yang dipasang, pastikan 3.12

self.stream = cv2.VideoCapture(0)  # Open the default webcam
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Langkah 2: Meletakkan Aplikasi

Sediakan Aplikasi

Pindahkan app.py, index.html dan requirements.txt ke contoh EC2:

self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Langkah 3: Mengkonfigurasi Tindakan GitHub untuk CI/CD

Buat Fail Aliran Kerja dalam repositori anda, tambahkan fail .github/workflows/main.yml:

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

KESIMPULAN

Dalam tutorial ini, kami memulakan perjalanan yang komprehensif untuk membina dan menggunakan sistem pengesanan objek masa nyata yang menyepadukan dengan lancar OpenCV untuk tangkapan video langsung dan ChatGoogleGenerativeAI Google untuk analisis adegan pintar. Daripada mengkonfigurasi aplikasi secara setempat hingga menggunakan aplikasi tersebut dengan selamat pada AWS EC2 dengan domain tersuai dan SSL, kami merangkumi setiap langkah penting untuk mengubah idea anda menjadi penyelesaian yang berfungsi dan berskala.

Projek ini menyerlahkan kuasa menggabungkan teknologi termaju seperti Flask, OpenCV dan AI untuk menyelesaikan masalah dunia sebenar sambil memastikan amalan terbaik untuk penggunaan awan. Dengan mengikut langkah ini, anda bukan sahaja menggunakan sistem berkuasa AI yang mantap tetapi juga memastikan kebolehskalaan, keselamatan dan saluran paip CI/CD yang cekap.

Atas ialah kandungan terperinci Membina Pengesanan Objek Masa Nyata Dikuasakan AI dengan OpenCV, Flask, Gemini Vision dan GitHub Actions CI/CD pada AWS EC2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1675
14
Tutorial PHP
1278
29
Tutorial C#
1257
24
Python vs C: Lengkung pembelajaran dan kemudahan penggunaan Python vs C: Lengkung pembelajaran dan kemudahan penggunaan Apr 19, 2025 am 12:20 AM

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Apr 18, 2025 am 12:22 AM

Adakah cukup untuk belajar Python selama dua jam sehari? Ia bergantung pada matlamat dan kaedah pembelajaran anda. 1) Membangunkan pelan pembelajaran yang jelas, 2) Pilih sumber dan kaedah pembelajaran yang sesuai, 3) mengamalkan dan mengkaji semula dan menyatukan amalan tangan dan mengkaji semula dan menyatukan, dan anda secara beransur-ansur boleh menguasai pengetahuan asas dan fungsi lanjutan Python dalam tempoh ini.

Python vs C: Meneroka Prestasi dan Kecekapan Python vs C: Meneroka Prestasi dan Kecekapan Apr 18, 2025 am 12:20 AM

Python lebih baik daripada C dalam kecekapan pembangunan, tetapi C lebih tinggi dalam prestasi pelaksanaan. 1. Sintaks ringkas Python dan perpustakaan yang kaya meningkatkan kecekapan pembangunan. 2. Ciri-ciri jenis kompilasi dan kawalan perkakasan meningkatkan prestasi pelaksanaan. Apabila membuat pilihan, anda perlu menimbang kelajuan pembangunan dan kecekapan pelaksanaan berdasarkan keperluan projek.

Python vs C: Memahami perbezaan utama Python vs C: Memahami perbezaan utama Apr 21, 2025 am 12:18 AM

Python dan C masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1) Python sesuai untuk pembangunan pesat dan pemprosesan data kerana sintaks ringkas dan menaip dinamik. 2) C sesuai untuk prestasi tinggi dan pengaturcaraan sistem kerana menaip statik dan pengurusan memori manual.

Yang merupakan sebahagian daripada Perpustakaan Standard Python: Senarai atau Array? Yang merupakan sebahagian daripada Perpustakaan Standard Python: Senarai atau Array? Apr 27, 2025 am 12:03 AM

Pythonlistsarepartofthestandardlibrary, sementara

Python: Automasi, skrip, dan pengurusan tugas Python: Automasi, skrip, dan pengurusan tugas Apr 16, 2025 am 12:14 AM

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Python untuk pengkomputeran saintifik: rupa terperinci Python untuk pengkomputeran saintifik: rupa terperinci Apr 19, 2025 am 12:15 AM

Aplikasi Python dalam pengkomputeran saintifik termasuk analisis data, pembelajaran mesin, simulasi berangka dan visualisasi. 1.Numpy menyediakan susunan pelbagai dimensi yang cekap dan fungsi matematik. 2. Scipy memanjangkan fungsi numpy dan menyediakan pengoptimuman dan alat algebra linear. 3. Pandas digunakan untuk pemprosesan dan analisis data. 4.Matplotlib digunakan untuk menghasilkan pelbagai graf dan hasil visual.

Python untuk Pembangunan Web: Aplikasi Utama Python untuk Pembangunan Web: Aplikasi Utama Apr 18, 2025 am 12:20 AM

Aplikasi utama Python dalam pembangunan web termasuk penggunaan kerangka Django dan Flask, pembangunan API, analisis data dan visualisasi, pembelajaran mesin dan AI, dan pengoptimuman prestasi. 1. Rangka Kerja Django dan Flask: Django sesuai untuk perkembangan pesat aplikasi kompleks, dan Flask sesuai untuk projek kecil atau sangat disesuaikan. 2. Pembangunan API: Gunakan Flask atau DjangorestFramework untuk membina Restfulapi. 3. Analisis Data dan Visualisasi: Gunakan Python untuk memproses data dan memaparkannya melalui antara muka web. 4. Pembelajaran Mesin dan AI: Python digunakan untuk membina aplikasi web pintar. 5. Pengoptimuman Prestasi: Dioptimumkan melalui pengaturcaraan, caching dan kod tak segerak

See all articles