Kịch bản xem toàn bộ camera trong trang trại

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ GIÁM SÁT LỢN QUA CAMERA SỬ DỤNG YOLOv4 DeepSORT (Trang 96 - 102)

3.1.2. Phân tích hệ thống

3.1.2.1. Xây dựng biểu đồ lớp thực thể (pha phân tích)

Dựa vào phần mô tả hệ thống, ta xây dựng lớp thực thể với mối quan hệ như sau:

Hình 3.66. Sơ đồ lớp thực thể

Phân tích mối quan hệ giữa các lớp thực thể để bổ sung các lớp thực thể còn thiếu và xác định thuộc tính của các thực thể:

 Lớp User chứa thông tin cá nhân của người dùng: tên, số điện thoại, email, địa chỉ, ngày sinh. Có mối quan hệ 1-1 với thực thể Account.

 Lớp Account chứa thông tin tài khoản hệ thống: username, password, active, activeCode, ngày tạo, ngày cập nhật. Account có mối quan hệ 1-1 với User và Role.

 Lớp Roles chứa thông tin về quyền của Account bao gồm trường: tên của quyền. Quan hệ của Role và Account là 1-1.

 Lớp Farms chứa thông tin về các trang trại gồm các trường: tên trang trại, địa chỉ trang trại, chủ trang trại. Quan hệ giữa lớp Account với lớp Farms là 1-n. Quan hệ giữa lớp Farms với Pens là 1-n.

 Lớp Pens chứa thông tin về chuồng nuôi gồm các trường: tên chuồng, sức chứa, ghi chú. Quan hệ giữa lớp Pens và lớp Pigs là 1-n. Quan hệ giữa lớp Pens với lớp Events là 1-n.

 Lớp Pigs chứa thông tin về lợn bao gồm các trường: mã theo dõi, ngày sinh, tình trạng sức khỏe, cân nặng, ngày nhập chuồng. Quan hệ giữa lớp Pigs với

WeightType là n-1.

 Lớp Events chứa thông tin về sự kiện chuồng nuôi bao gồm các trường: tên sự kiện, mô tả, ngày bắt đầu, ngày kết thúc, loại sự kiện. Quan hệ giữa lớp Events với EventType là n-1.

 Lớp WeightType chứa thông tin về loại cân nặng của lợn bao gồm các trường: tên loại cân nặng, ghi chú. Quan hệ giữa lớp WeightType và Pigs là 1-n

 Lớp EventType chứa thông tin về loại sự kiện của chuồng nuôi bao gồm các trường: tên loại sự kiện, mô tả. Quan hệ giữa EventType với Events là 1-n. Kết quả thu được biểu đồ lớp thực thể pha phân tích toàn hệ thống:

Hình 3.67. Sơ đồ lớp thực thể pha phân tích

3.1.3. Thiết kế hệ thống

3.1.3.1. Mô hình kiến trúc tổng thể hệ thống

Mô hình kiến trúc của hệ thống gồm các thành phần sau:

Hình 3.68. Mô hình kiến trúc tổng thể hệ thống

 PigAI Service: Được viết bằng ngôn ngữ Nodejs, giúp các ứng dụng front-end bên ngoài có thể giao tiếp với hệ thống qua các REST API, đồng thời xử lý nghiệp vụ của hệ thống, lưu trữ và thao tác truy vấn cơ sở dữ liệu. Bao gồm các thao tác CRUD với các bảng.

 Streaming Service: Được viết bằng Python, sử dụng thư viện Flask để xây dựng RESTful API, Waitress làm WSGI server. Bao gồm API lấy luồng streaming video từ camera. Service bao gồm các api và sử dụng model YOLOv4 để nhận diện lợn và Deepsort để theo dõi, đánh ID cho lợn như đã trình bày ở chương 2. Sau khi nhận được các Frame trả về từ camera thông qua giao thức RTSP, mỗi frame được chạy qua một lớp nhận diện và tracking vẽ bounding box trên frame và trả frame trực tiếp về cho client.

 MongoDB Database: thích hợp cho lưu trữ dữ liệu lớn. Và vì MongoDB là hệ cơ sở dữ liệu phi cấu trúc nên việc mở rộng hệ thống sau này dễ dàng hơn. Chứa toàn bộ dữ liệu của hệ thống.

 Camera NVR Devices: một hoặc nhiều camera gắn với đầu ghi (NVR) gắn tại các trang trại. Streaming Service dụng thư viện OpenCV để kết nối tới camera và lấy hình ảnh của camera thông qua Streaming URL.

 Front-end Application: là một WebApp được xây dựng bằng Framework ReactJS. Gửi request tới PigAI Service để thực hiện các thao tác với dữ liệu, gửi request tới Streaming Service để lấy luồng streaming và hiển thị lên giao diện.

3.1.3.2. Sơ đồ lớp pha thiết kế

Dựa vào sơ đồ lớp pha phân tích, chuyển đổi quan hệ và lựa chọn ngôn ngữ NodeJS với NameConvention tương ứng, em thu được biểu đồ lớp thực thể pha thiết kế:

Hình 3.69. Sơ đồ lớp pha thiết kế

3.1.3.3. Thiết kế cơ sở dữ liệu

Đầu vào là biểu đồ lớp thực thể pha thiết kế, em tiến hành các bước sau:

 Bước 1: Với mỗi lớp thực thể, đề xuất một bảng dữ liệu tương ứng. Đặt tên bảng theo tên class. Ví dụ, lớp thực thể là Farms thì tên bảng tương ứng là Farms.  Bước 2: Với mỗi lớp thực thể, bỏ qua các thuộc tính kiểu đối tượng, lấy thuộc

tính kiểu cơ bản đưa sang làm thuộc tính bảng tương ứng.

 Bước 3: Xét quan hệ giữa các lớp thực thể. Quan hệ giữa các lớp thực thể cũng là quan hệ số lượng giữa hai bảng tương ứng.

 Bước 4: Bổ sung các khóa cho bảng:

 Khóa chính (Primary key - PK): Thiết lập khóa chính cho thuộc tính id của bảng

 Khóa ngoại (Foreign Key - FK): hai bảng tblA và tblB có quan hệ 1-n, em để khóa ngoài tham chiếu đến khóa chính của bảng tblA.

Biểu đồ cơ sở dữ liệu của hệ thống:

3.2. PHÁT TRIỂN ỨNG DỤNG 3.2.1. Streaming Service

Service được viết bằng Python. Lý do em chọn Python cho Streaming Service vì chính yêu cầu của service. Đó là truyền realtime video từ camera tới người dùng và tích hợp mô hình nhận diện và tracking lợn. Dựa vòa những yêu cầu đó, Python chính là lựa chọn tối ưu nhất vì những thư viện mà nó cung cấp cho ứng dụng học máy. Em sử dụng thư viện Flask để xây dựng RESTful API, Waitress làm WSGI server. Bao gồm API lấy luồng streaming video từ camera. Service bao gồm các api và sử dụng model YOLOv4 để nhận diện lợn và Deepsort để theo dõi, đánh ID cho lợn như đã trình bày ở chương 2. Sau khi nhận được các Frame trả về từ camera thông qua giao thức RTSP, mỗi frame được chạy qua một lớp nhận diện và tracking vẽ bounding box trên frame và trả frame trực tiếp về cho client.

3.2.1.1. Thư viện sử dụng

Thư viện Ý nghĩa

tensorflow Load model YOLOv4 để nhận diện lợn. opencv

Kết nối với camera hoặc load video thông qua streaming URL. Chuyển các dạng màu của ảnh, resize frame và thêm chữ lên ảnh.

numpy Giúp tính toán mảng nhiều chiều với các hàm đã được tối ưu áp dụng lên các mảng nhiều chiều đó.

flask Giúp xây dựng API cho Python

Với các tính năng như route url, template engine flask-cors

Một cơ chế cho phép nhiều tài nguyên khác nhau (fonts, Javascript, v.v…) của một trang web có thể được truy vấn từ domain khác nhau.

gc Viết tắt của Garbage Collection – Thư viện giúp dọn dẹp vùng nhớ của biến đã bị kill.

apiController.py Xử lí việc tiếp nhận các API request từ phía Coupon Management backend

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ GIÁM SÁT LỢN QUA CAMERA SỬ DỤNG YOLOv4 DeepSORT (Trang 96 - 102)