Cara Membuat Aplikasi Computer Vision Dengan Dua Fungsi Python Dalam Hitungan Menit

Cara Membuat Aplikasi Computer Vision Dengan Dua Fungsi Python

Artikel ini dimulai dengan memberikan ikhtisar tentang persyaratan umum aplikasi Computer Vision. Kemudian, pembaca diperkenalkan dengan Pipeless, sebuah kerangka kerja sumber terbuka yang menyediakan pengalaman pengembangan tanpa server untuk visi komputer tertanam.

Pada akhirnya, artikel memberikan panduan langkah demi langkah yang terperinci tentang cara membuat dan menjalankan aplikasi pendeteksi objek sederhana dengan Computer Vision. Proses ini hanya memerlukan beberapa fungsi Python dan pembuatan model untuk memulai.

Membangun Aplikasi Visi Komputer: Pandangan Mendalam


Jika kita ingin merinci “computer vision” dalam satu kalimat, kita dapat menggambarkannya sebagai “seni mengenali dan merespons peristiwa visual melalui antarmuka kamera.” Namun, untuk memahaminya lebih dalam, mari jelajahi bagaimana aplikasi Computer Vision dibangun dan tugas-tugas yang harus diemban oleh setiap subsistem.

1. Pemrosesan Frame yang Sangat Cepat:

  • Untuk memproses streaming video 60 fps secara real-time, setiap frame hanya memiliki 16 milidetik untuk diproses.
  • Penggunaan multithreading dan multiprosesing penting untuk mencapai pemrosesan frame yang sangat cepat.
  • Pemrosesan frame selalu diinginkan untuk dimulai sebelum frame sebelumnya selesai.

2. Model AI untuk Inferensi:

Read More
  • Model AI menjalankan inferensi pada setiap frame untuk tugas seperti deteksi objek, segmentasi, estimasi pose, dan lainnya.
  • Pilihan model open source yang unggul dapat mengurangi kebutuhan untuk membuat model dari awal, hanya dengan penyesuaian parameter agar sesuai dengan kasus penggunaan.

3. Waktu Proses Inferensi:

  • Waktu proses inferensi bertanggung jawab untuk memuat dan menjalankan model secara efisien pada berbagai perangkat (GPU atau CPU).
  • Penggunaan GPU diperlukan agar model dapat menjalankan inferensi dengan cepat, karena GPU dapat menangani lebih banyak operasi paralel daripada CPU.

4. Multimedia Pipelines:

  • Komponen ini memungkinkan pengambilan aliran video dari sumber data, pemrosesan frame, penggunaan sebagai masukan untuk model, dan kadang-kadang modifikasi dan rekonstruksi aliran video untuk diteruskan.

5. Manajemen Aliran Video:

  • Kemampuan aplikasi untuk menangani gangguan pada aliran video, menyambung kembali, menambah dan menghapus aliran video secara dinamis, menangani beberapa aliran video secara bersamaan, dll.
  • Manajemen aliran video memerlukan penanganan yang baik untuk memastikan kelancaran proses.

Tantangan Umum:

  • Pemeliharaan besar kode yang tidak spesifik untuk aplikasi, tetapi lebih ke subsistem yang mencakup kode spesifik kasus penggunaan nyata.
  • Kode perlu dipelihara untuk memastikan kinerja dan fungsi yang diinginkan dari setiap subsistem.

Dalam membangun aplikasi Computer Vision, keseluruhan ekosistem subsistem ini harus dirancang dan diimplementasikan secara hati-hati untuk mencapai kinerja dan respons yang diinginkan. Baca juga Poin Penting Belajar Computer Vision Untuk Pemula Dengan Mudah.

Pemeliharaan kode dan manajemen subsistem adalah faktor penting untuk memastikan kelancaran operasional aplikasi visi komputer yang kompleks.

Kerangka Kerja Pipeless: Solusi Tanpa Pipa untuk Pengembangan Computer Vision


Untuk menghindari kompleksitas membangun elemen-elemen inti dari awal, kerangka kerja Pipeless menawarkan alternatif yang kuat. Ini merupakan kerangka kerja sumber terbuka khusus untuk visi komputer, memungkinkan implementasi fungsi khusus kasus dan menangani sejumlah tugas lainnya.

Cara Kerja Pipeless:

  • Logika aplikasi dipecah menjadi “tahapan”, di mana setiap tahapan dapat dianggap sebagai aplikasi mikro untuk satu model.
  • Tahapan dapat mencakup prapemrosesan, menjalankan inferensi dengan masukan yang telah diproses, dan pascapemrosesan keluaran model untuk tindakan.
  • Tahapan dapat dirangkai sesuai kebutuhan, memungkinkan pembentukan aplikasi yang lengkap dengan menggunakan beberapa model.

Penggunaan Logika pada Tahapan:

  • Logika pada setiap tahapan diimplementasikan melalui penambahan fungsi kode khusus aplikasi.
  • Pipeless akan memanggil fungsi ini sesuai kebutuhan, memberikan fleksibilitas tinggi dalam pengembangan aplikasi.

Manajemen Dinamis Aliran Video:

  • Pipeless memungkinkan otomatisasi pemrosesan aliran video dengan menambahkan, menghapus, dan memperbarui aliran video secara dinamis melalui CLI atau REST API.
  • Kebijakan mulai ulang dapat ditentukan, menentukan kapan pemrosesan streaming video harus dimulai ulang, atau apakah harus dimulai ulang setelah terjadi kesalahan.

Implementasi Mudah:

  • Instalasi dan penggunaan Pipeless sangat mudah.
  • Dapat dijalankan di berbagai lingkungan, termasuk mesin virtual cloud, mode dalam container, atau langsung di perangkat edge seperti Nvidia Jetson atau Raspberry.

Kerangka kerja Pipeless memberikan pengalaman pengembangan yang mirip dengan server untuk visi komputer tertanam. Dengan menyediakan fungsionalitas tanpa perlu memikirkan subsistem tambahan, Pipeless mempercepat dan menyederhanakan proses pengembangan aplikasi visi komputer yang kompleks.

Baca juga 7 Contoh Penerapan Computer Vision Dalam Kehidupan Sehari-Hari.

Membuat Aplikasi Computer Vision Pendeteksi Objek


Berikut ini penjelasan mendalam tentang cara membuat aplikasi pendeteksi objek sederhana menggunakan framework Pipeless.

Yang pertama adalah instalasi. Instal skrip untuk membuat instalasi menjadi sangat sederhana:

Curl https://raw.githubusercontent.com/pipeless-ai/pipeless/main/install.sh | bash

Sekarang, sebuah proyek harus dibuat. Proyek Pipeless adalah direktori yang berisi tahapan. Setiap tahap ada dalam subdirektori, dan di setiap subdirektori, file yang berisi kait (fungsi kode tertentu) dibuat. Nama yang diberikan untuk setiap folder tahapan adalah nama tahapan yang harus ditunjukkan ke kotak Pipeless nanti ketika Anda ingin menjalankan tahapan tersebut untuk streaming video.

pipeless init my-project --template empty
cd my-project

Di sini, template kosong memberitahu CLI untuk membuat direktori saja, jika tidak ada template yang disediakan, CLI akan menanyakan beberapa pertanyaan untuk membuat tahapan secara interaktif.

Seperti disebutkan di atas, Anda sekarang perlu menambahkan fase ke proyek Anda. Gunakan perintah berikut untuk mengunduh contoh tahapan dari GitHub:

wget -O - https://github.com/pipeless-ai/pipeless/archive/main.tar.gz | 
  tar -xz --strip=2 "pipeless-main/examples/onnx-yolo"

Ini akan membuat direktori panggung onnx-yolo yang berisi fungsi aplikasi.

Kemudian, isi setiap file tahapan, yang dikenal sebagai application hooks, diperiksa.

Ada file pre-process.py yang mendefinisikan fungsi (kait) yang menerima bingkai dan adegan. Fungsi ini melakukan beberapa operasi untuk menyiapkan data masukan yang menerima frame RGB agar sesuai dengan format yang diharapkan oleh model. Data ini ditambahkan ke frame_data[‘interence_input’], yang merupakan data yang akan diteruskan Pipeless ke model.

def hook(frame_data, context):
    frame = frame_data["original"].view()
    yolo_input_shape = (640, 640, 3) # h,w,c
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    frame = resize_rgb_frame(frame, yolo_input_shape)
    frame = cv2.normalize(frame, None, 0.0, 1.0, cv2.NORM_MINMAX)
    frame = np.transpose(frame, axes=(2,0,1)) # Convert to c,h,w
    inference_inputs = frame.astype("float32")
    frame_data['inference_input'] = inference_inputs
... (some other auxiliar functions that we call from the hook function)

Ada juga file process.json, yang menunjukkan runtime inferensi Pipeless yang akan digunakan (runtime ONNX dalam kasus ini), di mana menemukan model yang harus dimuat, dan beberapa parameter opsionalnya, seperti penyedia_eksekusi yang akan digunakan, yaitu CPU , CUDA, TensorRT, dll.

{ 
    "runtime": "onnx",
    "model_uri": "https://pipeless-public.s3.eu-west-3.amazonaws.com/yolov8n.onnx",
    "inference_params": { 
        "execution_provider": "tensorrt" 
    }
}

Terakhir, file post-process.py mendefinisikan fungsi yang mirip dengan yang ada di pre-process.py. Kali ini, ia menerima keluaran inferensi yang disimpan Pipeless di frame_data[“inference_output”] dan melakukan operasi penguraian keluaran tersebut ke dalam kotak pembatas. Kemudian, ia menggambar kotak pembatas pada bingkai dan akhirnya menetapkan bingkai yang dimodifikasi ke frame_data[‘modified’]. Dengan cara ini, Pipeless akan meneruskan aliran video yang disediakan, tetapi dengan bingkai yang dimodifikasi, termasuk kotak pembatas.

def hook(frame_data, _):
    frame = frame_data['original']
    model_output = frame_data['inference_output']
    yolo_input_shape = (640, 640, 3) # h,w,c
    boxes, scores, class_ids = 
           parse_yolo_output(model_output, frame.shape, yolo_input_shape)
    class_labels = [yolo_classes[id] for id in class_ids]
    for i in range(len(boxes)):
        draw_bbox(frame, boxes[i], class_labels[i], scores[i])

    frame_data['modified'] = frame

... (some other auxiliar functions that we call from the hook function)

Langkah terakhir adalah memulai Pipeless dan menyajikan streaming video. Untuk memulai Pipeless, jalankan saja perintah berikut di direktori proyek:

pipeless start --stages-dir.

Setelah dijalankan, aliran video dari webcam (v4l2) akan disediakan dan outputnya akan ditampilkan langsung di layar. Perlu dicatat bahwa daftar tahapan yang dijalankan aliran video secara berurutan harus disediakan. Dalam contoh ini hanya tahap onnx-yolo:

pipeless add stream --input-uri "v4l2" --output-uri "screen" --frame-path "onnx-yolo"

Kesimpulan

Membuat aplikasi computer vision merupakan tugas yang kompleks karena banyak faktor dan subsistem yang harus diimplementasikan di sekitarnya. Dengan kerangka kerja seperti Pipeless, memulai dan menjalankannya hanya membutuhkan waktu beberapa menit, sehingga Anda dapat fokus menulis kode untuk kasus penggunaan tertentu. Selain itu, “tahapan” Pipeless sangat dapat digunakan kembali dan mudah dirawat, sehingga pemeliharaan akan mudah dan dapat diulang dengan sangat cepat.

Related posts

Leave a Reply

Your email address will not be published. Required fields are marked *