Tích hợp Yolov8 vào RESTful API (Django + JS)

Để triển khai model Deep Learning có 2 cách: triển khai theo mô hình client-server hoặc tích hợp trực tiếp vào thiết bị cuối của người dùng. Bài viết này giới thiệu cách triển khai model YOLO v8 vào RESTful API để triển khai mô hình client-server.

Mô hình client-server có nhiều lợi ích khi sử dụng:

  • Đầu tư 1 server mạnh thay vì phải đầu tư nhiều thiết bị, giúp tiết kiệm chi phí (đối với 1 số bài toán)
  • Xử lý tập trung, đảm bảo đồng nhất dữ liệu khi có nhiều client
  • Dữ liệu được lưu lại trên server, dễ dàng xem lại kết quả
  • Dễ dàng cập nhật model mới: khi cần cập nhật chỉ cần cập nhật server
  • Dễ dàng mở rộng, tích hợp thêm các thuật toán khác

Nhược điểm:

  • Phải có năng lực triển khai server, hiểu được về Deep Learning lẫn Web mới có thể triển khai trơn tru
  • Phải xây dựng kế hoạch bảo mật, tránh được sự xâm nhập hoặc tấn công của hacker
  • Phải có đường truyền ổn định, phải đầu tư máy phát điện dự phòng và server backup (hoặc NAS)

Phần 1: lựa chọn công nghệ

1. Tại sao chọn Yolov8?

Yolov8 là phiên bản mới của dòng mô hình YOLO (You Only Look Once) được phát triển bởi Ultralytics, được biết đến với sự tối ưu về tốc độ và độ chính xác trong nhận diện đối tượng. Một số ưu điểm của Yolov8 bao gồm:

  • Nhận diện chính xác: cho kết quả đúng kể cả các bài toán phức tạp
  • Tốc độ nhanh: có khả năng xử lý thời gian thực (realtime) với mỗi ảnh full HD (1920×1080) khoảng 1xx ms.
  • Dễ dàng sử dụng: Yolov8 hỗ trợ nhiều ngôn ngữ lập trình (C++, Python,…)
  • Ổn định: vận hành tốt trong thời gian dài
  • Tương thích cao: hoạt động tốt với nhiều loại phần cứng như PC, Raspberry Pi, Jetson,…

2. Tại sao chọn Django?

Django là framework dùng làm web server bằng ngôn ngữ Python. So với Flask thì Django có nhiều ưu điểm hơn như hỗ trợ nhiều tính năng hơn, cộng đồng người dùng đông đảo hơn.

  • Được viết bằng Python nên dễ dàng tích hợp các thuật toán viết bằng Python
  • Khả năng mở rộng và tính năng mạnh mẽ: Hỗ trợ phát triển ứng dụng web quy mô lớn với tính năng ORM, hệ thống quản trị tự động, và biện pháp bảo mật hiệu quả.
  • Thư viện và cộng đồng lớn: Cộng đồng đông đảo với nhiều thư viện và gói mở rộng, giúp dễ dàng tìm kiếm tài liệu và nhận hỗ trợ.
  • Django REST Framework: Cung cấp tính năng quản lý quyền truy cập, và xác thực, giúp phát triển API nhanh chóng.
  • Thời gian phát triển nhanh: Cấu trúc rõ ràng và công cụ hỗ trợ mạnh mẽ giúp tiết kiệm thời gian và chi phí.
  • Hỗ trợ đa nền tảng: Khả năng xây dựng ứng dụng hoạt động trên nhiều nền tảng, từ máy tính để bàn đến thiết bị di động.
  • Quản lý cấu hình dễ dàng: Hệ thống cấu hình linh hoạt giúp quản lý cài đặt cho các môi trường khác nhau.

Nếu bạn đang phát triển một hệ thống web và muốn tích hợp Yolov8 để khai thác khả năng nhận diện này, Web Server – Raspango là một giải pháp tuyệt vời.

Trong bài viết này, chúng ta sẽ tìm hiểu cách tích hợp Yolov8 vào Django Web Server Raspango một cách chi tiết và hiệu quả.

3. Giới thiệu về Raspango

Raspango là chơi chũ của Raspberry Pi + Django. Ban đầu Raspango được thiết kế để chạy web server trên Raspberry Pi, sau thời gian dài cải tiến thì Raspango có thể ứng dụng cho nhiều mô hình web server khác nhau

Ưu điểm của Raspango:

  • Thiết kế dễ đọc, dễ hiểu: code backend nằm trong folder api, lib, module, code frontend nằm trong folder web
  • Tích hợp sẵn CSDL SQLite: dễ dàng cài đặt, triển khai vì SQLite chạy tốt trên nhiều môi trường. Đồng thời CSDL chỉ nằm trong 1 file db.sqlite3 nên dễ dàng backup
  • Dễ dàng mở rộng, tích hợp thêm các thư viện khác
  • Tích hợp sẵn các thư viện cần thiết
  • Dễ dàng triển khai lên server Ubuntu cùng với nginx uwsgi để phục vụ nhiều client

Đã có bài viết hướng dẫn cài đặt và sử dụng Raspango. Xem chi tiết bài viết tại link:
Raspango – source code server nhận diện hình ảnh

Phần 2. Hướng dẫn tích hợp Yolov8 vào RESTful API

Trong phần này, chúng ta sẽ cùng nhau khám phá các bước cần thiết để tích hợp mô hình YOLOv8 vào Raspango. Trong repository đã được cung cấp sẵn, bạn cũng có thể tùy ý tích hợp các mô hình khác theo nhu cầu của mình.

Bước 1: Clone source code cà cài đặt môi trường

Link download tại cuối bài viết

Cài đặt các thư viện bằng lệnh

pip install -r requirements.txt

Bước 2: Tạo module yolov8 để detect vật thể

Trong bước này, bạn sẽ tạo một module sử dụng Yolov8 để phát hiện các vật thể trong hình ảnh hoặc video. Sau khi tải repo yolov8, copy repo yolov8 vào thư mục module\YOLOv8. Bạn cần tạo instance của class Yolov8 để load model và gọi hàm predict.

Folder module được thiết kế để tích hợp nhiều module của các bài toán khác nhau

Bước 3: Khai báo url API phù hợp

Sau khi hoàn tất việc tạo module Yolov8, tiến hành khai báo url của backend API để cho phép người dùng tương tác với mô hình phát hiện đối tượng. Sử dụng Django REST Framework để định nghĩa các endpoint cho API, tạo các endpoint để gửi hình ảnh và nhận phản hồi với các thông tin về các đối tượng được phát hiện.

Lưu ý cần có phương pháp xác thực, VD như jwt token

Bước 4: Xây dựng giao diện với JavaScript

Tiếp theo, bạn sẽ xây dựng giao diện người dùng bằng JavaScript. Giao diện này sẽ cho phép người dùng tải lên hình ảnh hoặc chụp ảnh từ webcam, sau đó chuyển sang string base64 để gửi đến RESTful API.

Quy ước là data ảnh chuyển về base64 để đảm bảo phục vụ được nhiều client khác nhau, nhiều ngôn ngữ khác nhau. Cho dù bạn viết chương trình client bằng Javascript, C#, C++, Python, Java,… thì hình ảnh đều chuyển sang base64 dễ dàng và thống nhất.

Sau khi nhận được phản hồi từ server, giao diện sẽ hiển thị các đối tượng đã được phát hiện trên hình ảnh.

Bước 5: Kiểm tra kết quả

Chạy file start.bat để start server, vào menu Detect object YOLO v8 chọn ảnh, kết quả hiện ra như hình dưới là được.

Download

🔗 https://github.com/thigiacmaytinh/Raspango
🔗 https://github.com/ultralytics/ultralytics