Giới thiệu dự án

Sự bùng nổ của cuộc cách mạng Internet of Things (IoT) và thị trường nhà thông minh (Smart Home) toàn cầu với tốc độ tăng trưởng kép hàng năm (CAGR) đạt hơn 25% đang đặt ra yêu cầu cấp thiết về việc nâng cấp hệ thống an ninh gia đình. Các loại khóa cơ khí truyền thống (khóa bấm, khóa chốt, khóa tay gạt) bộc lộ nhiều điểm yếu cố hữu: nguy cơ bị bẻ khóa (lockpicking), thất lạc chìa khóa, không có khả năng ghi nhận nhật ký ra vào (access logs) và hoàn toàn thiếu khả năng điều khiển hoặc giám sát từ xa. Mặc dù các khóa điện tử thế hệ đầu (dùng mật khẩu số hoặc thẻ RFID độc lập) đã giải quyết được vấn đề cơ học, chúng vẫn đối mặt với rủi ro bị nhìn trộm mã PIN hoặc sao chép thẻ từ (card cloning) do thiếu cơ chế xác thực đa yếu tố (Multi-Factor Authentication - MFA).

Nhằm giải quyết triệt để các hạn chế trên, đề tài "Hệ thống khóa cửa thông minh sử dụng nhận diện khuôn mặt chạy trên máy tính nhúng" (Smart Home Door Lock Using Facial Recognition on SBC) do kỹ sư Lê Hoàng Long thực hiện dưới sự hướng dẫn của TS. Lê Kim Hùng (Khoa Mạng máy tính và Truyền thông, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM) đã được nghiên cứu và phát triển hoàn chỉnh.

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

  1. Thiết kế kiến trúc bảo mật 3 lớp (3-Factor Authentication): Tích hợp tuần tự xác thực qua thẻ từ RFID RC522, bàn phím số ảo nhập mã PIN bảo mật, và thuật toán nhận diện khuôn mặt cục bộ trên máy tính nhúng (Single Board Computer - SBC).
  2. Triển khai thị giác máy tính trên phần cứng biên (Edge Computer Vision): Tối ưu hóa thuật toán phát hiện và nhận dạng khuôn mặt (Viola-Jones kết hợp Local Binary Patterns Histograms - LBPH) để thực thi thời gian thực trên vi xử lý Raspberry Pi mà không phụ thuộc vào kết nối Internet liên tục.
  3. Xây dựng hệ sinh thái quản trị đồng bộ: Phát triển Web Application trên nền tảng ReactJS và máy chủ trung gian Flask REST API, cho phép thu thập dữ liệu khuôn mặt, huấn luyện lại mô hình (model re-training) từ xa và đẩy trọng số (model weights) trực tiếp xuống SBC.
  4. Giám sát và đồng bộ thời gian thực: Lưu trữ cấu hình người dùng và lịch sử truy vết ra vào (audit logs) thông qua cơ sở dữ liệu đám mây Google Firebase Realtime Database.

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

  • Phạm vi triển khai: Mô hình phần cứng hoàn chỉnh gồm Raspberry Pi 3 Model B, Camera Logitech HD C270, Khóa điện từ Solenoid 12VDC, Relay 12VDC, Module RFID RC522 và màn hình hiển thị cảm ứng LCD.
  • Giới hạn hệ thống: Thuật toán nhận diện quang học LBPH yêu cầu điều kiện ánh sáng ổn định (200 - 500 Lux), góc nghiêng khuôn mặt (yaw/pitch/roll) không vượt quá 30 độ; hệ thống chưa tích hợp cảm biến hồng ngoại 3D chống giả mạo sâu (Anti-spoofing).

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

Phân tích hiện trạng và yêu cầu người dùng

Tiêu chí so sánh Khóa cơ truyền thống Khóa số/Thẻ từ đơn lẻ Khóa thông minh đám mây (Cloud Smart Lock) Giải pháp đề xuất (3-Factor SBC Lock)
Bảo mật đa lớp (MFA) Không (1 lớp vật lý) Thấp (1 lớp PIN/RFID) Trung bình (PIN + Vân tay) Cao (RFID + PIN + Khuôn mặt LBPH)
Xử lý khi mất mạng Độc lập hoàn toàn Độc lập Mất khả năng điều khiển nâng cao Nhận diện và mở khóa 100% Offline
Quản trị từ xa (Web) Không Không Phụ thuộc App độc quyền Web App tùy biến qua REST API & Firebase
Chi phí triển khai Rất thấp (< $15) Trung bình ($50 - $100) Cao ($250 - $500) Tối ưu ($90 - $130)
Khả năng cập nhật AI Không Không Cố định bởi nhà sản xuất Train model linh hoạt qua giao diện Web

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must Have (Bắt buộc): Nhận dạng khuôn mặt chính xác với độ trễ < 1.0 giây; xác thực thẻ RFID; điều khiển đóng/ngắt Relay khóa 12V; giao diện cảm ứng Tkinter trên SBC.
  • Should Have (Nên có): Bảng điều khiển ReactJS quản lý danh sách người dùng (thêm, sửa, xóa); tính năng chụp ảnh tập dữ liệu và train lại model qua Flask API.
  • Could Have (Có thể có): Thông báo trạng thái qua Firebase Cloud Messaging (FCM); phân quyền truy cập theo khung giờ.
  • Won't Have (Chưa thực hiện): Nhận diện mống mắt; mở khóa bằng giọng nói (Voiceprint).

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

Kiến trúc giải pháp được phân tầng rõ ràng nhằm phân tách giữa luồng điều khiển phần cứng (Hardware Control Plane) và luồng quản trị dữ liệu (Management Plane):

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

Hardware:
  SBC: Raspberry Pi 3 Model B (Broadcom BCM2837 64-bit ARMv8 Quad Core @ 1.2GHz, 1GB LPDDR2 RAM)
  Camera: Logitech C270 HD (720p/30fps, Tiêu cự cố định)
  Lock Mechanism: Solenoid Lock 12VDC / Relay Optocoupler 12VDC 10A
  RFID: RC522 13.56MHz SPI Module

Software & Frameworks:
  Operating System: Raspberry Pi OS (Debian Buster 32-bit kernel)
  Backend Engine: Python 3.7+ / Flask 1.1.2 / Werkzeug 1.0.1 / Jinja2 2.11.3
  Computer Vision: OpenCV 4.5.1 (opencv-contrib-python với module opencv_face)
  Frontend Web: ReactJS 17.0.2 / Node.js 14.x LTS / Axios / Webpack
  Embedded GUI: Python Tkinter 8.6
  Database & Cloud Services: Google Firebase SDK 8.x (Realtime Database, Authentication, Hosting)

Thiết kế cấu trúc dữ liệu Firebase & RESTful API Endpoints

Cơ sở dữ liệu Firebase Realtime Database được thiết kế phi quan hệ (NoSQL) với cấu trúc JSON chuẩn hóa:

{
  "users": {
    "USR_17520708": {
      "user_id": 1,
      "full_name": "Le Hoang Long",
      "rfid_tag": "E2 45 8B 1A",
      "pin_hash": "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
      "is_active": true,
      "created_at": 1621500000
    }
  },
  "access_logs": {
    "LOG_20210520_001": {
      "timestamp": "2021-05-20T08:30:15Z",
      "user_id": 1,
      "auth_method": "RFID_PIN_FACE",
      "status": "SUCCESS",
      "confidence_score": 38.45
    }
  }
}

Hệ thống cung cấp các endpoint RESTful chính:

  • POST /api/v1/user/capture: Điều khiển camera chụp 50 mẫu ảnh khuôn mặt của người dùng mới, lưu vào thư mục dataset/User.<id>.<count>.jpg.
  • POST /api/v1/model/train: Kích hoạt tiến trình trích xuất đặc trưng LBP và tạo file nhị phân trainer/trainer.yml.
  • GET /api/v1/model/sync: Cho phép Raspberry Pi tải file mô hình huấn luyện mới nhất về bộ nhớ cục bộ.
  • POST /api/v1/door/unlock: Gửi tín hiệu điều khiển mở chốt cửa từ giao diện Web khẩn cấp.

Implementation và kết quả

Chi tiết thuật toán và giải pháp lập trình

Hệ thống xử lý thị giác máy tính trải qua hai giai đoạn liên hoàn: Phát hiện khuôn mặt (Face Detection) bằng thuật toán Viola-Jones và Nhận diện danh tính (Face Recognition) bằng Local Binary Patterns Histograms (LBPH).

+------------------+      +--------------------+      +----------------------+
|  Frame (Grayscale| ---> |    Viola-Jones     | ---> |  LBP Feature Map     |
|   Image 640x480) |      |   Cascade Classifier|     | (R=1, P=8 Neighbors) |
+------------------+      +--------------------+      +----------------------+
                                                                 |
                                                                 v
+------------------+      +--------------------+      +----------------------+
|  Unlock Decision | <--- |   Chi-Square /     | <--- |  Spanning Histogram  |
| (Confidence < 50)|      | Euclidean Distance |      |   (Grid 8x8 Cells)   |
+------------------+      +--------------------+      +----------------------+
  1. Thuật toán Viola-Jones: Sử dụng các bộ lọc đặc trưng dạng sóng chữ nhật (Haar-like Features: Edge, Line, Center-surround) kết hợp cấu trúc ảnh tích hợp (Integral Image) để tính tổng giá trị pixel trong bất kỳ vùng chữ nhật nào chỉ với 4 phép truy xuất bộ nhớ:

$$ii(x, y) = \sum_{x' \le x, y' \le y} i(x', y')$$

Thuật toán AdaBoost kết hợp hàng ngàn bộ phân loại yếu (weak classifiers) thành cấu trúc phân tầng (Cascade) giúp loại bỏ hơn 95% vùng nền không chứa khuôn mặt ngay tại các tầng đầu tiên, tiết kiệm tối đa CPU của Raspberry Pi.

  1. Thuật toán Local Binary Patterns (LBP): Với mỗi điểm ảnh tâm $g_c$, so sánh cường độ sáng với $P$ điểm lân cận trên đường tròn bán kính $R=1$:

$$LBP_{P, R} = \sum_{p=0}^{P-1} s(g_p - g_c) 2^p, \quad \text{với } s(x) = \begin{cases} 1 & \text{khi } x \ge 0 \ 0 & \text{khi } x < 0 \end{cases}$$

Sau khi chuyển đổi toàn bộ ảnh sang ma trận nhị phân 8-bit (chuyển sang hệ thập phân từ $0$ đến $255$), ảnh được chia thành các lưới ô (ví dụ $8 \times 8$). Lược đồ tần suất (Histogram) của từng ô được nối lại thành một vector đặc trưng duy nhất.

Triển khai Module nhận diện và điều khiển phần cứng (Python)

import cv2
import numpy as np
import RPi.GPIO as GPIO
import time

# Cấu hình chân GPIO cho Relay điều khiển khóa điện 12V
RELAY_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY_PIN, GPIO.OUT)
GPIO.output(RELAY_PIN, GPIO.LOW)  # Khóa mặc định đóng

# Khởi tạo bộ phát hiện Viola-Jones và mô hình nhận diện LBPH
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
recognizer = cv2.face.LBPHFaceRecognizer_create(radius=1, neighbors=8, grid_x=8, grid_y=8)
recognizer.read('trainer/trainer.yml')

def unlock_door(duration=5):
    """Kích hoạt Relay đóng tiếp điểm cấp nguồn 12V cho cuộn hút Solenoid."""
    GPIO.output(RELAY_PIN, GPIO.HIGH)
    time.sleep(duration)
    GPIO.output(RELAY_PIN, GPIO.LOW)

def verify_face(camera_index=0, max_attempts=30):
    """Nhận diện khuôn mặt từ Camera stream với ngưỡng tin cậy."""
    cap = cv2.VideoCapture(camera_index)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
    
    attempts = 0
    authenticated = False
    recognized_user_id = None
    
    while attempts < max_attempts:
        ret, frame = cap.read()
        if not ret:
            break
            
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(
            gray, 
            scaleFactor=1.2, 
            minNeighbors=5, 
            minSize=(100, 100)
        )
        
        for (x, y, w, h) in faces:
            roi_gray = gray[y:y+h, x:x+w]
            # LBPH trả về user_id và khoảng cách (confidence: càng thấp càng khớp)
            user_id, confidence = recognizer.predict(roi_gray)
            
            if confidence < 50:  # Ngưỡng tin cậy chấp nhận (Confidence Threshold)
                recognized_user_id = user_id
                authenticated = True
                break
                
        if authenticated:
            break
        attempts += 1

    cap.release()
    if authenticated:
        unlock_door()
        return True, recognized_user_id
    return False, None

Triển khai Flask REST API Server cho Module Huấn luyện Mô hình

from flask import Flask, request, jsonify
import cv2
import os
import numpy as np
from PIL import Image

app = Flask(__name__)
DATASET_PATH = 'dataset/'
TRAINER_FILE = 'trainer/trainer.yml'

@app.route('/api/v1/model/train', methods=['POST'])
def train_model():
    """Trích xuất dữ liệu ảnh từ dataset và xuất file trọng số LBPH."""
    try:
        recognizer = cv2.face.LBPHFaceRecognizer_create()
        image_paths = [os.path.join(DATASET_PATH, f) for f in os.listdir(DATASET_PATH) if f.endswith('.jpg')]
        face_samples = []
        ids = []

        for image_path in image_paths:
            pil_img = Image.open(image_path).convert('L')  # Chuyển ảnh xám
            img_numpy = np.array(pil_img, 'uint8')
            # Cấu trúc file name: User.<id>.<count>.jpg
            user_id = int(os.path.split(image_path)[-1].split(".")[1])
            face_samples.append(img_numpy)
            ids.append(user_id)

        if len(ids) == 0:
            return jsonify({"status": "error", "message": "No training samples found"}), 400

        recognizer.train(face_samples, np.array(ids))
        os.makedirs(os.path.dirname(TRAINER_FILE), exist_ok=True)
        recognizer.write(TRAINER_FILE)

        return jsonify({
            "status": "success",
            "message": f"Successfully trained {len(set(ids))} users with {len(face_samples)} samples."
        }), 200
    except Exception as e:
        return jsonify({"status": "error", "message": str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=False)

Kết quả đo lường và thực nghiệm

Hệ thống được thử nghiệm thực tế qua 200 lần mở cửa liên tục tại phòng lab với các điều kiện môi trường khác nhau:

Phân phối Tỷ lệ Nhận diện theo Môi trường Ánh sáng:
Standard Light (300 Lux) : [========================================] 95.5%
Low Light (50 Lux)       : [============================] 72.0%
Side Angle (>25 deg)     : [==============================] 78.5%
With Glasses/Accessories : [====================================] 89.0%
Chỉ số kỹ thuật Giá trị thực nghiệm Tiêu chuẩn mục tiêu Đánh giá
Tốc độ xử lý khung hình (Frame Rate) 12 - 15 FPS 10 FPS Đạt (chạy mượt trên RPi 3)
Độ trễ xác thực toàn trình (Latency) 280 ms - 450 ms < 1000 ms Rất tốt (mở cửa gần như tức thì)
Độ chính xác nhận diện tổng thể 93.5% > 90% Vượt chỉ tiêu
Tỷ lệ nhận diện sai (FAR - False Accept) 0.8% < 1.0% Đạt độ an toàn cao
Tỷ lệ từ chối sai (FRR - False Reject) 4.2% < 5.0% Chấp nhận được với camera 2D
Thời gian Train model (5 người, 250 ảnh) 4.2 giây < 15 giây Xử lý nhanh qua Flask Backend

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

  1. Kiến trúc Edge-to-Cloud Hybrid linh hoạt: Thay vì đẩy toàn bộ luồng video lên Cloud Server gây tốn băng thông và tăng độ trễ, hệ thống xử lý hoàn toàn mô hình LBPH trên CPU của SBC Raspberry Pi. Mô hình này giúp đảm bảo cửa vẫn hoạt động bình thường ngay cả khi đứt cáp mạng Internet.
  2. Cơ chế huấn luyện trực tuyến (Online Model Update): Cho phép người quản trị thêm khuôn mặt người dùng mới qua Web App, hệ thống tự động kích hoạt API huấn luyện lại file nhị phân trainer.yml và đồng bộ hóa mà không cần phải can thiệp thủ công bằng bàn phím/chuột vào bo mạch nhúng.
  3. Mô hình bảo mật chiều sâu (Defense-in-Depth): Phối hợp 3 nhân tố xác thực độc lập: Thẻ RFID (Cái người dùng có - What you have) + Mã PIN (Cái người dùng biết - What you know) + Khuôn mặt (Bản thân người dùng - What you are), triệt tiêu hoàn toàn nguy cơ bị vượt qua bởi các tấn công đơn lẻ.

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

Trường hợp sử dụng (Use Cases)

  • Căn hộ và Biệt thự thông minh (Smart Villa): Cung cấp giải pháp ra vào không chạm cho chủ nhà, đồng thời ghi nhận lịch sử giúp giám sát người giúp việc hoặc khách đến thăm.
  • Phòng máy chủ / Trung tâm dữ liệu (Server Room Access): Đòi hỏi tính bảo mật tối cao với yêu cầu xác thực đồng thời cả 3 yếu tố mới được phép mở cửa.
  • Văn phòng doanh nghiệp vừa và nhỏ (SME Access Control): Tích hợp chấm công tự động dựa trên nhật ký ghi nhận trên Firebase Realtime Database.

Phân tích chi phí phần cứng (Hardware Bill of Materials - BOM)

STT Thiết bị / Linh kiện Thông số chi tiết Đơn giá ước tính (VND)
1 Bo mạch Raspberry Pi 3 Model B Quad-core 1.2GHz, 1GB RAM, WiFi/BLE 950.000
2 Camera Logitech HD C270 720p, Kết nối USB 2.0 450.000
3 Khóa chốt điện Solenoid 12V Lực giữ 150kg, Điện áp 12VDC/0.8A 180.000
4 Màn hình cảm ứng LCD 3.5 inch Cổng SPI / HDMI cho Raspberry Pi 320.000
5 Module RFID RC522 + Thẻ từ Tần số 13.56MHz SPI 45.000
6 Module Relay Opto cách ly 12V Kích mức Low/High, chịu tải 10A 35.000
7 Nguồn Adapter 12V-2A & 5V-2.5A Cấp nguồn độc lập khóa và SBC 120.000
Tổng Tổng chi phí phần cứng ~ 2.100.000 VND (~$90 USD)

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

Hạn chế kỹ thuật

  • Độ nhạy sáng: Thuật toán LBPH dựa trên độ biến thiên mức xám cục bộ nên độ chính xác suy giảm rõ rệt trong môi trường thiếu sáng (< 50 Lux) hoặc ánh sáng ngược gắt.
  • Nguy cơ tấn công 2D Spoofing: Chưa tích hợp camera đo chiều sâu (RGB-D) hoặc thuật toán phát hiện chuyển động mắt/chớp mắt (Eye-blink Liveness Detection) để chống giả mạo bằng ảnh in hoặc màn hình điện thoại.

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

  • Nâng cấp phần cứng tăng tốc AI: Chuyển đổi nền tảng sang Raspberry Pi 4 kết hợp Google Coral USB Accelerator hoặc NVIDIA Jetson Nano để triển khai các mô hình Deep Learning tiên tiến như MobileFaceNet, ArcFace hoặc InsightFace.
  • Tích hợp cảm biến IR & Liveness Detection: Bổ sung đèn LED hồng ngoại và thuật toán kiểm tra nhấp nháy mắt thời gian thực để ngăn chặn 100% các cuộc tấn công giả mạo ảnh tĩnh.

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

  • Sinh viên & Nghiên cứu sinh: Cung cấp tài liệu tham khảo thực tế về việc tích hợp trọn vẹn giữa Phần cứng IoT (SBC, GPIO, SPI), Trí tuệ nhân tạo (OpenCV, LBPH), Lập trình ứng dụng nhúng (Tkinter) và Công nghệ Web hiện đại (ReactJS, Flask, Firebase).
  • Kỹ sư nhúng & Lập trình viên IoT: Nắm vững kiến trúc triển khai mô hình Edge Computing và quy trình đồng bộ hóa trọng số mô hình qua REST API.
  • Chủ hộ & Doanh nghiệp: Sở hữu một giải pháp kiểm soát an ninh chi phí thấp, tính tùy biến cao, không bị khóa cứng vào hệ sinh thái của các nhà cung cấp thương mại đắt đỏ.

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

  1. Hệ thống có hoạt động được khi mất kết nối mạng Internet không?
    Có. Toàn bộ tiến trình xác thực thẻ RFID, kiểm tra mã PIN và thuật toán nhận diện khuôn mặt LBPH được thực thi 100% cục bộ trên bo mạch Raspberry Pi 3. Khi mất mạng, cửa vẫn đóng/mở bình thường; dữ liệu nhật ký ra vào sẽ được lưu vào bộ nhớ đệm và tự động đồng bộ lên Firebase khi có mạng trở lại.

  2. Tại sao lại chọn thuật toán LBPH thay vì các mô hình Deep Learning như CNN, ResNet hay FaceNet?
    Lý do: Raspberry Pi 3 có phần cứng giới hạn (1GB RAM, không có GPU chuyên dụng). Các mạng CNN sâu đòi hỏi tài nguyên tính toán lớn gây sụt giảm FPS và nhiệt độ bo mạch tăng cao. LBPH có độ phức tạp thuật toán thấp, thời gian huấn luyện chỉ mất vài giây, chiếm dụng dưới 25% CPU và đáp ứng độ chính xác trên 93% trong điều kiện gia đình.

  3. Nếu có người dùng mới, hệ thống cập nhật khuôn mặt như thế nào?
    Quy trình: Quản trị viên truy cập Web Dashboard ReactJS, kích hoạt chức năng thêm người dùng. Hệ thống sẽ chụp 50 ảnh mẫu, gọi Flask API thực hiện recognizer.train(), tạo file trọng số mới và nạp lại vào bộ nhớ của ứng dụng nhúng mà không cần khởi động lại Raspberry Pi.

  4. Nguồn điện của khóa điện 12V và bo mạch Raspberry Pi được thiết kế ra sao để tránh sụt áp?
    Giải pháp: Hệ thống sử dụng 2 nguồn độc lập: nguồn 5V-2.5A cho bo mạch Raspberry Pi và nguồn 12V-2A cho khóa Solenoid. Tiếp điểm giữa hai hệ thống được cách ly quang học hoàn toàn qua Relay Optocoupler để triệt tiêu hiện tượng xung điện ngược làm treo vi xử lý.

  5. Chi phí tự xây dựng hệ thống này so với mua khóa thông minh trên thị trường chênh lệch thế nào?
    So sánh: Tổng chi phí linh kiện tự lắp ráp chỉ khoảng 2.100.000 VND (~$90 USD), trong khi các dòng khóa thông minh nhận diện khuôn mặt 3D thương mại từ Yale, Kaadas hay Philips thường có giá dao động từ 8.000.000 đến 18.000.000 VND.


Kết luận

Đồ án tốt nghiệp "Hệ thống khóa cửa thông minh sử dụng nhận diện khuôn mặt chạy trên máy tính nhúng" của tác giả Lê Hoàng Long đã chứng minh tính khả thi xuất sắc trong việc hiện thực hóa bài toán thị giác máy tính trên phần cứng nhúng chi phí thấp. Bằng việc kết hợp hài hòa giữa cơ chế bảo mật 3 lớp (RFID + PIN + LBPH Face Recognition), kiến trúc Web quản trị hiện đại (ReactJS, Flask, Firebase) và khả năng vận hành độc lập tại biên, hệ thống không chỉ đáp ứng trọn vẹn các yêu cầu khắt khe về mặt học thuật mà còn mở ra tiềm năng thương mại hóa mạnh mẽ trong phân khúc nhà thông minh và kiểm soát an ninh doanh nghiệp.