Hệ thống được thiết kế để hỗ trợ ba bài toán gán nhãn quan trọng, đó là Object detection, Semantic segmentation, và Image classification. Ngoài ra, hệ thống cũng hỗ trợ người dùng trong việc quản lý và thực hiện công việc hiệu quả. Cụ thể, các worker được cung cấp các gợi ý gán nhãn thông qua các mô hình học máy được tích hợp, và các công cụ xử lý ảnh để phục vụ cho công việc. Người yêu cầu dễ dàng nhận được kết quả tổng hợp công việc, đối chiếu/so sánh công việc giữa các worker. Do đó, hệ thống là một cách tiếp cận hiệu quả cho việc giải quyết thách thức gán nhãn một lượng lớn dữ liệu.
GIỚI THIỆU
Đặt vấn đề
Hiện nay, sự phát triển mạnh mẽ cuộc Cách mạng công nghiệp 4.0 đã mở ra cơ hội lớn cho việc nghiên cứu và phát triển các ứng dụng Trí tuệ nhân tạo (Artificial Intelligence - AI) AI được coi là một công nghệ then chốt nhằm nâng cao tính tự động hoá, tăng hiệu suất xử lý và dần thay thế con người trong nhiều công việc đặc thù Theo thống kê [1], doanh thu của lĩnh vực AI trên toàn cầu đã đạt 156,5 tỷ USD trong năm 2020, và tiếp tục tăng trong các năm tiếp theo Để giúp cho các ứng dụng trí tuệ nhân tạo gia tăng tính chính xác và mức độ hiệu quả, các nhà phát triển cần một lượng lớn các tập dữ liệu đầu vào và các nhãn chú thích của chúng Phần dữ liệu mô tả này, sau đó sẽ được sử dụng để huấn luyện các mô hình học máy cũng như việc đánh giá hiệu quả của hệ thống Hiện nay, các tập dữ liệu thô có số lượng rất lớn, tuy vậy lượng dữ liệu được gán nhãn chỉ chiếm một phần nhỏ Việc xây dựng những bộ dữ liệu gán nhãn đòi hỏi một khối lượng lớn công sức và thời gian, khiến nó trở thành một rào cản đối với mọi nhà phát triển ứng dụng Trí tuệ nhân taọ Để giải quyết vấn đề này, họ có thể tự đầu tư, xây dựng bộ dữ liệu gán nhãn Tuy nhiên, tính khả thi của giải pháp này không cao bởi hạn chế về nguồn lực hiện có, cũng như việc sử dụng lượng lớn lao động chỉ cho một giai đoạn cụ thể Một lựa chọn khác là tìm đến sự hỗ trợ của lực lượng lao động tự do - freelancer trong việc gán nhãn dữ liệu
Crowdsourcing (tìm kiếm nguồn lực từ đám đông) [2] là một mô hình tìm kiếm nguồn nhân lực, trong đó một cá nhân hoặc tổ chức kêu gọi sự tham gia thực hiện của cộng đồng thông qua mạng Internet để giải quyết một công việc nào đó Các công việc được hỗ trợ rất đa dạng như lập trình, thiết kế ý tưởng, thiết kế logo, khảo sát ý kiến, v.v Người tham gia hỗ trợ có thể nhận được các phần thưởng từ người kêu gọi cho phần công việc thực hiện.Với khả năng kết nối mạnh mẽ, thuận tiện đến một lượng lớn nhân lực tự do, crowsourcing là một hình thức phù hợp để triển khai các công việc cần thực hiện trong khoảng thời gian ngắn, có khối lượng công việc lớn, hay không định kỳ Chính vì vậy, mô hình này hoàn toàn phù hợp để áp dụng cho bài toán gán nhãn dữ liệu Hiện nay ở Việt Nam, cũng đã có một số hệ thống crowdsourcing, nhưng chưa có một hệ thống nào hỗ trợ thuận tiện cho bài toán gán nhãn dữ liệu
Nhận thấy được các vấn đề trên, đồ án này sẽ trình bày việc xây dựng một hệ thống crowdsourcing, giúp kết nối những người cần thuê gán nhãn dữ liệu (người yêu cầu) và những người thực hiện gán nhãn dữ liệu (người lao động) Hệ thống cung
2 cấp các cơ chế như tổng hợp kết quả, đánh giá chất lượng công việc của người lao động Trong giới hạn thời gian thực hiện đồ án, hệ thống hiện đưa ra giải pháp cho ba bài toán bao gồm phân loại ảnh, phát hiện đối tượng và phân đoạn ngữ nghĩa
Lý do lựa chọn ba bài toán này vì chúng có sự tương đồng và là những mũi nhọn nghiên cứu trong lĩnh vực Trí tuệ nhân tạo.
Mô tả đề tài
Hệ thống là một trang web cho phép kết nối người cần thuê gán nhãn dữ liệu (requester) và người lao động (worker) Các chức năng chính hệ thống cung cấp bao gồm: đăng công việc gán nhãn; tìm kiếm công việc; quản lý, tổng hợp, đánh giá kết quả gán nhãn; đánh giá chất lượng làm việc của người gán nhãn Ngoài ra, hệ thống cũng cung cấp các công cụ hỗ trợ cho việc gán nhãn dữ liệu, nhằm giảm thiểu công sức của người lao động và gia tăng độ chính xác
Ba bài toán mà hệ thống hỗ trợ:
- Object detection (Phát hiện đối tượng): Xác định vị trí hiện diện của các đối tượng trong các hình hộp giới hạn theo các nhãn khác nhau Hệ thống hỗ trợ worker các công cụ như phóng to, thu nhỏ, di chuyển, thay đổi độ tương phản, độ sáng của ảnh; vẽ, xoá, ẩn, hiện đường bao quanh đối tượng; hoàn tác thao tác; sử dụng mô hình AI có sẵn để tạo ra các đường bao
- Semantic segmentation (Phân đoạn ngữ nghĩa): Xác định các đối tượng bằng đường bao quanh của chúng sử dụng những nhãn cho trước Hệ thống hỗ trợ worker tương tự như bài toán Object detection
- Image classification (Phân loại ảnh): Xác định nhãn của bức ảnh là gì Hệ thống hỗ trợ worker các công cụ như phóng to, thu nhỏ, di chuyển ảnh
Một công việc do requester tạo sẽ được hệ thống phân chia thành nhiều phân công công việc, giao cho mỗi worker một phần việc Mỗi phân công gồm nhiều bức ảnh cần được gán nhãn Ngoài ra, một phân công có thể được giao cho nhiều người cùng thực hiện để tăng độ tin cậy về kết quả.
Bố cục tổng quan
Đồ án bao gồm 5 chương có nội dung như sau:
Chương 1: Trình bày thực trạng thiếu hụt nguồn dữ liệu được gán nhãn trong các hệ thống trí tuệ nhân tạo, nguyên nhân của vấn đề này Từ đó đưa ra giải pháp để giải quyết vấn đề trên
Chương 2: Phân tích yêu cầu của hệ thống, bao gồm các đối tượng sử dụng, quy trình nghiệp vụ, biểu đồ hoạt động, biểu đồ ca sử dụng, đặc tả ca sử dụng và các yêu cầu phi chức năng của hệ thống
Chương 3: Thiết kết hệ thống, bao gồm các biểu đồ mô hình hoá cấu trúc, mô hình hoá sự tương tác, thiết kế chi tiết lớp, cơ sở dữ liệu, thiết kế giao diện, kiến trúc hệ thống và các bài toán được hỗ trợ
Chương 4: Các công nghệ mà hệ thống sử dụng, trình bày chi tiết các bài toán, đánh giá hiệu năng của hệ thống và kết quả đạt được
Chương 5: Trình bày kết luận, những gì đã làm được, chưa làm được của đồ án và đưa ra hướng phát triển trong tương lai
PHÂN TÍCH HỆ THỐNG
Các tác nhân
Hệ thống có 4 tác nhân là Guest, Requester, Worker, Admin
• Guest là người truy cập vào hệ thống nhưng chưa đăng nhập Sau khi đăng nhập thành công Guest sẽ trở thành Requester, Worker, Admin tương ứng với vai trò của mình
• Requester là người thuê gán nhãn dữ liệu.
• Worker là người thực hiện gán nhãn dữ liệu
• Admin là người quản trị hệ thống, có quyền xoá tài khoản, xoá công việc, xoá bình luận.
Biểu đồ ca sử dụng
Biểu đồ ca sử dụng tổng quan
Hình 2.1 Biểu đồ ca sử dụng tổng quan
Biểu đồ phân rã ca sử dụng Requester quản lý công việc
Hình 2.2 Biểu đồ phân rã ca sử dụng Requester quản lý công việc
Biểu đồ phân rã ca sử dụng Tìm kiếm worker
Hình 2.3 Biểu đồ phân rã ca sử dụng Tìm kiếm worker
Biểu đồ phân rã ca sử dụng Tìm việc làm
Hình 2.4 Biểu đồ phân rã ca sử dụng Tìm việc làm
Đặc tả ca sử dụng
Ca sử dụng UC01: Đăng ký
Mã usecase UC01 Tên usecase Đăng ký
Mục đích sử dụng Đăng ký để tạo tài khoản người dùng mới
Sự kiện kích hoạt Khi click vào button "Đăng ký"
Luồng sự kiện chính STT Thực hiện Hành động
1 Guest Chọn chức năng đăng ký
2 Hệ thống Hiển thị màn hình đăng ký
3 Guest Nhập thông tin (mô tả phía dưới *)
4 Guest Yêu cầu đăng ký
5 Hệ thống Kiểm tra xem Guest đã nhập hợp lệ các trường bắt buộc nhập hay chưa Kiểm tra email đã tồn tại hay chưa
6 Hệ thống Tạo tài khoản, trả về thông báo thành công
Luồng sự kiện thay thế STT Thực hiện Hành động
5a Hệ thống Thông báo lỗi: Cần nhập các trường bắt buộc nhập nếu Guest nhập thiếu
5b Hệ thống Thông báo lỗi: Các trường nhập không đúng định dạng 5c Hệ thống Thông báo lỗi: Email đã tồn tại 6a Hệ thống Tạo tài khoản lỗi: Thông báo lỗi
Hậu điều kiện Guest đăng ký thành công tài khoản, hệ thống đã lưu tài khoản mới, sẵn sàng đăng nhập
Bảng 2.1 Bảng đặc tả ca sử dụng Đăng ký
Dữ liệu đầu vào các trường thông tin cá nhân gồm
STT Trường dữ liệu Mô tả Bắt buộc? Điều kiện hợp lệ
1 Email có duong@gmail.com
2 Họ tên có Nguyễn Tùng Dương
5 Xác nhận mật khẩu có 123456
7 Vai trò Requester hoặc worker có worker
8 Ảnh đại diện không https://cloudinary.com/abc
Bảng 2.2 Bảng dữ liệu đầu vào ca sử dụng Đăng ký
Ca sử dụng UC02: Đăng nhập
Mã usecase UC02 Tên usecase Đăng nhập
Mục đích sử dụng Xác thực người dùng, cho phép người dùng sử dụng các chức năng của tác nhân "admin", "requester", "worker"
Sự kiện kích hoạt Guest click vào button đăng nhập
Luồng sự kiện chính STT Thực hiện Hành động
1 Guest chọn chức năng Đăng nhập
2 Hệ thống Hiển thị màn hình đăng nhập
3 Guest Nhập email, mật khẩu, vai trò (mô tả phía dưới *)
4 Guest Yêu cầu đăng nhập
5 Hệ thống Kiểm tra tính hợp lệ và đầy đủ của các trường Guest nhập
6 Hệ thống Kiểm tra tài khoản tồn tại hay không
7 Hệ thống Chuyển hướng đến màn hình "Trang chủ"
Luồng sự kiện thay thế STT Thực hiện Hành động
5a Hệ thống Thông báo lỗi : Guest cần nhập các trường bắt buộc nếu thiếu
6a Hệ thống Thông báo lỗi : Thông tin đăng nhập không đúng nếu không tìm thấy thông tin như Guest nhập
Hậu điều kiện Hệ thống lưu thông tin đăng nhập của người sử dụng, tạo lập một phiên hoạt động, lưu trạng thái, cho phép người sử dụng có thể sử dụng các chức năng và vai trò của họ
Bảng 2.3 Bảng đặc tả ca sử dụng Đăng nhập
Dữ liệu đầu vào của thông tin cá nhân bao gồm những trường sau:
Bắt buộc? Điều kiện hợp lệ
1 Email có duong@gmail.com
Bảng 2.4 Bảng dữ liệu đầu vào ca sử dụng Đăng nhập
Ca sử dụng UC03: Worker tìm kiếm việc làm
Mã usecase UC03 Tên usecase Worker tìm kiếm việc làm
Mục đích sử dụng Cho phép người dùng tìm kiếm việc làm theo các giá trị của từng thuộc tính
Sự kiện kích hoạt Người dùng click vào tìm kiếm việc làm
Luồng sự kiện chính STT Thực hiện Hành động
1 Worker Chọn chức năng "tìm kiếm việc làm"
2 Hệ thống Hiển thị màn hình tìm kiếm việc làm
3 Worker Nhập các trường tìm kiếm (mô tả phía dưới *)
4 Worker Ấn chọn tìm kiếm
5 Hệ thống Thực hiện truy vấn vào cơ sở dữ liệu theo các trường đã nhập
6 Hệ thống Trả về danh sách tìm kiếm
7 Worker Ấn nút yêu cầu nhận việc trên công việc mong muốn
8 Hệ thống Lưu thông tin yêu cầu làm việc của worker
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống trả về danh sách tìm kiếm cho người dùng
Bảng 2.5 Bảng đặc tả ca sử dụng Worker tìm kiếm việc làm
STT Trường dữ liệu Bắt buộc? Điều kiện hợp lệ
3 Yêu cầu chất lượng worker không
Bảng 2.6 Bảng dữ liệu đầu vào ca sử dụng Worker tìm kiếm việc làm
Ca sử dụng UC04: Tìm kiếm worker
Mã usecase UC04 Tên usecase Tìm kiếm worker
Mục đích sử dụng Cho phép người dùng tìm kiếm worker theo từng giá trị của thuộc tính
Sự kiện kích hoạt Người dùng click vào tìm kiếm worker
Luồng sự kiện chính STT Thực hiện Hành động
1 Requester Chọn chức năng "tìm kiếm worker"
2 Hệ thống Hiển thị màn hình tìm kiếm worker
3 Requester Nhập các trường tìm kiếm (mô tả phía dưới *)
4 Requester Ấn chọn tìm kiếm
5 Hệ thống Thực hiện truy vấn vào cơ sở dữ liệu theo các trường đã nhập
6 Hệ thống Trả về danh sách tìm kiếm
7 Requester Click vào worker muốn xem
8 Hệ thống Hiển thị màn hình chi tiết worker
9 Requester Ấn nút mời làm việc
10 Hệ thống Lưu thông tin mời làm việc của requester
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống trả về danh sách tìm kiếm cho người dùng
Bảng 2.7 Bảng đặc tả ca sử dụng Tìm kiếm worker
Mô tả trường dữ liệu
STT Trường dữ liệu Bắt buộc? Điều kiện hợp lệ
2 Chất lượng làm việc của worker không
Bảng 2.8 Bảng dữ liệu đầu vào ca sử dụng Tìm kiếm worker
Ca sử dụng UC05: Requester tạo việc làm
Mã usecase UC05 Tên usecase Requester tạo việc làm
Mục đích sử dụng Cho phép người dùng tạo việc làm
Sự kiện kích hoạt Người dùng click vào Tạo việc làm
Luồng sự kiện chính STT Thực hiện Hành động
1 Requester Chọn chức năng "Tạo việc làm"
2 Hệ thống Hiển thị màn hình tạo việc làm
3 Requester Nhập các trường của công việc(mô tả phía dưới *)
4 Requester Ấn nút Tạo việc
5 Hệ thống Kiểm tra tính hợp lệ và đầy đủ của các trường người dùng nhập
6 Hệ thống Tạo công việc
7 Requester Click vào worker muốn xem
8 Hệ thống Hiển thị màn hình chi tiết worker
9 Requester Ấn nút mời làm việc
10 Hệ thống Lưu thông tin mời làm việc của requester
Luồng sự kiện thay thế
Bảng 2.9 Bảng đặc tả ca sử dụng Requester tạo việc làm
Mô tả các trường tìm kiếm
STT Trường dữ liệu Bắt buộc? Điều kiện hợp lệ
3 Mô tả công việc có
4 Số lượng task mỗi worker có
5 Tiền thưởng mỗi task có
6 Thời gian hết hạn có
7 Số lượng bản sao của mỗi assignment có
8 Yêu cầu chất lượng của worker có
9 Dữ liệu của công việc có
Bảng 2.10 Bảng dữ liệu đầu vào ca sử dụng Requester tạo việc làm
Ca sử dụng UC06: Requester quản lý thông tin cá nhân
Mã usecase UC06 Tên usecase
Requester quản lý thông tin cá nhân
Mục đích sử dụng Cho phép người dùng xem, chỉnh sửa thông tin các nhân của mình
Sự kiện kích hoạt Người dùng ấn vào Thông tin các nhân
Luồng sự kiện chính STT Thực hiện Hành động
1 Requester Chọn chức năng "Quản lý thông tin các nhân"
2 Hệ thống Hiển thị màn hình thông tin các nhân
3 Requester Chọn sửa thông tin cá nhân
4 Hệ thống Hiển thị màn hình sửa thông tin cá nhân
5 Requester Nhập các giá trị cần sửa, nhấn submit
6 Hệ thống Lưu lại thông tin đã cập nhật, hiển thị thông tin đã sửa
Luồng sự kiện thay thế STT Thực hiện
6a Hệ thống Thông báo lỗi: sai định dạng các giá trị nhập Hậu điều kiện Hệ thống cập nhật các thông tin của requester
Bảng 2.11 Bảng đặc tả ca sử dụng Requester quản lý thông tin cá nhân
Mô tả các trường cập nhật :
STT Trường dữ liệu Điều kiện hợp lệ Ví dụ
1 Họ tên nguyen tung duong
4 Ảnh đại diện https://cloudinary.com/abc
Bảng 2.12 Bảng dữ liệu đầu vào ca sử dụng Requester quản lý thông tin cá nhân
Ca sử dụng UC07: Worker quản lý thông tin cá nhân
Mã usecase UC07 Tên usecase Worker quản lý thông tin cá nhân
Mục đích sử dụng Cho phép người dùng xem, chỉnh sửa thông tin các nhân của mình
Sự kiện kích hoạt Người dùng ấn vào Thông tin các nhân
Luồng sự kiện chính STT Thực hiện Hành động
1 Worker Chọn chức năng "Quản lý thông tin các nhân"
2 Hệ thống Hiển thị màn hình thông tin các nhân
3 Worker Chọn sửa thông tin cá nhân
4 Hệ thống Hiển thị màn hình sửa thông tin cá nhân
5 Worker Nhập các giá trị cần sửa, nhấn submit
6 Hệ thống Lưu lại thông tin đã cập nhật, hiển thị thông tin đã sửa
Luồng sự kiện thay thế STT Thực hiện Hành động
6a Hệ thống Thông báo lỗi: sai định dạng các giá trị nhập
Hậu điều kiện Hệ thống cập nhật các thông tin của worker
Bảng 2.13 Bảng đặc tả ca sử dụng Worker quản lý thông tin cá nhân
Mô tả các trường cập nhật :
STT Trường dữ liệu Điều kiện hợp lệ Ví dụ
1 Họ tên nguyen tung duong
4 Ảnh đại diện https://cloudinary.com/abc
Bảng 2.14 Bảng dữ liệu đầu vào ca sử dụng Worker quản lý thông tin cá nhân
Ca sử dụng UC08: Requester phê duyệt yêu cầu làm việc
Mã usecase UC08 Tên usecase
Requester phê duyệt yêu cầu làm việc
Mục đích sử dụng Cho phép requester quản lý công việc
Sự kiện kích hoạt Requester ấn vào quản lý công việc
Luồng sự kiện chính STT Thực hiện Hành động
1 Requester Chọn chức năng "Quản lý công việc"
2 Hệ thống Hiển thị màn hình danh sách công việc
3 Requester Click vào công việc muốn quản lý
4 Hệ thống Trả về danh sách worker yêu cầu làm việc
5 Requester Chấp nhận hoặc từ chối worker làm công việc của mình
6 Hệ thống Lưu lại thông tin worker đc chấp nhận hoặc từ chối
Luồng sự kiện thay thế
Bảng 2.15 Bảng đặc tả ca sử dụng Requester phê duyệt yêu cầu làm việc
Ca sử dụng UC09: Requester quản lý công việc
Mã usecase UC09 Tên usecase Requester quản lý công việc
Mục đích sử dụng Cho phép người dùng quản lý công việc
Sự kiện kích hoạt Requester ấn vào "Quản lý công việc"
Luồng sự kiện chính STT Thực hiện Hành động
1 Requester Chọn chức năng "Quản lý công việc"
2 Hệ thống Hiển thị màn hình danh sách công việc
3 Requester Click vào công việc muốn quản lý
4 Hệ thống Trả về danh sách phân công công việc của công việc đó
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống hiển thị trang quản lý công việc
Bảng 2.16 Bảng đặc tả ca sử dụng Requester quản lý công việc
Ca sử dụng UC10: Requester quản lý phân công công việc
Mã usecase UC10 Tên usecase Requester quản lý phân công công việc
Mục đích sử dụng Cho phép requester quản lý phân công công việc của từng công việc
Sự kiện kích hoạt Requester ấn vào phân công công việc ở Danh sách phân công công việc
Luồng sự kiện chính STT Thực hiện Hành động
1 Requester Chọn chức năng "Quản lý công việc"
2 Hệ thống Hiển thị màn hình danh sách công việc
3 Requester Click vào công việc muốn quản lý
4 Hệ thống Trả về danh sách phân công công việc của công việc đó
5 Requester Người dùng ấn vào phân công công việc ở danh sách phân công công việc
6 Hệ thống Trả về trang kết quả các đơn vị công việc của phân công công việc
7 Requester Chấp nhận hoặc từ chối đơn vị công việc
8 Hệ thống Lưu lại thông tin
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống hiển thị trang quản lý phân công công việc, chấp nhận từ chối đơn vị công việc
Bảng 2.17 Bảng đặc tả ca sử dụng Requester quản lý phân công công việc
Ca sử dụng UC11: Worker làm việc
Mã usecase UC11 Tên usecase Worker làm việc
Mục đích sử dụng Cho phép worker làm việc
Sự kiện kích hoạt Worker ấn vào công việc ở danh sách công việc
Luồng sự kiện chính STT Thực hiện Hành động
1 Worker Chọn chức năng "Quản lý công việc"
2 Hệ thống Hiển thị màn hình danh sách công việc
3 Worker Click vào công việc muốn làm
4 Hệ thống Trả về màn hình làm việc
5 Worker Người dùng làm việc và nộp kết quả
6 Hệ thống Lưu kết quả làm việc
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống hiển thị màn hình làm việc, lưu kết quả làm việc
Bảng 2.18 Bảng đặc tả ca sử dụng Worker làm việc
Ca sử dụng UC12: Admin quản lý requester
Mã usecase UC12 Tên usecase Admin quản lý requester
Mục đích sử dụng Cho phép admin quản lý requester
Sự kiện kích hoạt Admin ấn vào tìm kiếm requester
Luồng sự kiện chính STT Thực hiện Hành động
1 Admin Chọn chức năng "Tìm kiếm requester"
2 Hệ thống Hiển thị màn hình Tìm kiếm requester
3 Admin Ấn nút xóa requester
4 Hệ thống Lưu thông tin
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống hiển thị danh sách requester, lưu thông tin
Bảng 2.19 Bảng đặc tả ca sử dụng Admin quản lý requester
Ca sử dụng UC13: Admin quản lý worker
Mã usecase UC13 Tên usecase Admin quản lý worker
Mục đích sử dụng Cho phép admin quản lý worker
Sự kiện kích hoạt Admin ấn vào tìm kiếm worker
Luồng sự kiện chính STT Thực hiện Hành động
1 Admin Chọn chức năng "Tìm kiếm worker"
2 Hệ thống Hiển thị màn hình Tìm kiếm worker
3 Admin Ấn nút xóa worker
4 Hệ thống Lưu thông tin Luồng sự kiện thay thế
Hậu điều kiện Hệ thống hiển thị danh sách worker, lưu thông tin
Bảng 2.20 Bảng đặc tả ca sử dụng Admin quản lý worker
Ca sử dụng UC14: Admin quản lý công việc
Mã usecase UC14 Tên usecase Admin quản lý công việc
Mục đích sử dụng Cho phép admin quản lý công việc
Sự kiện kích hoạt Admin ấn vào tìm kiếm công việc
Luồng sự kiện chính STT Thực hiện Hành động
1 Admin Chọn chức năng "Tìm kiếm công việc"
2 Hệ thống Hiển thị màn hình Tìm kiếm công việc
3 Admin Ấn nút xóa công việc
4 Hệ thống Lưu thông tin
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống hiển thị danh sách công việc, lưu thông tin người dùng
Bảng 2.21 Bảng đặc tả ca sử dụng Admin quản lý công việc
Ca sử dụng UC15: Worker quản lý công việc
Mã usecase UC15 Tên usecase Worker quản lý công việc
Mục đích sử dụng Cho phép người dùng quản lý công việc
Sự kiện kích hoạt Worker ấn vào "Quản lý công việc"
Luồng sự kiện chính STT Thực hiện Hành động
1 Worker Chọn chức năng "Quản lý công việc"
2 Hệ thống Hiển thị màn hình danh sách công việc
3 Worker Click vào công việc muốn quản lý
4 Hệ thống Trả về trang chi tiết công việc
Luồng sự kiện thay thế
Hậu điều kiện Hệ thống hiển thị trang quản lý công việc
Bảng 2.22 Bảng đặc tả ca sử dụng Worker quản lý công việc
Quy trình nghiệp vụ của hệ thống
Hình 2.5 Biểu đồ hoạt động Đăng ký
Hình 2.6 Biểu đồ hoạt động Đăng nhập
Quy trình "Worker tìm việc làm"
Hình 2.7 Biểu đồ hoạt động Worker tìm việc làm
Quy trình "Requester tạo việc làm"
Hình 2.8 Biểu đồ hoạt động Requester tạo việc làm
Quy trình "Requester quản lý công việc"
Hình 2.9 Biểu đồ hoạt động Requester quản lý công việc
Quy trình "Requester quản lý phân công công việc"
Hình 2.10 Biểu đồ hoạt động Requester quản lý phân công công việc
Quy trình "Quản lý thông tin cá nhân"
Hình 2.11 Biểu đồ hoạt động Quản lý thông tin cá nhân
Quy trình "Worker quản lý công việc"
Hình 2.12 Biểu đồ hoạt động Worker quản lý công việc
Quy trình "Worker làm việc"
Hình 2.13 Biểu đồ hoạt động Worker làm việc
Quy trình "Tìm kiếm worker"
Hình 2.14 Biểu đồ hoạt động Tìm kiếm worker
Quy trình "Admin quản lý người dùng"
Hình 2.15 Biểu đồ hoạt động Admin quản lý người dùng
Quy trình "Admin quản lý công việc"
Hình 2.16 Biểu đồ hoạt động Admin quản lý công việc
Quy trình "Requester phê duyệt yêu cầu làm việc"
Hình 2.17 Biểu đồ hoạt động Requester phê duyệt yêu cầu làm việc
Yêu cầu phi chức năng
- Mật khẩu đăng nhập của người dùng được phải được mã hoá Không ai có thể truy cập được thông tin này
- Hệ thống phải đáp ứng được nhu cầu sử dụng của nhiều người truy cập cùng lúc Thời gian phản hồi và độ trễ phải ở mức chấp nhận được
- Giao diện hệ thống phải thân thiện với người dùng, ít nhất chạy được trên trình duyệt Chrome, Microsoft Edge
- Hệ thống sử dụng ngôn ngữ tiếng Việt
- Hệ thống phải đảm bảo khả năng nâng cấp và mở rộng các tính năng Các tính năng sau không ảnh hưởng đến các tính năng đã phát triển rồi
THIẾT KẾ HỆ THỐNG
Mô hình hoá cấu trúc
Ca sử dụng UC01: Đăng ký
Hình 3.1 Biểu đồ lớp Đăng ký
Ca sử dụng UC02: Đăng nhập
Hình 3.2 Biểu đồ lớp Đăng nhập
Ca sử dụng UC03: Worker tìm kiếm việc làm
Hình 3.3 Biểu đồ lớp Tìm kiếm việc làm
Ca sử dụng UC04: Tìm kiếm worker
Hình 3.4 Biểu đồ lớp Tìm worker
Ca sử dụng UC05: Tạo việc làm
Hình 3.5 Biểu đồ lớp Tạo việc làm
Ca sử dụng UC06: Quản lý thông tin cá nhân requester
Hình 3.6 Biểu đồ lớp Quản lý thông tin cá nhân của requester
Ca sử dụng UC07: Quản lý thông tin các nhân worker
Hình 3.7 Biểu đồ lớp Quản lý thông tin cá nhân của worker
Ca sử dụng UC08: Requester phê duyệt yêu cầu làm việc
Hình 3.8 Biểu đồ lớp Requester phê duyệt yêu cầu làm việc
Ca sử dụng UC09: Requester quản lý công việc
Hình 3.9 Biểu đồ lớp Requester quản lý công việc
Ca sử dụng UC10: Requester quản lý phân công công việc
Hình 3.10 Biểu đồ lớp Requester quản lý phân công công việc
Ca sử dụng UC11: Worker làm việc
Hình 3.11 Biểu đồ lớp Woker làm việc
Ca sử dụng UC12: Admin quản lý requester
Hình 3.12 Biểu đồ lớp Admin quản lý requester
Ca sử dụng UC13: Admin quản lý worker
Hình 3.13 Biểu đồ lớp Admin quản lý worker
Ca sử dụng UC14: Admin quản lý công việc
Hình 3.14 Biểu đồ lớp Admin quản lý công việc
Ca sử dụng UC15: Worker quản lý công việc
Hình 3.15 Biểu đồ lớp Worker quản lý công việc
Mô hình hoá tương tác
Biểu đồ tuần tự cho ca sử dụng "Đăng ký"
Hình 3.16 Biểu đồ tuần tự cho ca sử dụng Đăng ký
Biểu đồ tuần tự cho ca sử dụng "Đăng nhập"
Hình 3.17 Biểu đồ tuần tự cho ca sử dụng Đăng nhập
Biểu đồ tuần tự cho ca sử dụng "Tìm kiếm việc làm"
Hình 3.18 Biểu đồ tuần tự cho ca sử dụng Tìm kiếm việc làm
Biểu đồ tuần tự cho ca sử dụng "Tìm kiếm worker"
Hình 3.19 Biểu đồ tuần tự cho ca sử dụng Tìm kiếm worker
Biểu đồ tuần tự cho ca sử dụng "Tạo việc làm"
Hình 3.20 Biểu đồ tuần tự ca sử dụng Tạo việc làm
Biểu đồ tuần tự cho ca sử dụng "Requester quản lý thông tin cá nhân"
Hình 3.21 Biểu đồ tuần tự cho ca sử dụng Requester quản lý thông tin cá nhân
Biểu đồ tuần tự cho ca sử dụng "Worker quản lý thông tin cá nhân"
Hình 3.22 Biểu đồ tuần tự cho ca sử dụng Worker quản lý thông tin cá nhân
Biểu đồ tuần tự cho ca sử dụng "Requester phê duyệt yêu cầu làm việc"
Hình 3.23 Biểu đồ tuần tự cho ca sử dụng Requester phê duyệt yêu cầu làm việc
Biểu đồ tuần tự "Requester quản lý công việc"
Hình 3.24 Biểu đồ tuần tự cho ca sử dụng Requester quản lý công việc
Biểu đồ tuần tự "Requester quản lý phân công công việc"
Hình 3.25 Biều đồ tuần tự cho ca sử dụng Requester quản lý phân công công việc
Biểu đồ tuần tự ca sử dụng "Worker làm việc"
Hình 3.26 Biểu đồ tuần tự cho ca sử dụng Worker làm việc
Biểu đồ tuần tự ca sử dụng "Admin quản lý requester"
Hình 3.27 Biểu đồ tuần tự cho ca sử dụng Admin quản lý requester
Biểu đồ tuần tự ca sử dụng "Admin quản lý worker"
Hình 3.28 Biểu đồ tuần tự cho ca sử dụng Admin quản lý worker
Biểu đồ tuần tự ca sử dụng "Admin quản lý công việc"
Hình 3.29 Biểu đồ tuần tự cho ca sử dụng Admin quản lý công việc
Biểu đồ tuần tự ca sử dụng "Worker quản lý công việc"
Hình 3.30 Biểu đồ tuần tự cho ca sử dụng Worker quản lý công việc
Thiết kế giao diện
Giao diện dành cho Guest
Hình 3.31 Giao diện Đăng ký
Hình 3.32 Giao diện Đăng nhập
Hình 3.33 Giao diện Requester tạo công việc
Hình 3.34 Giao diện Tìm kiếm worker
Hình 3.35 Giao diện Quản lý thông tin cá nhân
Hình 3.36 Giao diện Quản lý công việc
Hình 3.37 Giao diện Quản lý phân công công việc
Hình 3.38 Giao diện Thông tin chi tiết worker
Hình 3.39 Giao diện Tìm kiếm việc làm
Hình 3.40 Giao diện Worker làm việc
Hình 3.41 Giao diện Thông tin chi tiết công việc
Hình 3.42 Giao diện Worker quản lý công việc
Hình 3.43 Giao diện Quản lý thông tin cá nhân
Thiết kế chi tiết lớp
Sơ đồ lớp tổng quan
Hình 3.44 Sơ đồ lớp gói Guest
Hình 3.45 Sơ đồ lớp gói Worker
Hình 3.46 Sơ đồ lớp gói Requester
Hình 3.47 Sơ đồ lớp gói Admin
Hình 3.48 Sơ đồ lớp gói Truy cập và xử lý dữ liệu
Hình 3.49 Sơ đồ gói lớp Dự đoán Đặc tả chi tiết các lớp
Giao diện Đăng ký tài khoản b) Danh sách thuộc tính
Tên Phạm vi truy cập Kiểu dữ liệu Mô tả email public string email password public string mật khẩu name public string họ tên role public string vai trò phone public string số điện thoại
DoB public date ngày sinh avatar public string đường dẫn ảnh đại diện c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả
57 register() public email string password string name string role string phone string
DoB date avatar string void gửi yêu cầu đăng ký notifyFailure() public error string void thông báo lỗi cho người dùng
Giao diện Đăng nhập b) Danh sách thuộc tính
Tên Phạm vi truy cập Kiểu dữ liệu Mô tả email public string email password public string mật khẩu role public string vai trò c) Danh sách phương thức
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về
Mô tả login() public email string password string role string void gửi yêu cầu đăng nhập notifyFailure() public error string void thông báo lỗi cho người dùng
Create_Job_Interface a) Mục đích
Giao diện Tạo công việc
Tên Phạm vi truy cập
Mô tả name public string tên công việc description public string mô tả công việc number_duplicate public int số bản sao của một phân công công công việc reward_per_task public int thưởng mỗi đơn vị công việc task_per_assignment public int số đơn vị công việc mỗi phân công công việc deadline public date hạn hoàn thành công việc labels public array danh sách nhãn dữ liệu data public array danh sách dữ liệu cần gán nhãn qualification public object chất lượng làm việc yêu cầu của worker, gồm + tổng số công việc đã làm
+ tỉ lệ đơn vị công việc được chấp nhận
+ tỉ lệ đơn vị công việc đã hoàn thành
+ tổng đơn vị công việc được chấp nhận
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về
Mô tả createJob() public name string description string number_duplicate int reward_per_task int task_per_assignment int deadline date labels array data array qualification object void gửi yêu cầu tạo công việc
Requester_Manage_Job_Interface a) Mục đích
Giao diện Requester quản lý công việc b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả showListJob() public requesterId string Array
< Job> gửi yêu cầu lấy danh sách công việc của requester
Find_Worker_Interface a) Mục đích
Giao diện Tìm kiếm worker b) Danh sách thuộc tính
Tên Phạm vi truy cập
Kiểu dữ liệu Mô tả name public string tên công việc qualification public object chất lượng làm việc yêu cầu của worker, gồm
+ tổng số công việc đã làm + tỉ lệ đơn vị công việc được chấp nhận
+ tỉ lệ đơn vị công việc đã hoàn thành
+ tổng đơn vị công việc được chấp nhận c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả findWorker() public name string qualification object
gửi yêu cầu tìm kiếm worker inviteWorker() public workerId string void gửi yêu cầu mời worker
Approve_Worker_Join_Job_Interface a) Mục đích
Giao diện Phê duyệt yêu cầu tham gia công việc b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả accept() public jobId string workerId string void chấp nhận yêu cầu tham gia công việc reject() public jobId string workerId string void từ chối yêu cầu tham gia công việc
Manage_Assignment_Interface a) Mục đích
Giao diện Quản lý phân công công việc b) Danh sách thuộc tính
Tên Phạm vi truy cập
Mô tả acceptTask() public void chấp nhận đơn vị công việc rejectTask() public void từ chối đơn vị làm việc nextTask() public void chuyển sang đơn vị công việc tiếp theo previousTask() public void quay lại đơn vị công việc trước đó notifyFailure() public void thông báo lỗi cho người dùng
List_Assignment_Interface a) Mục đích
Giao diện Danh sách phân công công việc b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về Mô tả showListAssignment() public Array
lấy danh sách phân công công việc selectAssignment() public assignmentId string void xem chi tiết phân công công việc
62 downloadData() public assignmentId string void tải về dữ liệu gán nhãn notifyFailure() public void thông báo lỗi cho người dùng
Worker_Detail_Interface a) Mục đích
Giao diện Thông tin chi tiết worker b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về
Mô tả rate() public star int void đánh giá worker comment() public content string void bình luận về worker
Find_Job_Interface a) Mục đích
Giao diện Tìm kiếm công việc b) Danh sách thuộc tính
Tên Phạm vi truy cập
Mô tả name public string tên công việc qualification public object chất lượng làm việc yêu cầu của worker, gồm + tổng số công việc đã làm + tỉ lệ đơn vị công việc được chấp nhận
+ tỉ lệ đơn vị công việc đã hoàn thành
+ tổng đơn vị công việc được chấp nhận category public string loại công việc c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả findJob() public name string qualification object category string
< Job> đánh giá worker joinJob() public content string void bình luận về worker
Giao diện Quản lý thông tin cá nhân b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả showInfo() public void hiển thị thông tin người dùng updateInfo() public user User void cập nhật thông tin người dùng changePassword() public password string void đổi mật khẩu
64 b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả showJob() public Job hiển thị công việc submitTask() public data object void nộp kết quả đơn vị công việc nextTask() public void chuyển sang đơn vị công việc tiếp theo previousTask() public void chuyển sang đơn vị công việc trước đó
Worker_Manage_Job _Interface a) Mục đích
Giao diện Worker quản lý công việc b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về
Mô tả showListJob() public Array
< Job> hiển thị danh sách công việc
Find_Requester_Interface a) Mục đích
Giao diện Tìm kiếm requester b) Danh sách thuộc tính
Tên Phạm vi truy cập Kiểu dữ liệu Mô tả name public string tên requester
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về Mô tả findRequester() public name string Array
tìm kiếm requester deleteRequester() public requesterId string void xoá requester
Woker_Controller a) Mục đích Điều khiển nghiệp vụ của worker b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả getDetailWorker() public workerId string Worker lấy thông tin chi tiết worker updateWorker() public worker Worker void cập nhật worker getListWorker() public name string qualification object array
lấy danh sách worker deleteWorker() public void xoá worker Requester_Controller a) Mục đích Điều khiển nghiệp vụ của requester b) Danh sách thuộc tính c) Danh sách phương thức
Tham số đầu vào Kiểu trả về Mô tả
66 truy cập getDetailRequester() public requesterId string Requester lấy thông tin chi tiết requester updateRequester() public requester Requester void cập nhật requester getListRequester () public name string Array
lấy danh sách requester deleteRequester () public void xoá requester
Comment_Controller a) Mục đích Điều khiển nghiệp vụ bình luận b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về Mô tả getListComment() public Array
lấy danh sách bình luận updateComment () public comment Comment void cập nhật bình luận deleteComment () public void xoá bình luận
Login_Controller a) Mục đích Điều khiển nghiệp vụ đăng nhập b) Danh sách thuộc tính
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về
Mô tả notifyFailure() public void thông báo lỗi cho người dùng checkAuthentication
() public email string password string role string boolean xác thực người dùng
Register_Controller a) Mục đích Điều khiển nghiệp vụ Đăng ký tài khoản b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập
Mô tả notifyFailure() public void thông báo lỗi cho người dùng checkEmailExist () public email string boolean kiểm tra email đã tồn tại chưa saveUser() public user User void Lưu thông tin người dùng
Job_Controller a) Mục đích Điều khiển nghiệp vụ Công việc b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về
68 createJob () public job Job void tạo công việc getListJob() public Job lấy danh sách công việc getDetailJob() public jobId string Job lấy chi tiết công việc acceptWorkRequest() public void chấp nhận tham gia công việc rejectWorkRequest() public void từ chối tham gia công việc saveWorkRequest() public void Yêu cầu tham gia công việc Assignment_Controller a) Mục đích Điều khiển nghiệp vụ Phân công công việc b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập
Tham số đầu vào Kiểu trả về Mô tả createAssignment () public assignment Assignment void tạo phân công công việc getListAssigment() public jobId string Assigment lấy danh sách phân công công việc getDetailAssignment() public assignmentId string Assigment lấy chi tiết
69 công việc saveTaskResult() public void lưu kết quả đơn vị công việc
Dự đoán nhãn của công việc b) Danh sách thuộc tính c) Danh sách phương thức
Tên Phạm vi truy cập Tham số đầu vào Kiểu trả về Mô tả predict() public image string void dự đoán nhãn của công việc
Thiết kế cơ sở dữ liệu
Tổng quan cơ sở dữ liệu
Hình 3.50 Tổng quản cơ sở dữ liệu
71 Đặc tả chi tiết các bảng dữ liệu
Tên trường Kiểu dữ liệu Mô tả id string id email string email password string mật khẩu name string họ tên role string vai trò phone string số điện thoại
DoB date ngày sinh avatar string đường dẫn ảnh đại diện
Tên trường Kiểu dữ liệu Mô tả id string id email string email password string mật khẩu name string họ tên role string vai trò phone string số điện thoại
DoB date ngày sinh avatar string đường dẫn ảnh đại diện
Tên trường Kiểu dữ liệu Mô tả id string id email string email password string mật khẩu name string họ tên role string vai trò phone string số điện thoại
DoB date ngày sinh avatar string đường dẫn ảnh đại diện qualification object chất lượng làm việc của worker, gồm
+ tổng số công việc đã làm + tỉ lệ đơn vị công việc được chấp nhận + tỉ lệ đơn vị công việc đã hoàn thành + tổng đơn vị công việc được chấp nhận invitedJob array Danh sách công việc được mời
Tên trường Kiểu dữ liệu Mô tả id string id của assignment requester_id string id của requester job_id string id của công việc worker_id string id của worker data array dữ liệu của assignment
+ url: đường dẫn tới dữ liệu + result: kết quả làm việc + status: trạng thái
Tên trường Kiểu dữ liệu Mô tả id string id requester_id string id requester name string tên description string mô tả công việc category string loại công việc task_per_assignment int số lượng đơn vị công việc trên một phân công công việc number_duplicate int số lượng bản sao của một phân công công việc reward_per_task string thưởng trên một đơn vị công việc qualification object chất lượng làm việc yêu cầu của worker, gồm + tổng số công việc đã làm + tỉ lệ đơn vị công việc được chấp nhận + tỉ lệ đơn vị công việc đã hoàn thành + tổng đơn vị công việc được chấp nhận work_request array danh sách yêu cầu làm việc deadline date hạn hoàn thành công việc data array danh sách dữ liệu cần gán nhãn labels array danh sách nhãn dữ liệu
Tên trường Kiểu dữ liệu Mô tả id string id của comment requester_id string id của requester content string nội dung comment worker_id string id của worker star int số sao requester đánh giá
TRIỂN KHAI HỆ THỐNG
Mô hình lập trình
Hệ thống được phát triển theo mô hình microservices
Hình 4.1 Mô hình microservices [3] Ứng dụng được tách thành các service, mỗi service quản lý một cơ sở dữ liệu riêng, được triển khai và chạy độc lập với nhau Các service tách biệt về mặt mã nguồn, về hoạt động và dữ liệu Mỗi service có nơi chứa dữ liệu của riêng của nó và chỉ có nó có quyền truy cập vào vùng dữ liệu này
Microservices cho phép dễ dàng thực hiện tự động tích hợp và tự động triển khai Mỗi service có kích thước nhỏ giúp các lập trình viên dễ tiếp cận, đọc hiểu mã nguồn Các service khởi động nhanh giúp quá trình phát triển, kiểm thử cũng nhanh hơn Dễ dàng mở rộng và tích hợp với các dịch vụ của bên thứ ba Khi một service bị lỗi và ngừng hoạt động thì các service khác vẫn có thể hoạt động bình thường Với mô hình nguyên khối, một lỗi nhỏ có thể làm cả hệ thống ngừng hoạt động Khi cần thay đổi một thành phần, thì chỉ cần sửa đổi, cập nhật và triển khai lại thành phần đó chứ không cần triển khai lại toàn bộ hệ thống
Mô hình microservices của hệ thống:
Hình 4.2 Mô hình microservices của hệ thống
Account service có nhiệm vụ truy cập và xử lý thông tin của người dùng, cập nhật chất lượng làm việc của worker, cập nhật danh sách lời mời làm việc của worker Job service có nhiệm vụ truy cập và xử lý công việc như tạo công việc, tìm kiếm công việc, yêu cầu tham gia công việc, làm việc, xem kết quả làm việc, tải về dữ liệu làm việc
Predict service có nhiệm vụ dự đoán nhãn của đơn vị công việc (ảnh).
Các công nghệ sử dụng
ReactJS là một thư viện JavaScript mã nguồn mở để xây dựng giao diện người dùng hoặc các thành phần giao diện ReactJS có thể được sử dụng để phát triển các ứng dụng một trang hoặc ứng dụng di động
Công nghệ DOM ảo của ReactJS giúp tăng hiệu năng cho ứng dụng, là nơi mà các thành phần thực sự tồn tại trên đó Điều này sẽ giúp cải thiện hiệu suất rất nhiều ReactJS tính toán những thay đổi nào cần cập nhật lên DOM và chỉ thực hiện chúng Điều này giúp ReactJS tránh những thao tác trên DOM mà nhiều chi phí
NodeJS là một hệ thống phần mềm được thiết kế để viết các ứng dụng internet có khả năng mở rộng, đặc biệt là máy chủ web Chương trình được viết bằng
JavaScript, sử dụng kỹ thuật điều khiển theo sự kiện, nhập/xuất không đồng bộ để tối thiểu tổng chi phí và tối đa khả năng mở rộng
NodeJS có tốc độ xử lý nhanh nhờ cơ chế xử lý bất đồng bộ (non-blocking) NodeJS có thể dễ dàng xử lý hàng ngàn kết nối trong khoảng thời gian ngắn nhất Nhận và xử lý nhiều kết nối chỉ với một luồng Nhờ đó, hệ thống xử lý sẽ sử dụng ít lượng RAM nhất và giúp quá trình xử NodeJS lý nhanh hơn rất nhiều
MongoDB là một chương trình cơ sở dữ liệu hướng tài liệu đa nền tảng có sẵn nguồn Được phân loại là một chương trình cơ sở dữ liệu NoSQL, MongoDB sử dụng các tài liệu giống JSON với các lược đồ tùy chọn
MongoDB là document database, dữ liệu lưu dưới dạng JSON, không bị bó buộc về số lượng trường, kiểu dữ liệu… có thể thêm thoải mái dữ liệu mà mình muốn MongoDB có sẵn các phương để thực hiện đọc, thêm, xoá, sửa dữ liệu
Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các container ảo hóa Docker cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên Linux
Docker là nền tảng cho phép đóng gói, triển khai và chạy các ứng dụng trên hệ thống một cách nhanh chóng Ứng dụng này mở ra cho các lập trình viên, quản trị hệ thống để xây dựng, vận chuyển hay chạy các ứng dụng phân tán Docker làm việc trong một môi trường độc lập, không tác động tới môi trường hiện tại của máy tính Ứng dụng docker chạy trong vùng chứa container có thể chạy trên bất kỳ hệ thống như: máy tính xách tay, hệ thống cơ sở hoặc hệ thống đám mây
Kubernetes là một hệ thống điều phối vùng chứa mã nguồn mở để tự động hóa việc triển khai, mở rộng và quản lý ứng dụng máy tính
Kubernetes có thể expose một container sử dụng DNS hoặc địa chỉ IP của riêng nó Nếu lưu lượng truy cập đến một container cao, Kubernetes có thể cân bằng tải và phân phối lưu lượng mạng để việc triển khai được ổn định
Khi cung cấp cho Kubernetes một cluster gồm các node mà nó có thể sử dụng để chạy các tác vụ được đóng gói và mỗi container cần bao nhiêu CPU và bộ nhớ (RAM) Kubernetes có thể điều phối các container đến các node để tận dụng tốt nhất các tài nguyên
Kubernetes khởi động lại các containers bị lỗi, thay thế các container, xoá các container không phản hồi lại theo cấu hình định sẵn và trong suốt với người dùng biết đến chúng cho đến khi chúng sẵn sàng hoạt động
Kết quả đạt được
Một số giao diện của ứng dụng
Giao diện tạo công việc
80 Giao diện tìm kiếm worker
Giao diện thông tin cá nhân
81 Giao diện quản lý công việc
Giao diện tìm kiếm công việc
Giao diện chi tiết công việc
Giao diện danh sách công việc
Giao diện chi tiết worker
Object detection (Phát hiện đối tượng) Để tạo loại công việc này, requester cần tải lên một tập dữ liệu ảnh, các nhãn cần gán, quy định công việc sẽ gồm bao nhiêu phân công công việc (phần công việc
84 của một worker), mỗi worker sẽ gán nhãn bao nhiêu ảnh, chất lượng làm việc tối thiểu của worker cần phải có để tham gia công việc và một số trường khác như tên, mô tả công việc, v.v
Trong công việc này, worker cần phải xác định khung hình chữ nhật bao quanh đối tượng, có nhãn nằm trong tập các nhãn mà requester tạo ra ban đầu Để hỗ trợ người dùng quan sát ảnh dễ dàng, hệ thống sẽ hiển thị ảnh trên một bản đồ, cho phép worker phóng to, thu nhỏ, di chuyển, thay đổi độ sáng, độ tương phản hình ảnh
Worker gán nhãn bằng cách lựa chọn nhãn cần gán, chọn 2 điểm tương ứng với điểm góc tây bắc và đông nam để vẽ khung chữ nhật
Hình 4.3 Worker thực hiện vẽ khung hình chữ nhật
Worker có thể sử dụng mô hình YOLOv5 [4] do hệ thống cung cấp sẵn để tạo ra khung cho các đối tượng, tuy nhiên họ vẫn cần phải điều chỉnh các khung này khớp với đối tượng hơn nữa
Hình 4.4 Sử dụng mô hình YOLOv5 sinh ra khung hình chữ nhật
Worker có thể xoá, hoàn tác, điều chỉnh hoặc ẩn, hiện khung chữ nhật để thực hiện gán nhãn khác
Hình 4.5 Worker thực hiện gán nhãn ảnh 2
Sau khi hoàn thành gán nhãn cho một bức ảnh, worker sẽ nộp kết quả, kết quả gửi đến cho requester với mỗi nhãn là toạ độ của 2 góc tây bắc, đông nam của khung hình chữ nhật và kích thước của hình ảnh
Hệ thống hỗ trợ requester xem công việc worker đã làm một cách trực quan, gồm đầy đủ các chức năng hỗ trợ cho worker Requester có thể sử dụng mô hình YOLOv5 để tạo ra các nhãn tham khảo để so sánh với kết quả làm việc của worker, từ đó đánh giá chất lượng gán nhãn của worker bằng cách chấp nhận hoặc từ chối ảnh đó Requester có thể tải xuống dữ liệu gán nhãn với định dạng JSON
Hình 4.6 Requester xem kết quả công việc
Semantic segmentation (Phân đoạn ngữ nghĩa) Để tạo loại công việc này, requester cần tải lên một tập dữ liệu ảnh, các nhãn cần gán, quy định công việc sẽ gồm bao nhiêu phân công công việc (phần công việc của một worker), mỗi worker sẽ gán nhãn bao nhiêu ảnh, chất lượng làm việc tối thiểu của worker cần phải có để tham gia công việc và mốt số trường khác như tên, mô tả công việc, v.v
Trong công việc này, worker sẽ xác định các đường bao tương ứng với các nhãn mà requester quy định ở lúc tạo công việc Khi bắt đầu làm việc, hệ thống sẽ hiển thị ảnh trên một bản đồ, cho phép worker phóng to, thu nhỏ, di chuyển, thay đổi độ sáng, độ tương phản hình ảnh, giúp worker có thể quan sát ảnh một cách tốt nhất
Hình 4.7 Worker thực hiện vẽ đường bao
Worker có thể sử dụng thư viện Detectron2 [5] do hệ thống cung cấp sẵn để tạo ra các đường bao Tuy nhiên, worker vẫn cần phải điều chỉnh để đường bao này sát với các đối tượng hơn nữa Worker gán nhãn bằng cách lựa chọn các điểm xung quanh đối tượng để nối lại thành đường bao
Hình 4.8 Sử dụng thư viện detectron2 để sinh ra đường bao
Worker có thể xoá, hoàn tác, điều chỉnh hoặc ẩn, hiện đường bao để thực hiện gán nhãn khác
Sau khi hoàn thành gán nhãn cho một bức ảnh, worker sẽ nộp kết quả, kết quả gửi đến cho requester với mỗi nhãn là toạ độ của tất cả các điểm tạo nên đường bao quanh các đối tượng thuộc nhãn đó Requester xem và đánh giá công việc của worker tương tự công việc Object detection
Image classification (Phân loại ảnh) Để tạo loại công việc này, requester cần tải lên một tập dữ liệu ảnh, các nhãn cần gán, quy định công việc sẽ gồm bao nhiêu phân công công việc (phần công việc của một worker), mỗi worker sẽ gán nhãn bao nhiêu ảnh, chất lượng làm việc tối thiểu của worker cần phải có để tham gia công việc và mốt số trường khác như tên, mô tả công việc, v.v
Trong công việc này, worker cần chọn chủ đề tương ứng với các nhãn mà requester quy định ở lúc tạo công việc Khi bắt đầu làm việc, hệ thống sẽ hiển thị ảnh trên một bản đồ, cho phép worker phóng to, thu nhỏ, di chuyển, giúp worker có thể quan sát ảnh một cách tốt nhất
Hình 4.9 Worker lựa chọn nhãn phù hợp nhất với bức ảnh
Sau khi hoàn thành gán nhãn cho một bức ảnh, worker sẽ nộp kết quả, kết quả gửi đến cho requester với mỗi nhãn chủ đề của bức ảnh Requester xem và đánh giá công việc của worker tương tự công việc trên
Đánh giá hiệu năng hệ thống
Hệ thống sử dụng một cụm 3 máy chủ gồm 2 nhân, 4GB RAM do Kubenetes điều phối, mở rộng và quản lý Mỗi service sẽ có 2 bản sao, trong trường hợp một service gặp sự cố, Kubenetes tự điều phối bản sao còn lại để hệ thống hoạt động ổn định, trong suốt với người dùng Ngoài ra, Docker để sử dụng đóng gói các service, giúp tự động triển khai CI/CD các service với Gitlab, nhằm giảm thiểu thời gian triển khai hệ thống Đánh giá hiệu năng API Tìm kiếm worker Để đánh giá hiệu năng của hệ thống, em sử dụng "wrk2" [6]- công cụ đo điểm chuẩn HTTP
Thực hiện chạy điểm chuẩn trên 1 máy, trong vòng 30s, sử dụng 12 luồng, giữ 100 kết nối HTTP luôn mở và thông lượng không đổi là lần lượt là 1000 request/s, 200 request/s, 2500 request/s trong 10 lần Kết quả đạt được như sau:
Hình 4.10 Kết quả đo điểm chuẩn API Tìm kiếm worker với 1000 request/s Độ trễ trung bình là 65.92ms khi số lượng request đạt 99.9%
Hình 4.11 Kết quả đo điểm chuẩn API Tìm kiếm worker với 2000 request/s Độ trễ trung bình là 358.65ms khi số lượng request đạt 99.9%
Hình 4.12 Kết quả đo điểm chuẩn API Tìm kiếm worker với 2500 request/s Độ trễ trung bình là 2.48s khi số lượng request đạt 99.9%
Hình 4.13 Biểu đồ mô tả mối quan hệ giữa số lượng request/s và độ trễ của API
90 Đánh giá hiệu năng API Tìm kiếm công việc
Thực hiện chạy điểm chuẩn trên 1 máy, trong vòng 30s, sử dụng 12 luồng, giữ 100 kết nối HTTP luôn mở và thông lượng không đổi là lần lượt là 100 request/s, 30 request/s, 500 request/s trong 10 lần Kết quả đạt được như sau:
Hình 4.14 Kết quả đo điểm chuẩn API Tìm kiếm công việc với 100 request/s Độ trễ trung bình là 195.57ms khi số lượng request đạt 99.9%
Hình 4.15 Kết quả đo điểm chuẩn API Tìm kiếm công việc với 300 request/s Độ trễ trung bình là 230.65ms khi số lượng request đạt 99.9%
Hình 4.16 Kết quả đo điểm chuẩn API Tìm kiếm công việc với 500 request/s Độ trễ trung bình là 5.42s khi số lượng request đạt 99.9%
Hình 4.17 Biểu đồ mô tả mối quan hệ giữa số lượng request/s và độ trễ của API
92 Đánh giá hiệu năng API lấy thông tin chi tiết phân công công việc
Thực hiện chạy điểm chuẩn trên 1 máy, trong vòng 30s, sử dụng 12 luồng, giữ 100 kết nối HTTP luôn mở và thông lượng không đổi là lần lượt là 1000 request/s,
3500 request/s, 4000 request/s trong 10 lần Kết quả đạt được như sau:
Hình 4.18 Kết quả đo điểm chuẩn API lấy thông tin chi tiết phân công công việc với 1000 request/s Độ trễ trung bình là 4.81ms khi số lượng request đạt 99.9%
Hình 4.19 Kết quả đo kiểm chuẩn API lấy thông tin chi tiết phân công công việc với 3500 request/s Độ trễ trung bình là 1.48s khi số lượng request đạt 99.9%
Hình 4.20 Kết quả đo điểm chuẩn API lấy thông tin chi tiết phân công công việc với 4000 request/s Độ trễ trung bình là 2.26s khi số lượng request đạt 99.9%.
Hình 4.21 Biểu đồ mô tả mối quan hệ giữa số lượng request/s và độ trễ của API lấy thông tin chi tiết phân công việc