Khóa học được thiết kế theo lộ trình thực chiến: mỗi buổi học đều đi liền với một miniproject cụ thể, tận dụng tư duy OOP và Socket đã có.
Buổi 1: Thế giới điểm ảnh (Pixel) & Luồng Video
Khái niệm ảnh số: Ma trận 2D/3D, hệ màu RGB và BGR, kích thước, kênh màu (channels).
Đọc ảnh, lưu ảnh, mở luồng Webcam bằng cv2.VideoCapture().
Dự án nhỏ: Tạo ứng dụng chụp ảnh bằng phím bấm và lưu vào thư mục có đóng dấu thời gian.
Buổi 2: Biến đổi không gian màu & Lọc màu (Color Filtering)
Chuyển đổi BGR sang HSV (vì sao HSV tốt hơn RGB khi lọc màu).
Tạo thanh trượt (Trackbar) để dò dải màu cv2.inRange().
Dự án nhỏ: Chương trình phát hiện và vẽ vòng tròn theo dõi một quả bóng/nắp chai màu cam/xanh.
Buổi 3: Xử lý hình thái học & Biên cạnh (Contours & Edges)
Bộ lọc Gaussian Blur, phát hiện biên Canny.
Tìm đường bao vật thể (cv2.findContours), tính chu vi, diện tích và tọa độ tâm bounding box.
Dự án nhỏ: Đếm số lượng đồng xu hoặc hình học đặt trên mặt bàn trắng.
Buổi 4: Đóng gói thành lớp đối tượng (Ứng dụng OOP)
Xây dựng Class VideoProcessor quản lý luồng camera và Class ColorTracker kế thừa từ bộ xử lý ảnh.
Tối ưu hóa FPS và xử lý ngoại lệ (Exception Handling).
Buổi 5: Bắt dấu vân tay & Bàn tay (Hand Tracking)
Cài đặt và sử dụng mediapipe.solutions.hands.
Giải mã 21 điểm mốc (landmarks) trên bàn tay, tọa độ $(x, y, z)$.
Dự án nhỏ: Chương trình nhận diện và đếm số ngón tay đang giơ lên (Finger Counter).
Buổi 6: Điều khiển cử chỉ (Gesture Control)
Tính khoảng cách Euclidean giữa hai điểm (ví dụ: đầu ngón trỏ và ngón cái).
Phát hiện cử chỉ "Búng tay", "Chạm ngón", "Nắm đấm".
Dự án nhỏ: "Bảng vẽ ma thuật trên không" (Virtual Painter) – giơ ngón trỏ để vẽ nét, giơ 2 ngón để chọn màu/xóa.
Buổi 7: Bắt khuôn mặt & Nhận diện hướng nhìn (Face Mesh & Pose)
Nhận diện 468 điểm trên khuôn mặt (FaceMesh).
Phát hiện nháy mắt (Eye Blink Detection) bằng tỷ lệ khung mắt (EAR).
Dự án nhỏ: Ứng dụng cảnh báo buồn ngủ (Sleepiness Alert) – phát âm thanh nếu nhắm mắt quá 2 giây.
Buổi 8: Mini-Game tương tác người - máy
Xây dựng game đơn giản (như Flappy Bird hoặc Chém hoa quả) điều khiển bằng cử chỉ tay hoặc nghiêng đầu.
Buổi 9: Stream video thời gian thực qua Socket
Nén khung hình OpenCV sang JPEG bằng cv2.imencode.
Dùng giao thức UDP/TCP Socket để truyền luồng video từ Client (máy có camera) sang Server (máy nhận hiển thị).
Buổi 10: Xây dựng hệ thống Client - Edge Controller
Máy tính xử lý CV chỉ gửi gói tin JSON chứa tọa độ {"hand_x": 120, "hand_y": 340, "pinch": True} qua Socket.
Bên nhận đọc gói tin và điều khiển chuột máy tính (pyautogui) hoặc gửi ra bo mạch Arduino/ESP32.
Buổi 11: Làm quen với Mô hình Nhận diện đồ vật (YOLOv8)
Sử dụng thư viện ultralytics chạy mô hình YOLOv8n nhẹ (Nano).
Phân loại đồ vật: người, cốc nước, điện thoại, sách, v.v.
Buổi 12: Đồ án tốt nghiệp (Capstone Project)
Tùy chọn 1: Hệ thống nhà thông minh mini (Bật/tắt đèn hoặc ứng dụng bằng cử chỉ tay qua Socket).
Tùy chọn 2: Camera an ninh thông minh (Nhận diện có người bước vào khung hình $\rightarrow$ tự động chụp ảnh gửi tin nhắn cảnh báo).