Giới thiệu dự án
Bối cảnh và thực trạng ngành
Trong kỷ nguyên chuyển đổi số và đặc biệt sau những tác động sâu sắc của đại dịch COVID-19, việc tổ chức các hoạt động văn hóa, nghệ thuật trực tiếp gặp nhiều rào cản lớn về mặt không gian, thời gian và chi phí vận hành. Theo các khảo sát quản trị sự kiện văn hóa, quy trình tiếp nhận và chấm thi nghệ thuật truyền thống (thủ công qua đĩa CD, USB, bản in hoặc tiếp nhận email phân tán) tiêu tốn trung bình từ 120 đến 160 giờ làm việc của ban tổ chức cho mỗi kỳ thi. Tỷ lệ sai lệch metadata tác phẩm, thất lạc bài thi và nhầm lẫn mã số báo danh trong khâu tổng hợp đạt mức 12% - 15%.
Tại tỉnh Sơn La, cuộc thi ảnh nghệ thuật "Vẻ đẹp của thành phố Sơn La" được tổ chức nhằm quảng bá hình ảnh thiên nhiên, bản sắc văn hóa và con người Tây Bắc tới bạn bè trong nước và quốc tế, với mục tiêu tuyển chọn chính xác 200 tác phẩm xuất sắc nhất tham dự vòng triển lãm chính thức. Để giải quyết triệt để bài toán tổ chức quy mô lớn trong bối cảnh giãn cách xã hội và chuẩn hóa khâu quản lý, đề tài "Phần mềm thu nhận và chấm điểm ảnh" đã được nghiên cứu và phát triển bởi sinh viên Khuất Văn Đức dưới sự hướng dẫn khoa học của TS. Nguyễn Quang Hưng tại Học viện Công nghệ Bưu chính Viễn thông (PTIT).
[Thí sinh nộp ảnh] ---> [Hệ thống Tiếp nhận & Chuẩn hóa] ---> [Hội đồng BGK Chấm điểm (1-5)]
│
[Email chúc mừng] <--- [Xuất Báo cáo / Triển lãm] <--- [BTC Tuyển chọn Top 200]
Vấn đề cụ thể và các điểm nghẽn (Pain Points)
Quy trình tổ chức chấm thi nhiếp ảnh truyền thống đối mặt với 4 điểm nghẽn nghiêm trọng:
- Tiếp nhận phân tán, không đồng bộ: Thí sinh gửi ảnh qua nhiều kênh không chính thống (Google Drive, Email, mạng xã hội) dẫn đến thiếu hụt thông tin nhân khẩu học (họ tên, ngày sinh, số điện thoại, đơn vị công tác) và metadata ảnh (tiêu đề, thuyết minh tác phẩm).
- Quy trình chấm điểm thủ công, dễ phát sinh sai sót: Giám khảo phải chấm điểm trên file Excel rời rạc hoặc phiếu chấm giấy, dẫn đến nguy cơ sai lệch số liệu trong quá trình nhập liệu thủ công (tỷ lệ lỗi tính toán xấp xỉ 8%).
- Thiếu tính minh bạch và bảo mật dữ liệu: Nguy cơ lộ thông tin tác giả trước khi chấm, gây ảnh hưởng đến tính khách quan của Hội đồng Giám khảo; tác phẩm gốc dễ bị sao chép trái phép nếu không có cơ chế phân quyền bảo mật chặt chẽ.
- Tắc nghẽn trong khâu tổng hợp và công bố kết quả: Việc lọc danh sách xếp hạng tổng điểm để chọn ra 200 tác phẩm triển lãm và gửi thông báo thủ công tới từng thí sinh mất từ 3 đến 5 ngày làm việc.
Mục tiêu dự án
- Tự động hóa 100% quy trình tiếp nhận tác phẩm: Xây dựng cổng thông tin trực tuyến cho phép thí sinh đăng ký tài khoản, quản lý hồ sơ và nộp tối đa 3 tác phẩm dự thi theo đúng quy chế ban hành.
- Thiết lập hệ thống phân quyền 4 cấp độ (Multi-role RBAC): Phân định ranh giới nghiệp vụ độc lập và bảo mật giữa Thí sinh (Candidates), Thành viên Hội đồng Ban giám khảo (TVTHĐBGK), Thành viên Hội đồng Ban tổ chức (TVTHĐBTC) và Quản trị viên hệ thống (Admin).
- Module hóa quy trình chấm điểm và sửa điểm trực quan: Cung cấp giao diện trực quan cho TVTHĐBGK đánh giá tác phẩm theo thang điểm chuẩn hóa từ 1 đến 5, tự động khóa hoặc cập nhật điểm số theo thời gian thực.
- Tối ưu hóa khâu tuyển chọn và thông báo kết quả: Hỗ trợ TVTHĐBTC chọn lọc chính xác 200 tác phẩm triển lãm dựa trên tổng điểm xếp hạng, tích hợp công cụ gửi email tự động hàng loạt qua giao thức SMTP.
- Đa dạng hóa xuất báo cáo thống kê: Cho phép trích xuất toàn bộ dữ liệu triển lãm và kết quả thí sinh sang các định dạng tiêu chuẩn (CSV, Excel, PDF, Print) với thời gian phản hồi dưới 2 giây.
Phương pháp tiếp cận giải pháp
Dự án áp dụng mô hình phát triển phần mềm kiến trúc hướng đối tượng (OOP) kết hợp mô hình phân tầng MVC (Model - View - Controller) trên nền tảng Laravel Framework và hệ quản trị cơ sở dữ liệu MySQL. Dữ liệu được trừu tượng hóa thông qua mẫu thiết kế DAO (Data Access Object) nhằm tách biệt hoàn toàn giữa tầng xử lý nghiệp vụ (Business Logic) và tầng truy xuất cơ sở dữ liệu (Database Access), đảm bảo tính module hóa, bảo mật và khả năng bảo trì hệ thống lâu dài.
Kết quả kỳ vọng và chỉ số đo lường (Measurable Metrics)
- Thời gian xử lý hồ sơ dự thi: Giảm 85% so với quy trình thủ công (từ 15 phút/thí sinh xuống còn dưới 2 phút/thí sinh).
- Thời gian tổng hợp và xếp hạng điểm: Giảm 99% (từ 48 giờ xuống dưới 3 giây cho tập dữ liệu 5.000 tác phẩm).
- Độ chính xác tính toán: Đạt 100%, loại bỏ hoàn toàn sai số làm tròn hoặc lỗi nhập liệu.
- Thời gian đáp ứng hệ thống (Response Time): Trung bình dưới 250ms cho các thao tác truy vấn và chấm điểm.
- Tỷ lệ gửi email thông báo thành công: Đạt $\ge 99.5%$.
Phạm vi và giới hạn hệ thống
- Phạm vi áp dụng: Phục vụ trực tiếp cuộc thi ảnh nghệ thuật "Vẻ đẹp của thành phố Sơn La" và có khả năng mở rộng cho các cuộc thi ảnh, triển lãm mỹ thuật quy mô cấp tỉnh/thành phố trên cả nước.
- Giới hạn kỹ thuật: Số lượng ảnh tối đa mỗi thí sinh được gửi mặc định là 3 tác phẩm (có thể cấu hình lại bởi Admin); định dạng ảnh tiếp nhận hỗ trợ chuẩn JPEG, PNG; hệ thống vận hành tối ưu trên môi trường mạng máy tính và trình duyệt web hiện đại.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
So sánh giải pháp hiện hữu trên thị trường
| Tiêu chí so sánh |
Quy trình Email & Excel thủ công |
Google Forms + Google Drive |
Hệ sinh thái SaaS thương mại |
Phần mềm đề xuất (Đồ án PTIT) |
| Chi phí triển khai |
Miễn phí (tốn nhân lực) |
Miễn phí |
Rất cao ($500 - $2,000/năm) |
Tối ưu (Mã nguồn mở) |
| Phân quyền giám khảo (Blind Review) |
Không có |
Rất khó cấu hình |
Có |
Có (TVTHĐBGK độc lập) |
| Thang điểm chuẩn hóa (1-5) |
Thủ công |
Form tĩnh, khó kiểm soát |
Có |
Có (Validation chặt chẽ) |
| Tuyển chọn Top 200 triển lãm |
Lọc tay qua Excel |
Lọc tay trên Google Sheets |
Tự động hóa |
1 chạm (Tích hợp CSDL) |
| Gửi Mail tự động cá nhân hóa |
Gửi tay từng email |
Cần cài thêm Add-on |
Có |
Tích hợp sẵn trong lõi |
| Xuất dữ liệu (PDF, Excel, Print) |
Tự chuyển đổi |
Xuất CSV/Sheets cơ bản |
Đa định dạng |
Hỗ trợ CSV, Excel, PDF, Print |
Phân loại yêu cầu người dùng theo mô hình MoSCoW
- Must have (Bắt buộc có): Đăng ký/đăng nhập phân quyền 4 Actor; Nộp tác phẩm (tiêu đề, ảnh, mô tả); Chấm điểm và sửa điểm (thang điểm 1-5); Thống kê tổng điểm; Lựa chọn 200 ảnh triển lãm; Gửi email tự động; Quản lý cấu hình cuộc thi (thời gian bắt đầu/kết thúc, giới hạn số ảnh).
- Should have (Nên có): Thống kê phân loại thí sinh nộp đủ (3 ảnh) và nộp thiếu (< 3 ảnh); Xuất dữ liệu đa định dạng (PDF, Excel, CSV, Print); Biểu đồ trực quan hóa số lượng tác phẩm theo tháng.
- Could have (Có thể có): Xem tác phẩm nhiều lượt xem nhất; Xem các tác phẩm đạt giải qua các năm; Ghi nhớ đăng nhập (Remember Me).
- Won't have (Chưa phát triển trong phiên bản này): Thanh toán phí dự thi trực tuyến; Nhận diện ảnh trùng lặp bằng AI; Ứng dụng di động native (iOS/Android).
Thiết kế hệ thống
Kiến trúc hệ thống tổng thể
graph TD
subgraph Client_Layer ["Tầng Giao Diện (Presentation Layer)"]
UI_Candidate["Client Thí sinh (Blade/Bootstrap)"]
UI_Judge["Client Ban Giám Khảo (Blade/AdminLTE)"]
UI_BTC["Client Ban Tổ Chức (Blade/AdminLTE)"]
UI_Admin["Client Quản Trị Viên (Blade/AdminLTE)"]
end
subgraph App_Layer ["Tầng Ứng Dụng (Application / Controller Layer)"]
Router["HTTP Router & Middleware (Auth, RBAC)"]
CandidateCtrl["CandidateController"]
ScoreCtrl["ScoreController"]
ExhibitionCtrl["ExhibitionController"]
AdminCtrl["AdminController"]
end
subgraph Business_Layer ["Tầng Nghiệp Vụ & Dữ Liệu (DAO Layer)"]
UserDAO["UserDAO / UserDAOImpl"]
ImageArtDAO["ImageArtDAO / ImageArtDAOImpl"]
ScoreArtDAO["ScoreArtDAO / ScoreArtDAOImpl"]
ExhibitionDAO["ExhibitionDAO / ExhibitionDAOImpl"]
end
subgraph Data_Layer ["Tầng Lưu Trữ (Database & Storage)"]
MySQL[(Hệ quản trị CSDL MySQL 8.0)]
FileSystem["File Storage (Images Directory)"]
SMTP_Server["Dịch vụ Mail Server (SMTP)"]
end
UI_Candidate & UI_Judge & UI_BTC & UI_Admin --> Router
Router --> CandidateCtrl & ScoreCtrl & ExhibitionCtrl & AdminCtrl
CandidateCtrl --> UserDAO & ImageArtDAO
ScoreCtrl --> ScoreArtDAO & ImageArtDAO
ExhibitionCtrl --> ExhibitionDAO & ScoreArtDAO
AdminCtrl --> UserDAO
UserDAO & ImageArtDAO & ScoreArtDAO & ExhibitionDAO --> MySQL
CandidateCtrl -. Lưu ảnh .-> FileSystem
ExhibitionCtrl -. Gửi thông báo .-> SMTP_Server
Technology Stack và phiên bản kỹ thuật
- Backend Language: PHP 8.1.x (Strict Typing, Tối ưu hóa JIT Compiler, Typed Properties).
- Web Framework: Laravel Framework 9.x (MVC Architecture, Eloquent ORM, Blade Templating Engine, Mailer Service).
- Database Management System: MySQL 8.0.x (InnoDB Engine, ACID Compliance, Foreign Key Constraints).
- Frontend Technologies: HTML5, CSS3, JavaScript (ES6), Bootstrap 5.2, DataTables.js, Chart.js.
- Web Server: Nginx 1.22 / Apache 2.4 trên môi trường Linux (Ubuntu 22.04 LTS).
Thiết kế cơ sở dữ liệu (Database Schema)
Hệ thống được chuẩn hóa về dạng chuẩn 3NF với các thực thể cốt lõi:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ accounts │ │ users │ │ candidates │
├─────────────────┤ ├─────────────────┤ ├─────────────────┤
│ id (PK) │1 1│ id (PK) │1 1│ id (PK) │
│ email (Unique) │───────│ account_id (FK) │───────│ user_id (FK) │
│ password │ │ fullname_id(FK) │ │ status │
│ role │ │ address_id (FK) │ └────────┬────────┘
└─────────────────┘ │ phone_id (FK) │ │
└─────────────────┘ │ 1
┌─────────────────┐ ┌─────────────────┐ │
│ judges │ │ image_arts │ │ N
├─────────────────┤ ├─────────────────┤ │
│ id (PK) │ │ id (PK) │◄───────────────┘
│ user_id (FK) │ │ candidate_id(FK)│
└────────┬────────┘ │ title │
│ │ name_image_art │
│ 1 │ content │
│ │ created_at │
│ N └────────┬────────┘
┌────────┴────────┐ │ 1
│ scores │ │
├─────────────────┤ │
│ id (PK) │ │
│ judge_id (FK) │ │
│ image_art_id(FK)│◄───────────────┤
│ score (1 - 5) │ │ N
└─────────────────┘ ┌────────┴────────┐
│ exhibitions │
├─────────────────┤
│ id (PK) │
│ image_art_id(FK)│
│ sum_score │
│ send_mail_status│
└─────────────────┘
Thiết kế API và Endpoints chính
| Phương thức |
Endpoint URI |
Actor cho phép |
Chức năng nghiệp vụ |
POST |
/api/v1/auth/login |
Tất cả |
Xác thực tài khoản, khởi tạo phiên làm việc |
POST |
/api/v1/candidate/submit-art |
Candidate |
Tải lên tác phẩm dự thi (tối đa 3 tác phẩm) |
GET |
/api/v1/judge/candidates-summary |
TVTHĐBGK |
Xem danh sách thí sinh và số lượng ảnh nộp |
POST |
/api/v1/judge/score |
TVTHĐBGK |
Chấm điểm tác phẩm theo thang điểm 1-5 |
PUT |
/api/v1/judge/score/update |
TVTHĐBGK |
Cập nhật/sửa lại điểm số đã chấm |
GET |
/api/v1/organizer/scores-overview |
TVTHĐBTC |
Xem bảng xếp hạng tổng điểm các thí sinh |
POST |
/api/v1/organizer/exhibition/select |
TVTHĐBTC |
Chọn tác phẩm vào danh sách 200 ảnh triển lãm |
POST |
/api/v1/organizer/send-notification |
TVTHĐBTC |
Kích hoạt tiến trình gửi mail kết quả triển lãm |
GET |
/api/v1/organizer/export/{format} |
TVTHĐBTC |
Trích xuất báo cáo dữ liệu (CSV, Excel, PDF) |
An toàn thông tin và bảo mật hệ thống
- Mã hóa mật khẩu: Sử dụng thuật toán một chiều
Bcrypt với chi phí tính toán (cost factor) $2^{12}$.
- Kiểm soát truy cập (RBAC): Middleware kiểm tra quyền truy cập nghiêm ngặt dựa trên trường
role trước khi cho phép Request đi vào Controller.
- Phòng chống tấn công Web phổ biến:
- SQL Injection: $100%$ truy vấn thông qua Prepared Statements của PDO và Eloquent ORM.
- Cross-Site Request Forgery (CSRF): Tích hợp
@csrf token trong toàn bộ biểu mẫu Web.
- Cross-Site Scripting (XSS): Tự động lọc dữ liệu đầu ra với cơ chế Escape HTML của Blade Template
{{ $data }}.
- File Upload Security: Kiểm tra nghiêm ngặt định dạng MIME-type (
image/jpeg, image/png) và giới hạn kích thước file upload $\le 10\text{MB}$.
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình Thác nước cải tiến (Modified Waterfall) kết hợp các chu kỳ phản hồi ngắn (Iterative Feedback Loops) trong suốt 16 tuần thực hiện:
[Tuần 1-3: Khảo sát & Phân tích Use Case] ──► [Tuần 4-6: Thiết kế Kiến trúc, CSDL & DAO]
│
[Tuần 13-16: Đóng gói, Đánh giá & Viết Đồ án] ◄── [Tuần 7-12: Cài đặt Laravel, MySQL & Test]
Ma trận đánh giá và kiểm soát rủi ro
| Rủi ro tiềm ẩn |
Mức độ |
Khả năng xảy ra |
Giải pháp giảm thiểu & khắc phục |
| Quá tải băng thông khi nộp bài cận deadline |
Cao |
Trung bình |
Tối ưu hóa nén ảnh phía Client trước khi gửi; giới hạn dung lượng tải lên. |
| Giám khảo chấm sót tác phẩm |
Trung bình |
Cao |
Thêm bộ lọc trạng thái "Đã chấm / Chưa chấm" và cảnh báo trực quan trên Dashboard. |
| Nghẽn dịch vụ gửi Mail khi phát 200 thư |
Cao |
Thấp |
Sử dụng Queue Jobs để gửi thư không đồng bộ (Asynchronous Mail Processing). |
| Xung đột sửa điểm giữa các giám khảo |
Thấp |
Thấp |
Khóa bản ghi theo cặp khóa ngoại (image_art_id, judge_id) độc lập. |
Hiện thực hóa và kết quả thực nghiệm
Quá trình phát triển và thuật toán cốt lõi
1. Thuật toán tổng hợp điểm và xếp hạng tác phẩm
Thuật toán tính tổng điểm của từng tác phẩm dựa trên tổng điểm đánh giá từ toàn bộ các thành viên ban giám khảo, đồng thời sắp xếp giảm dần để phục vụ cho việc tuyển chọn:
$$\text{SumScore}(A_i) = \sum_{j=1}^{M} \text{Score}(J_j, A_i)$$
Trong đó:
- $A_i$ là tác phẩm ảnh thứ $i$.
- $J_j$ là giám khảo thứ $j$ ($j = 1 \dots M$).
- $\text{Score}(J_j, A_i) \in [1, 5]$ là điểm số do giám khảo $J_j$ đánh giá.
2. Mã nguồn mẫu: Xử lý chấm điểm và kiểm tra toàn vẹn dữ liệu
Dưới đây là đoạn mã hiện thực trong tầng điều khiển ScoreController.php áp dụng mô hình DAO:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\DAO\ScoreArtDAO;
use App\DAO\ImageArtDAO;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class ScoreController extends Controller
{
private $scoreArtDAO;
private $imageArtDAO;
public function __construct(ScoreArtDAO $scoreArtDAO, ImageArtDAO $imageArtDAO)
{
$this->middleware('auth');
$this->middleware('role:judges');
$this->scoreArtDAO = $scoreArtDAO;
$this->imageArtDAO = $imageArtDAO;
}
public function submitScore(Request $request)
{
$validatedData = $request->validate([
'image_art_id' => 'required|integer|exists:image_arts,id',
'score' => 'required|numeric|min:1|max:5',
]);
$judgeId = Auth::user()->judge->id;
$imageArtId = $validatedData['image_art_id'];
$scoreValue = $validatedData['score'];
DB::beginTransaction();
try {
// Kiểm tra xem tác phẩm đã được giám khảo chấm trước đó chưa
$existingScore = $this->scoreArtDAO->findByJudgeAndImage($judgeId, $imageArtId);
if ($existingScore) {
// Cập nhật điểm đã có
$this->scoreArtDAO->updateScore($existingScore->id, $scoreValue);
$message = "Cập nhật điểm thành công cho tác phẩm!";
} else {
// Tạo mới bản ghi điểm
$this->scoreArtDAO->create([
'judge_id' => $judgeId,
'image_art_id' => $imageArtId,
'score' => $scoreValue,
]);
$message = "Chấm điểm tác phẩm thành công!";
}
DB::commit();
return redirect()->route('judge.list_arts')->with('success', $message);
} catch (\Exception $e) {
DB::rollBack();
return redirect()->back()->withErrors(['error' => 'Đã có lỗi xảy ra: ' . $e->getMessage()]);
}
}
}
3. Mô hình cấu trúc thư mục chuẩn mực (Best Practices)
Hệ thống được tổ chức phân cấp rõ ràng theo kiến trúc Clean Code:
app/
├── DAO/ # Tầng trừu tượng truy xuất dữ liệu
│ ├── UserDAO.php
│ ├── ImageArtDAO.php
│ ├── ScoreArtDAO.php
│ └── ExhibitionDAO.php
├── Http/
│ ├── Controllers/ # Điều phối luồng nghiệp vụ
│ │ ├── CandidateController.php
│ │ ├── JudgeController.php
│ │ ├── OrganizerController.php
│ │ └── AdminController.php
│ └── Middleware/ # Bộ lọc phân quyền (Auth, RBAC)
├── Models/ # Eloquent Data Models
resources/
├── views/ # Giao diện Blade Template
│ ├── candidate/
│ ├── judge/
│ ├── organizer/
│ └── admin/
Kiểm thử và đánh giá hiệu năng (Testing & Validation)
Kịch bản kiểm thử (Test Scenarios)
Đã thực hiện 55 trường hợp kiểm thử tự động (Unit Test với PHPUnit) và kiểm thử chấp nhận người dùng (Black-box Testing):
- Chức năng nộp bài: Kiểm tra vượt quá giới hạn 3 tác phẩm $\rightarrow$ Hệ thống tự động từ chối và cảnh báo.
- Ràng buộc thang điểm: Nhập điểm ngoài khoảng $[1, 5]$ (ví dụ: $0$ hoặc $6$) $\rightarrow$ Hệ thống bắt lỗi validation và thông báo lỗi.
- Kiểm soát phân quyền: Thí sinh cố tình truy cập URI
/admin/dashboard $\rightarrow$ Middleware chặn và chuyển hướng về mã lỗi HTTP 403 Forbidden.
Kết quả Benchmark hiệu năng
| Chỉ số kiểm thử |
Môi trường thử nghiệm |
Kết quả đạt được |
Tiêu chuẩn đánh giá |
| Thời gian phản hồi trang chủ |
100 người dùng đồng thời |
$145\text{ ms}$ |
$< 500\text{ ms}$ (Xuất sắc) |
| Thời gian upload ảnh (5MB) |
Mạng 50 Mbps |
$1.2\text{ s}$ |
$< 3.0\text{ s}$ (Đạt) |
| Xử lý tính tổng điểm 1.000 ảnh |
MySQL 8.0 Indexed |
$0.082\text{ s}$ |
$< 1.0\text{ s}$ (Xuất sắc) |
| Xuất file PDF danh sách Top 200 |
DomPDF Engine |
$1.4\text{ s}$ |
$< 3.0\text{ s}$ (Đạt) |
| Code Coverage (Tầng DAO & Logic) |
PHPUnit Framework |
$86.4%$ |
$> 80%$ (Chuẩn công nghiệp) |
Đổi mới và đóng góp
- Khép kín toàn bộ vòng đời cuộc thi ảnh số: Khác với các giải pháp chắp vá truyền thống, hệ thống cung cấp quy trình khép kín $100%$ từ: Đăng ký $\rightarrow$ Tải lên tác phẩm $\rightarrow$ Phân loại nộp đủ/thiếu $\rightarrow$ Chấm điểm độc lập $\rightarrow$ Xếp hạng $\rightarrow$ Tuyển chọn Top 200 $\rightarrow$ Phát mail chúc mừng $\rightarrow$ Xuất báo cáo triển lãm.
- Loại bỏ tính chủ quan và gian lận trong chấm thi: Cơ chế chấm điểm độc lập giúp mỗi giám khảo chỉ thấy tác phẩm và mã định danh, loại bỏ hoàn toàn việc nhìn thấy điểm số của các giám khảo khác trước khi kết thúc kỳ chấm.
- Hiệu quả định lượng vượt trội:
- Tiết kiệm $90%$ thời gian tổng hợp kết quả so với phương thức bảng tính Excel rời rạc.
- Tiết kiệm $75%$ chi phí in ấn tài liệu, phiếu chấm và văn phòng phẩm cho ban tổ chức.
- Giảm thiểu $100%$ sai sót thất lạc tác phẩm nhờ hệ thống quản lý file tập trung trên server.
Ứng dụng thực tế và triển khai
Kịch bản triển khai thực tế
Phần mềm được thiết kế tối ưu phục vụ trực tiếp cho cuộc thi ảnh nghệ thuật "Vẻ đẹp của thành phố Sơn La":
- Giai đoạn tiếp nhận: Thu hút hơn 350 nghệ sĩ nhiếp ảnh với gần 1.000 tác phẩm gửi về trong vòng 30 ngày.
- Giai đoạn chấm sơ khảo & chung khảo: Hội đồng gồm 5 thành viên Ban Giám khảo chấm điểm độc lập trực tuyến trên laptop và máy tính bảng.
- Giai đoạn công bố: Ban Tổ chức dễ dàng duyệt và chọn đúng 200 tác phẩm đạt điểm cao nhất, kích hoạt tiến trình gửi 200 email tự động thông báo trong vòng chưa đầy 60 giây.
[350+ Tác giả] ──► [1.000+ Tác phẩm] ──► [Hội đồng 5 Giám khảo] ──► [Tuyển chọn 200 Ảnh] ──► [Phát hành Triển lãm]
Yêu cầu cấu hình hệ thống triển khai (Deployment Specifications)
- Cấu hình phần cứng tối thiểu (Server):
- CPU: 2 Cores (2.4 GHz trở lên).
- RAM: 4 GB DDR4.
- Dung lượng ổ cứng: 80 GB SSD (NVMe khuyến nghị để tăng tốc I/O đọc/ghi ảnh).
- Môi trường phần mềm:
- Hệ điều hành: Ubuntu Server 20.04 LTS / 22.04 LTS.
- Web Server: Nginx 1.22 hoặc Apache 2.4 với module
mod_rewrite được kích hoạt.
- Database: MySQL 8.0 trở lên.
- PHP: Phiên bản 8.1 trở lên với các extensions:
OpenSSL, PDO, Mbstring, Tokenizer, XML, Ctype, JSON, GD / Imagick.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Hệ thống chưa tích hợp thuật toán nén ảnh tự động thông minh phía Server để tối ưu hóa không gian lưu trữ lâu dài.
- Chưa có tính năng kiểm tra tự động thông số EXIF (độ phân giải gốc, tiêu cự, loại máy ảnh) để tự động loại bỏ các tác phẩm không đạt tiêu chuẩn kỹ thuật.
Hướng phát triển trong tương lai
- Tích hợp trí tuệ nhân tạo (AI & Computer Vision): Ứng dụng thuật toán Perceptual Hashing (pHash) và Convolutional Neural Networks (CNN) để phát hiện tự động các bức ảnh có dấu hiệu vi phạm bản quyền hoặc trùng lặp góc chụp.
- Đóng gói ứng dụng di động đa nền tảng (Mobile App): Sử dụng Flutter để xây dựng ứng dụng di động cho Thí sinh và Ban Giám khảo, hỗ trợ thông báo đẩy (Push Notifications) khi có kết quả chấm.
- Nâng cấp kiến trúc Microservices: Tách biệt module xử lý ảnh (Image Processing Service) và module gửi Mail (Notification Service) bằng Docker và Apache Kafka để sẵn sàng chịu tải cho các cuộc thi cấp quốc gia (quy mô trên 50.000 tác phẩm).
Đối tượng hưởng lợi
┌────────────────────────────────────────────────────────────────────────┐
│ ĐỐI TƯỢNG HƯỞNG LỢI │
├───────────────────┬────────────────────┬───────────────────────────────┤
│ 📸 Thí sinh │ 👨💻 Lập trình viên │ 🏛️ Đơn vị tổ chức │
│ • Nộp bài 1 chạm │ • Mã nguồn chuẩn │ • Tiết kiệm 75% chi phí │
│ • Nhận mail tự động│ MVC & DAO Pattern │ • Tuyển chọn Top 200 tức thì │
└───────────────────┴────────────────────┴───────────────────────────────┘
- Thí sinh & Nghệ sĩ nhiếp ảnh: Trải nghiệm nộp bài trực tuyến đơn giản, bảo mật, minh bạch; nhận thông báo kết quả tức thì qua hòm thư điện tử cá nhân.
- Lập trình viên & Sinh viên ngành CNTT: Tài liệu tham khảo chuẩn mực về việc triển khai kiến trúc MVC, áp dụng DAO Pattern trong Laravel và thiết kế cơ sở dữ liệu quan hệ tối ưu.
- Đơn vị tổ chức & Hội đồng nghệ thuật: Công cụ quản trị chuyên nghiệp giúp tinh gọn bộ máy vận hành, số hóa hoàn toàn khâu chấm giải và nâng cao tính minh bạch, uy tín cho cuộc thi.
- Cộng đồng nghiên cứu ứng dụng: Minh chứng rõ nét cho việc ứng dụng công nghệ thông tin vào công tác bảo tồn, phát huy và quảng bá các giá trị văn hóa - nghệ thuật địa phương.
Câu hỏi thường gặp
1. Cần chuẩn bị những gì để triển khai hệ thống lên máy chủ thực tế?
Để triển khai hệ thống, quản trị viên cần một máy chủ cài đặt hệ điều hành Linux (Ubuntu/CentOS), thiết lập ngăn xếp phần mềm LEMP (Linux, Nginx, MySQL, PHP 8.1), cài đặt công cụ quản lý gói Composer, trỏ tên miền (Domain Name) về IP máy chủ và cấu hình chứng chỉ bảo mật SSL/TLS miễn phí qua Let's Encrypt.
2. Hệ thống có khả năng đáp ứng bao nhiêu người dùng cùng lúc?
Với cấu hình máy chủ tiêu chuẩn (4 Core CPU, 8GB RAM), kiến trúc Laravel kết hợp chỉ mục (Index) CSDL MySQL cho phép hệ thống phục vụ đồng thời hơn 300 - 500 yêu cầu/giây mà không xảy ra hiện tượng nghẽn cổ chai dữ liệu.
3. Ban Giám khảo có thể chấm điểm trên điện thoại hoặc máy tính bảng không?
Giao diện của hệ thống được xây dựng hoàn toàn trên nền tảng Bootstrap 5 với thiết kế Responsive Web Design (RWD), tự động tương thích và hiển thị tối ưu trên mọi kích thước màn hình từ Desktop, Laptop đến Tablet và Smartphone.
4. Chi phí duy trì và bảo trì hệ thống hàng năm là bao nhiêu?
Chi phí vận hành hệ thống rất tiết kiệm do sử dụng $100%$ công nghệ mã nguồn mở. Đơn vị tổ chức chỉ cần chi trả phí thuê máy chủ (Cloud VPS) và tên miền, ước tính khoảng 1.500.000 đến 3.000.000 VNĐ mỗi năm cho một cuộc thi quy mô cấp tỉnh.
5. Dữ liệu bài thi và ảnh có bị mất mát nếu máy chủ gặp sự cố không?
Hệ thống hỗ trợ cơ chế sao lưu tự động (Automated Backup) toàn bộ cơ sở dữ liệu MySQL và thư mục lưu trữ ảnh lên các dịch vụ đám mây (Google Drive / Amazon S3) theo lịch trình định kỳ hàng ngày, đảm bảo an toàn dữ liệu $100%$.
Kết luận
Đồ án tốt nghiệp đại học "Phần mềm thu nhận và chấm điểm ảnh" do sinh viên Khuất Văn Đức (Lớp D17HTTT3, Học viện Công nghệ Bưu chính Viễn thông) thực hiện dưới sự hướng dẫn của TS. Nguyễn Quang Hưng đã giải quyết xuất sắc bài toán số hóa toàn diện quy trình tổ chức cuộc thi ảnh nghệ thuật. Bằng việc kết hợp chặt chẽ giữa lý thuyết phân tích thiết kế hệ thống hướng đối tượng UML, mô hình phân tầng MVC, mẫu thiết kế DAO và nền tảng công nghệ Laravel - MySQL, dự án đã mang lại một sản phẩm phần mềm hoàn chỉnh, có tính ứng dụng thực tiễn cao, đáp ứng trực tiếp nhu cầu cấp thiết của cuộc thi "Vẻ đẹp của thành phố Sơn La". Đây là bước tiến quan trọng mở ra tiềm năng nhân rộng mô hình quản trị sự kiện văn hóa số cho các tỉnh thành và đơn vị văn hóa nghệ thuật trên toàn quốc.