Hệ thống phát gạo nhận diện khuôn mặt (Phần 2)

Tram Ho

Trong phần 1, ta đã xây dựng hệ thống AI cho server. Trong phần 2, ta sẽ xây dựng server cho bài toán.
Hãy tạo các file:

  • config.py
  • utils.py
  • main.py
  • Dockerfile

Trước khi đi vào coding cụ thể, mình muốn giải thích qua các giải quyết logic của mình ở server. Mỗi ngày, khi khởi động hệ thống sẽ tạo ra 1 folder của ngày hôm đó, bên trong là các folder từng quận để lưu trữ mặt người đến lấy gạo. Lí do mà mình không sử dụng database là vì trong này chúng ta chỉ cần lưu trữ ảnh thôi. Nếu bạn muốn “fancy” hơn có thể cân nhắc đến các storage như Minio, …

Coding

Đầu tiên, ta hãy viết file config.py. Trong file này chúng ta sẽ có các giá trị cần thiết cho server thay vì mỗi nơi bạn config 1 tí.

Trên cùng là ta config các tham số cho 2 class mà ta đã viết ở phần 1. Tiếp theo là về các địa điểm địa lý như Quận và các phường. Việc lưu dữ liệu riêng biệt như thế này có thể giúp bạn triển khai thêm cả ví dụ một hệ thống thống kê người đi mua gọa các phương ra sao, …
Còn data_path: vị trí root cảu nơi lưu trữ ảnh.
Tiếp theo là, file utils.py:

Hàm trên có tác dụng tạo ra các folder của ngày hôm đó theo dạng như dưới đây:

struct

Giờ thì chúng ta sẽ xây dựng server FLASK ở trên main.py:

  • Khởi tạo app Flask và các biến:

Ta sẽ khởi tạo các biến như mô hình nhận diện mặt và đồ thị tìm kiếm, … Tất cả đượ khởi tọa trong hàm init. Sau khi khởi tạo, ta sẽ thêm tất cả các ảnh đúng cảu ngày hôm đó vào đồ thị , trừng hợp server tắt giữa chừng và khởi động lại.
Các hàm phụ, mọi người nhìn cũng biết tác dụng rồi phải không.

Và API hàm xử lý ảnh:

Ở đây mình sẽ lưu toàn bộ ảnh được query đến. Nếu chính xác sẽ ở thư mục true, sai thì sẽ là nằm ở thwu mục false. Mình nghĩ đây là một thói quen tốt để lưu toàn bộ dữ liệu lại cho dù có sai, vì dữ liệu có thể chuyển đội sang các bài toán khác nữa. (Hoặc là bán ?)
Giờ thì khởi tạo và chạy nào:

Các bạn có thể sử dụng flask thay thế cho việc viết main để chạy python như vậy. Nhưng mình chỉ lưu ý các bạn để host là 0.0.0.0 thay vì mặc định nhé, vì mặc định localhost thì khi sử dụng docker sẽ không expose được cổng ra ngoài đâu.

Viết Dockerfile:

  • Hãy cài đặt pipreqs để tạo ra file reuirements.txt gồm các thư viện cần thiết, sau đó chạy lệnh pipreqs .
  • Viết nội dung Dockerfile như dưới đây

Kết quả

Đây là vài kết quả mà bạn có sau khi xây dụng xong server:

api /district

api /wards

api /face

Vậy là ta đã hoàn thiện phần server, phần cuối cùng chúng ta sẽ xây dựng hệ thống Frontend bằng ReactJS.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo