Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và bối cảnh hậu đại dịch, quản trị nhân sự tại các doanh nghiệp đòi hỏi sự tối ưu hóa về tốc độ, tính minh bạch và mức độ an toàn vệ sinh dịch tễ. Phương thức điểm danh truyền thống (như ghi sổ tay, quẹt thẻ từ RFID, quét vân tay hay định vị qua mạng Wi-Fi nội bộ) bộc lộ nhiều rủi ro cố hữu:

  • Tình trạng gian lận ("chấm công hộ"): Xảy ra phổ biến ở các hệ thống dùng thẻ từ hoặc chia sẻ kết nối mạng.
  • Tắc nghẽn giờ cao điểm: Đầu đọc vân tay quang học truyền thống mất từ 1.5 đến 3 giây để xác thực mỗi lượt, dễ gây ùn ứ khi tan ca hoặc vào ca.
  • Rủi ro tiếp xúc và độ chính xác thấp: Đầu đọc vân tay dễ bị lỗi từ 15% đến 20% đối với nhân sự có vân tay mờ hoặc tay ra mồ hôi. Đồng thời, việc tiếp xúc bề mặt cảm biến khó vệ sinh bằng cồn y tế tiềm ẩn nguy cơ lây lan mầm bệnh.

Hệ thống hỗ trợ chấm công tự động bằng Camera AI do sinh viên Võ Thành Thuận thực hiện dưới sự hướng dẫn của TS. Huỳnh Phước Hải (Trường Đại học An Giang) ra đời nhằm giải quyết triệt để các hạn chế trên. Hệ thống áp dụng mô hình nhận diện khuôn mặt không chạm (Contactless Biometrics) thông qua việc kết hợp thiết bị phần cứng Hanet AI Camera và kiến trúc phần mềm phân tán hiện đại.

flowchart LR
    A["Camera AI Edge (0.25s)"] -->|HTTPS Webhook / REST API| B["ASP.NET Core 6.0 Gateway"]
    B -->|Entity Framework Core| C[("Microsoft SQL Server 2019")]
    B <-->|JSON Data Stream| D["Blazor WebAssembly SPA (Client Browser)"]

Mục tiêu nghiên cứu của dự án

  1. Tích hợp phần cứng Camera AI chuyên dụng: Khai thác API của thiết bị Hanet AI Camera để nhận diện khuôn mặt tự động với độ trễ siêu thấp dưới 0.25 giây trong khoảng cách từ 1m đến 5m.
  2. Xây dựng hệ thống Web Dashboard tập trung: Phát triển giao diện Single Page Application (SPA) trên nền tảng Blazor WebAssembly (.NET 6.0) cho phép điều hành đa nền tảng (Windows, macOS, Linux, Android, iOS) mà không phụ thuộc hệ điều hành máy khách.
  3. Tự động hóa quy trình quản trị nhân sự - chấm công: Xây dựng module tự động tính toán dữ liệu Check-in/Check-out, phân ca làm việc linh hoạt, xử lý dữ liệu đi trễ/về sớm và quản lý đơn nghỉ phép, tạm ứng lương.
  4. Công cụ cấu hình công thức lương động: Cho phép doanh nghiệp tự định nghĩa biểu thức tính lương linh hoạt dựa trên ngày công thực tế, chức vụ, phòng ban và các khoản bảo hiểm xã hội.

Phạm vi và giới hạn của đề tài

  • Phạm vi ứng dụng: Triển khai quản lý chấm công và nhân sự tập trung cho các doanh nghiệp, văn phòng cơ quan và chuỗi cơ sở bán lẻ có nhiều chi nhánh.
  • Phần cứng tương thích: Dòng thiết bị Hanet AI Camera tích hợp vi xử lý NPU biên (Edge AI Processing).
  • Giới hạn hệ thống: Hoạt động nhận diện phụ thuộc vào dữ liệu khuôn mặt đã được đăng ký và tối ưu trong điều kiện ánh sáng văn phòng tiêu chuẩn (>15 Lux).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực trạng các giải pháp chấm công phổ biến tại các doanh nghiệp vừa và nhỏ (SMEs) cho thấy sự chênh lệch rõ rệt về hiệu năng và chi phí vận hành:

Tiêu chí so sánh Chấm công sổ sách / Thẻ từ RFID Máy quét dấu vân tay Phần mềm Client Windows (Leopard, Happy Care) Hệ thống Camera AI & WebAssembly (Dự án)
Phương thức xác thực Thủ công / Tiếp xúc thẻ Tiếp xúc bề mặt cảm biến quang học Camera IP + Phần mềm Desktop cục bộ Nhận diện khuôn mặt từ xa (Không chạm)
Tốc độ ghi nhận 2.0 - 5.0 giây/người 1.5 - 3.0 giây/người 1.0 - 2.0 giây/người < 0.25 giây/người
Tính minh bạch Kém (Dễ quẹt hộ thẻ) Khá (Không chấm hộ được) Tốt Tuyệt đối (Chống gian lận bằng AI)
Khả năng hoạt động khi mất mạng Phụ thuộc đầu đọc Lưu trữ bộ nhớ đệm máy Phụ thuộc mạng LAN Lưu trữ biên 99,000 khuôn mặt trên Camera
Tính đa nền tảng Báo cáo qua file Excel rời rạc Kết nối cổng COM/LAN với PC Chỉ chạy trên Windows OS Chạy trên mọi trình duyệt qua WebAssembly
An toàn dịch tễ Tiếp xúc gián tiếp Tiếp xúc trực tiếp bề mặt Không tiếp xúc Hoàn toàn không chạm (Khoảng cách 1-5m)

Dự án áp dụng mô hình phân loại yêu cầu MoSCoW nhằm định hình các chức năng cốt lõi:

quadrantChart
    title Ma trận ưu tiên yêu cầu MoSCoW
    x-axis "Độ phức tạp kỹ thuật thấp" --> "Độ phức tạp kỹ thuật cao"
    y-axis "Mức độ ảnh hưởng kinh doanh thấp" --> "Mức độ ảnh hưởng kinh doanh cao"
    quadrant-1 "Phát triển chiến lược (Should Have)"
    quadrant-2 "Cốt lõi bắt buộc (Must Have)"
    quadrant-3 "Tính năng mở rộng (Won't Have / Could Have)"
    quadrant-4 "Tối ưu hóa thứ cấp (Could Have)"
    "Đồng bộ Check-in Realtime API": [0.85, 0.95]
    "Xác thực khuôn mặt <0.25s": [0.75, 0.90]
    "Quản lý ca làm & Điểm danh": [0.35, 0.88]
    "Phân quyền RBAC & Bảo mật": [0.40, 0.82]
    "Công thức tính lương động": [0.70, 0.75]
    "Import/Export Excel nhân viên": [0.25, 0.65]
    "Giao diện Dark/Light Mode": [0.15, 0.30]
    "Nhận diện thân nhiệt IoT": [0.85, 0.25]

Thiết kế kiến trúc hệ thống

Hệ thống được thiết kế theo kiến trúc phân tầng chuyên biệt, tách biệt hoàn toàn giữa tầng hiển thị Client-side (Blazor Wasm), tầng xử lý nghiệp vụ trung gian Backend API (ASP.NET Core 6.0) và tầng AI biên (Hanet AI Engine):

graph TD
    subgraph ClientLayer ["Client Layer (Blazor WebAssembly SPA)"]
        UI["Razor Components / HTML5 / CSS3 / Bootstrap 5"]
        WasmRuntime[".NET 6 WebAssembly Runtime (Mono Bytecode)"]
        LocalStorage["Client Storage & State Management"]
    end

    subgraph GatewayLayer ["Application / API Layer (.NET 6.0 Web API)"]
        Controller["RESTful API Controllers"]
        Services["Business Logic & Attendance Engine"]
        HanetService["Hanet API Integration Service (HttpClient)"]
        PayrollEngine["Dynamic Payroll Calculation Engine"]
        AuthMiddleware["JWT Authentication & RBAC Middleware"]
    end

    subgraph DataLayer ["Data Storage Layer"]
        EFCore["Entity Framework Core 6.0"]
        SQLServer[("Microsoft SQL Server 2019 Database")]
    end

    subgraph EdgeLayer ["Edge AI Hardware Layer"]
        CameraHanet["Hanet AI Camera (NPU Embedded)"]
        CloudHanet["Hanet Cloud API Platform"]
    end

    UI --> WasmRuntime
    WasmRuntime <-->|JSON over HTTPS| Controller
    Controller --> AuthMiddleware
    AuthMiddleware --> Services
    Services --> HanetService
    Services --> PayrollEngine
    Services --> EFCore
    EFCore <--> SQLServer
    CameraHanet <-->|Sync Face Data / Logs| CloudHanet
    HanetService <-->|REST API / Webhook Events| CloudHanet

Technology Stack và phiên bản chi tiết

  • Frontend Framework: Microsoft Blazor WebAssembly (.NET 6.0 LTS) kết hợp Bootstrap v5.1 UI Toolkit.
  • Backend Runtime: ASP.NET Core Web API 6.0 (C# 10).
  • Database Management System: Microsoft SQL Server 2019 Standard Edition.
  • Edge Hardware Integration: Hanet AI Camera API v2.0 (Open API).
  • ORM: Entity Framework Core 6.0.4.
  • Data Serialization: System.Text.Json (JSON Format chuẩn RFC 8259).

Thiết kế cơ sở dữ liệu chi tiết

Mô hình dữ liệu quan hệ (RDBMS) gồm các bảng chuẩn hóa để đảm bảo toàn vẹn dữ liệu:

-- Schema trích xuất cho các thực thể nòng cốt của hệ thống
CREATE TABLE Departments (
    DepartmentId INT IDENTITY(1,1) PRIMARY KEY,
    DepartmentName NVARCHAR(100) NOT NULL,
    Description NVARCHAR(255)
);

CREATE TABLE Positions (
    PositionId INT IDENTITY(1,1) PRIMARY KEY,
    PositionName NVARCHAR(100) NOT NULL,
    DepartmentId INT FOREIGN KEY REFERENCES Departments(DepartmentId),
    BaseSalaryCoefficient DECIMAL(18,2) DEFAULT 1.0
);

CREATE TABLE Employees (
    EmployeeId INT IDENTITY(1,1) PRIMARY KEY,
    FullName NVARCHAR(150) NOT NULL,
    Email VARCHAR(100) UNIQUE NOT NULL,
    Phone VARCHAR(20),
    HanetPlaceId VARCHAR(50),
    HanetAliasId VARCHAR(100) UNIQUE,
    PositionId INT FOREIGN KEY REFERENCES Positions(PositionId),
    Status BIT DEFAULT 1 -- 1: Đang làm việc, 0: Đã nghỉ việc
);

CREATE TABLE Shifts (
    ShiftId INT IDENTITY(1,1) PRIMARY KEY,
    ShiftName NVARCHAR(50) NOT NULL,
    StartTime TIME NOT NULL,
    EndTime TIME NOT NULL,
    GracePeriodMinutes INT DEFAULT 15 -- Thời gian cho phép trễ
);

CREATE TABLE CheckInLogs (
    LogId BIGINT IDENTITY(1,1) PRIMARY KEY,
    EmployeeId INT FOREIGN KEY REFERENCES Employees(EmployeeId),
    DeviceId VARCHAR(50) NOT NULL,
    CheckInTime DATETIME2 NOT NULL,
    CheckInType VARCHAR(20) NOT NULL, -- CheckIn, CheckOut
    DetectedMask BIT DEFAULT 0,
    RawPayload NVARCHAR(MAX)
);

CREATE TABLE SalaryFormulas (
    FormulaId INT IDENTITY(1,1) PRIMARY KEY,
    FormulaName NVARCHAR(100) NOT NULL,
    ExpressionText NVARCHAR(500) NOT NULL, -- Biểu thức ví dụ: (WorkDays * DailyRate) + Bonus - Advance
    IsActive BIT DEFAULT 1
);

Thiết kế Endpoints Web API

Hệ thống giao tiếp thông qua hệ thống RESTful endpoints với chuẩn mã hóa JSON:

Phương thức Endpoint Chức năng nghiệp vụ Dữ liệu truyền tải (Payload)
POST /api/v1/auth/login Xác thực người dùng và cấp JWT { "username": "...", "password": "..." }
GET /api/v1/hanet/devices Lấy danh sách thiết bị Camera theo chi nhánh Query Params: ?placeId={id}
POST /api/v1/hanet/register-user Đăng ký thông tin và vector khuôn mặt lên Hanet multipart/form-data (Ảnh chân dung + Meta info)
GET /api/v1/checkin/daily-logs Truy xuất toàn bộ log điểm danh trong ngày Query Params: ?date=2022-05-17&deptId=1
POST /api/v1/payroll/calculate Kích hoạt bộ tính lương tự động theo tháng { "month": 5, "year": 2022, "formulaId": 2 }

Implementation và kết quả

Quy trình phát triển (Development Process)

Dự án được thực thi theo mô hình Agile Scrum gồm 6 Sprint (mỗi Sprint 2 tuần):

  • Sprint 1 - 2: Phân tích ca sử dụng (Use Cases), thiết kế lược đồ ERD, dựng khung Web API và kết nối Hanet SDK.
  • Sprint 3 - 4: Xây dựng Blazor Components, module quản lý phòng ban, chức vụ, nhân viên và upload avatar đồng bộ lên Cloud Camera.
  • Sprint 5: Lập trình giải thuật chấm công tự động, logic lọc điểm danh Check-in đầu tiên và Check-out cuối cùng trong ngày, công thức tính lương.
  • Sprint 6: Kiểm thử UAT, tối ưu hóa giao diện (Dark/Light mode) và kiểm soát lỗi API.
gantt
    title Kế hoạch triển khai dự án qua 6 Sprints
    dateFormat  YYYY-MM-DD
    section Khảo sát & Thiết kế
    Use case & Thiết kế ERD        :done, s1, 2022-01-03, 14d
    Khởi tạo ASP.NET Core & DB     :done, s2, 2022-01-17, 14d
    section Tích hợp & Module UI
    Tích hợp Hanet Camera API      :done, s3, 2022-01-31, 14d
    Xây dựng Blazor Wasm UI        :done, s4, 2022-02-14, 14d
    section Nghiệp vụ & Đóng gói
    Thuật toán Chấm công & Lương   :done, s5, 2022-02-28, 14d
    UAT, Benchmark & Đóng gói      :done, s6, 2022-03-14, 14d

Thuật toán và Logic cốt lõi

Thuật toán trích xuất đặc trưng khuôn mặt của Hanet Camera AI cho phép nhận diện ngay cả khi nhân sự đeo khẩu trang hoặc kính râm thông qua cơ chế phân vùng nhận diện thích ứng (Adaptive Landmark Occlusion Detection):

  • Trường hợp đeo khẩu trang y tế: Tự động cô lập vùng nửa dưới khuôn mặt, tính toán nhận dạng dựa trên cụm ma trận: Mắt + Lông mày + Vùng trán.
  • Trường hợp đeo kính râm: Tự động cô lập vùng nửa trên, tính toán vector nhận diện dựa trên: Sống mũi + Nhân trung + Cung hàm và miệng.

Đoạn mã tích hợp Service gọi API Hanet bằng C# trong ASP.NET Core Web API:

namespace TimeAttendanceSystem.Services
{
    public interface IHanetService
    {
        Task<HanetCheckInResponse> GetDailyCheckInsAsync(string placeId, DateTime date);
        Task<bool> RegisterEmployeeFaceAsync(EmployeeRegistrationDto dto);
    }

    public class HanetService : IHanetService
    {
        private readonly HttpClient _httpClient;
        private readonly IConfiguration _config;
        private readonly ILogger<HanetService> _logger;

        public HanetService(HttpClient httpClient, IConfiguration config, ILogger<HanetService> logger)
        {
            _httpClient = httpClient;
            _config = config;
            _logger = logger;
            _httpClient.BaseAddress = new Uri(_config["HanetApi:BaseUrl"]);
        }

        public async Task<HanetCheckInResponse> GetDailyCheckInsAsync(string placeId, DateTime date)
        {
            try
            {
                var token = _config["HanetApi:Token"];
                var formattedDate = date.ToString("yyyy-MM-dd");
                var requestUrl = $"devices/getCheckinByPlaceId?token={token}&placeId={placeId}&date={formattedDate}";

                var response = await _httpClient.GetAsync(requestUrl);
                response.EnsureSuccessStatusCode();

                var jsonContent = await response.Content.ReadAsStringAsync();
                var result = JsonSerializer.Deserialize<HanetCheckInResponse>(jsonContent, new JsonSerializerOptions
                {
                    PropertyNameCaseInsensitive = true
                });

                return result ?? new HanetCheckInResponse { ReturnCode = -1, Message = "Dữ liệu trả về rỗng" };
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Lỗi khi gọi API Hanet lấy log ngày {Date}", date);
                throw;
            }
        }

        public async Task<bool> RegisterEmployeeFaceAsync(EmployeeRegistrationDto dto)
        {
            using var formData = new MultipartFormDataContent();
            formData.Add(new StringContent(_config["HanetApi:Token"]), "token");
            formData.Add(new StringContent(dto.PlaceId), "placeId");
            formData.Add(new StringContent(dto.FullName), "name");
            formData.Add(new StringContent(dto.AliasId), "aliasId");

            if (dto.ImageBytes != null && dto.ImageBytes.Length > 0)
            {
                var imageContent = new ByteArrayContent(dto.ImageBytes);
                imageContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
                formData.Add(imageContent, "file", $"{dto.AliasId}.jpg");
            }

            var response = await _httpClient.PostAsync("person/registerByImage", formData);
            return response.IsSuccessStatusCode;
        }
    }
}

Dữ liệu Check-in từ Camera Hanet trả về dưới dạng JSON cấu trúc cao:

{
  "returnCode": 200,
  "message": "Success",
  "data": [
    {
      "id": "REC_9812739128",
      "personName": "Võ Thành Thuận",
      "aliasId": "DPM185194",
      "deviceId": "HANET_AI_01",
      "placeId": "BRANCH_AGU_01",
      "checkinTime": 1652771400000,
      "mask": 1,
      "avatar": "https://storage.hanet.ai/faces/DPM185194_snapshot.jpg"
    }
  ]
}

Logic phân tích công tự động và xử lý giờ đi trễ/về sớm:

public class AttendanceProcessor
{
    public static AttendanceSummary CalculateDailyStatus(List<CheckInLog> logs, Shift shift)
    {
        if (logs == null || !logs.Any())
        {
            return new AttendanceSummary { IsAbsent = true, WorkingHours = 0 };
        }

        var sortedLogs = logs.OrderBy(l => l.CheckInTime).ToList();
        var firstCheckIn = sortedLogs.First().CheckInTime;
        var lastCheckOut = sortedLogs.Last().CheckInTime;

        var shiftStartWithGrace = shift.StartTime.Add(TimeSpan.FromMinutes(shift.GracePeriodMinutes));
        bool isLate = firstCheckIn.TimeOfDay > shiftStartWithGrace;
        bool isEarlyLeave = lastCheckOut.TimeOfDay < shift.EndTime;

        double totalHours = (lastCheckOut - firstCheckIn).TotalHours;

        return new AttendanceSummary
        {
            FirstIn = firstCheckIn,
            LastOut = lastCheckOut,
            IsLate = isLate,
            LateMinutes = isLate ? (int)(firstCheckIn.TimeOfDay - shift.StartTime).TotalMinutes : 0,
            IsEarlyLeave = isEarlyLeave,
            WorkingHours = Math.Round(totalHours, 2),
            IsAbsent = false
        };
    }
}

Kiểm thử và Đánh giá hiệu năng (Testing & Validation)

Hệ thống đã trải qua quá trình kiểm thử tải (Stress test) và kiểm thử chấp nhận người dùng (UAT) với các chỉ số đo lường cụ thể:

  • Tỷ lệ nhận diện khuôn mặt chính xác: Đạt 99.5% trong điều kiện ánh sáng tự nhiên/văn phòng.
  • Thời gian xử lý nhận diện biên của Camera: 0.25 giây/khuôn mặt.
  • Độ trễ API Server (Response Latency): Trung bình 115ms khi xử lý 500 yêu cầu đồng thời (500 Concurrent Requests).
  • Dung lượng tải ứng dụng Blazor Wasm: Lần đầu tải asset/runtime mất ~2.8MB (có nén Brotli), các lần truy cập tiếp theo thông qua Client Browser Cache có thời gian tải dưới 150ms.
pie title Tỷ lệ trạng thái kiểm thử chức năng (UAT 120 Test Cases)
    "Đạt chuẩn (Passed)" : 114
    "Lỗi nhỏ giao diện (Minor UI Fixes)" : 4
    "Cần cải tiến mạng (Network Edge Case)" : 2

Đổi mới và đóng góp

  1. Ứng dụng Edge AI không phụ thuộc đường truyền Internet: Nhờ bộ nhớ lưu trữ tại chỗ của Hanet AI Camera lên tới 99,000 khuôn mặt, quá trình chấm công diễn ra liên tục ngay cả khi mất kết nối mạng. Khi có mạng trở lại, cơ chế Webhook/REST API sẽ đồng bộ dữ liệu về SQL Server tự động.
  2. Loại bỏ hiện tượng "nút thắt cổ chai" khi Check-in: Khoảng cách nhận diện rộng từ 1m đến 5m cho phép nhân viên chỉ cần bước qua cửa là hệ thống đã hoàn tất điểm danh, tăng thông lượng điểm danh lên gấp 4 lần so với máy quét vân tay.
  3. Kiến trúc Full-stack C# thống nhất: Sử dụng hoàn toàn C# từ giao diện người dùng (Blazor WebAssembly) đến tầng máy chủ (ASP.NET Core 6.0), tối ưu hóa khả năng tái sử dụng DTO/Data Model, giảm 40% chi phí chuyển giao mã nguồn và loại bỏ sự phân mảnh giữa JavaScript và Backend.
  4. Bộ máy tính lương tùy biến cao: Cho phép doanh nghiệp áp dụng các công thức tính lương phức tạp với nhiều biến số (ngày công, phụ cấp, hệ số chức vụ, bảo hiểm, tạm ứng) trực tiếp trên giao diện web mà không cần sửa đổi mã nguồn phần mềm.

Ứng dụng thực tế và triển khai

Trường hợp sử dụng thực tế (Use Cases)

  • Văn phòng doanh nghiệp và Tập đoàn: Tự động hóa điểm danh cho hàng trăm nhân viên tại nhiều phòng ban; giám sát và cảnh báo người lạ xâm nhập khu vực làm việc.
  • Môi trường trường học - cơ sở đào tạo: Điểm danh sinh viên/giảng viên tại các khu vực giảng đường đại học mà không cần nhân viên quản lý can thiệp.
  • Chuỗi cửa hàng bán lẻ và Nhà máy: Điểm danh nhân công theo ca kíp phức tạp, xuất bảng lương minh bạch cuối tháng.

Hướng dẫn triển khai hạ tầng (Deployment Guide)

flowchart TD
    Step1["1. Lắp đặt Camera Hanet (Độ cao 1.8m - 2.2m, góc nghiêng 15°)"] --> Step2["2. Đăng ký tài khoản Hanet Developer & Cấp Token API"]
    Step2 --> Step3["3. Cấu hình Connection String SQL Server 2019"]
    Step3 --> Step4["4. Deploy ASP.NET Core 6.0 Web API lên IIS / Kestrel / Docker"]
    Step4 --> Step5["5. Xuất bản Static Assets Blazor WebAssembly lên Nginx / Cloudflare"]
    Step5 --> Step6["6. Đồng bộ Danh sách nhân sự & Chụp hình nhận diện"]

Yêu cầu phần cứng và phần mềm máy chủ

  • Hệ điều hành: Windows Server 2019/2022 hoặc Ubuntu Server 20.04 LTS.
  • Phần mềm: .NET Core Hosting Bundle 6.0, Microsoft SQL Server 2019 (hoặc Azure SQL Database).
  • Phần cứng đề xuất: CPU 4 Cores, 8GB RAM, 100GB SSD NVMe.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Phụ thuộc điều kiện môi trường: Trong môi trường ngược sáng mạnh hoặc thiếu sáng nghiêm trọng (<5 Lux) không có đèn trợ sáng hồng ngoại, tỷ lệ nhận diện có thể giảm xuống 92%.
  • Phụ thuộc vào Cloud trung gian của hãng: Việc lấy log Check-in hiện tại vẫn phải đi qua Hanet Open API Cloud trước khi về cơ sở dữ liệu nội bộ.

Hướng phát triển trong tương lai

  • Xây dựng ứng dụng di động đa nền tảng: Sử dụng .NET MAUI hoặc Flutter kết nối cùng hệ thống Web API để nhân viên tự theo dõi bảng công và nộp đơn nghỉ phép trên smartphone.
  • Triển khai kiến trúc Multi-tenancy SaaS: Cho phép nhiều doanh nghiệp khác nhau cùng đăng ký và sử dụng chung hạ tầng phần mềm trên Cloud.
  • Tích hợp cảm biến thân nhiệt & AI phân tích cảm xúc: Mở rộng phát hiện thân nhiệt tự động và phân tích tâm trạng nhân viên để nâng cao trải nghiệm môi trường công sở.

Đối tượng hưởng lợi

  • Doanh nghiệp & Đơn vị quản lý: Tiết kiệm 85% thời gian tổng hợp công cuối tháng; giảm thiểu sai sót và loại bỏ 100% tình trạng chấm công hộ.
  • Người lao động: Chủ động kiểm tra lịch sử ra vào, số ngày nghỉ phép và tạm ứng lương minh bạch trực tiếp trên Web portal.
  • Lập trình viên & Kỹ sư phần mềm: Cung cấp mô hình tham khảo chuẩn mực về việc kết hợp giữa Blazor WebAssembly, Web API RESTful và thiết bị AI Camera biên.
  • Nhà nghiên cứu & Sinh viên: Tài liệu học thuật thực tế về triển khai thị giác máy tính ứng dụng và chuyển đổi số quy trình doanh nghiệp.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống là gì?

Doanh nghiệp chỉ cần trang bị thiết bị Hanet AI Camera (kết nối Wi-Fi hoặc cáp LAN) tại cửa ra vào và một máy chủ/VPS cài đặt môi trường .NET 6.0, Microsoft SQL Server 2019 để vận hành Web Dashboard.

2. Khi mất kết nối Internet, việc chấm công có bị gián đoạn không?

Hoàn toàn không. Thiết bị Hanet AI Camera tích hợp vi xử lý AI biên lưu trữ sẵn 99,000 khuôn mặt nhân viên và ghi log trực tiếp vào bộ nhớ trong. Khi Internet được kết nối lại, hệ thống sẽ tự động đồng bộ tất cả log Check-in về cơ sở dữ liệu máy chủ.

3. Hệ thống có phát hiện được nhân viên đeo khẩu trang hay kính râm không?

Có. Thuật toán phân vùng thích ứng của Hanet tự động trích xuất các đặc trưng vùng trán - mắt - lông mày (khi đeo khẩu trang) hoặc mũi - nhân trung - miệng (khi đeo kính râm) với độ chính xác đạt trên 99.5%.

4. Hệ thống có hỗ trợ xuất dữ liệu ra bảng tính Excel để tính lương không?

Có. Giao diện quản trị tích hợp sẵn tính năng Import/Export danh sách nhân viên, bảng log chấm công chi tiết theo ngày/tháng và bảng tính lương tự động sang định dạng file .xlsx.

5. Chi phí đầu tư và thời gian hoàn vốn (ROI) ước tính như thế nào?

Chi phí đầu tư thiết bị phần cứng Camera AI ban đầu tương đương các máy chấm công vân tay cao cấp, nhưng giúp doanh nghiệp từ 50-100 nhân viên tiết kiệm khoảng 20-30 giờ làm việc của phòng Nhân sự mỗi tháng, thời gian hoàn vốn đầu tư chỉ từ 4 đến 6 tháng.


Kết luận

Đồ án khóa luận "Hệ thống hỗ trợ chấm công tự động bằng Camera AI" của tác giả Võ Thành Thuận đã xây dựng thành công một giải pháp công nghệ toàn diện, giải quyết triệt để bài toán chấm công không chạm, tốc độ cao và minh bạch cho doanh nghiệp. Bằng cách kết hợp giữa sức mạnh AI biên của phần cứng Hanet Camera và kiến trúc full-stack .NET 6.0 LTS hiện đại (Blazor WebAssembly + ASP.NET Core Web API), hệ thống khẳng định tính khả thi vượt trội và giá trị ứng dụng thực tiễn cao trong chuyển đổi số doanh nghiệp.