AI-Powered Home Assistant Nhận Diện Shipper Thông Minh với LLM

AI-Powered Home Assistant Nhận Diện Shipper Thông Minh với LLM

Camera AI truyền thống như Frigate chỉ nhận diện được "person" nhưng không hiểu được ngữ cảnh nghề nghiệp. Giải pháp kết hợp LLM với Home Assistant giúp nhận diện dấu hiệu nghề nghiệp của shipper và tự động đếm số lượng.

Vấn đề: Camera AI truyền thống như Frigate chỉ nhận diện được "person" nhưng không hiểu được ngữ cảnh nghề nghiệp - không biết đó là shipper, khách hay người đi đường.

Giải pháp: Kết hợp Large Language Model (LLM) với Home Assistant để phân tích hình ảnh sâu hơn, nhận diện dấu hiệu nghề nghiệp của shipper và tự động đếm số lượng.

Quy trình hoạt động

1. Camera Detection
   ↓
2. Person Detected?
   ├─ Yes → AI Analysis
   │          ↓
   │       3. Gemini Flash
   │          ↓
   │       4. Count Shipper
   │          ↓
   │       5. > 0 Shipper?
   │          ├─ Yes → Update Counter
   │          │          ↓
   │          │       6. Auto Reset (5min)
   │          └─ No → Reset (5min)
   └─ No → End

Triển khai code

1. Trigger & Điều kiện

alias: Nhận diện human shipper trước cổng
description: ""
triggers:
  - topic: frigate/events
    trigger: mqtt
conditions:
  - condition: template
    value_template: |
      {{ trigger.payload_json['after']['label'] == 'person' }}

Chỉ kích hoạt khi Frigate phát hiện có người - bước lọc ban đầu để tránh spam LLM.

2. Tích hợp LLM

actions:
  - action: ai_task.generate_data
    response_variable: shipper_count
    data:
      instructions: >-
        You are an image analysis assistant.

        Task: Đếm số shipper (người giao hàng) đang đứng trước cổng trong hình.

        Rules: - Chỉ dựa vào dấu hiệu nhận diện nghề nghiệp: đồng phục giao
        hàng, mũ bảo hiểm có logo, áo khoác hãng vận chuyển, túi giao hàng,
        thùng hàng, xe máy giao hàng, hành vi giao nhận. - Không nhận diện danh
        tính cá nhân. - Chỉ đếm người có dấu hiệu rõ ràng là shipper. - Bỏ qua
        người đi đường hoặc người không có dấu hiệu shipper. - Nếu cổng không rõ
        hoặc góc máy không thấy cổng, chỉ đếm shipper trong khu vực trước
        camera. - Trả về đúng một dòng tiếng Việt theo format: "shipper_count:
        <number>" Output: Chỉ một dòng duy nhất, không xuống dòng khác.
      entity_id: ai_task.gemini_flash
      attachments:
        media_content_id: media-source://camera/camera.gate_camera
        media_content_type: application/vnd.apple.mpegurl
        metadata:
          title: Gate Camera
          thumbnail: /api/camera_proxy/camera.gate_camera
          media_class: video
          children_media_class: null
          navigateIds:
            - {}
            - media_content_type: app
              media_content_id: media-source://camera
      task_name: Camera AI

Điểm chính:
- Prompt Engineering: Instructions chi tiết về dấu hiệu nhận diện shipper
- Bảo mật riêng tư: Yêu cầu LLM không nhận diện danh tính cá nhân
- Output có cấu trúc: Format chuẩn "shipper_count:" để dễ parse
- Media Attachment: Gửi trực tiếp stream từ camera

3. Xử lý dữ liệu & Quản lý trạng thái

  - if:
      - condition: template
        value_template: >-
          {{ (shipper_count['data'] | regex_findall_index('([0-9]+)', 0) |
          int(0)) > 0 }}
    then:
      - action: counter.set_value
        data:
          value: >-
            {{ shipper_count['data'] | regex_findall_index('([0-9]+)', 0) |
            int(0) }}
        target:
          entity_id:
            - counter.shipper_count
      - delay:
          minutes: 5
      - action: counter.reset
        data: {}
        target:
          entity_id:
            - counter.shipper_count
mode: single
  • Regex Parsing: Extract số từ LLM response
  • Conditional Logic: Chỉ update khi có shipper (> 0)
  • Auto Cleanup: Reset sau 5 phút

Các trường hợp sử dụng nâng cao

Hỗ trợ đa ngôn ngữ

instructions: >-
  Task: Count delivery persons at gate.
  Output format: "shipper_count: <number>"
  Language: English

Tích hợp thông báo

      - action: notify.mobile_app
        data:
          title: "🛵 Phát hiện shipper"
          message: >-
            {{ shipper_count['data'] | regex_findall_index('([0-9]+)', 0) }}
            shipper(s) tại cổng

Theo dõi lịch sử

      - action: recorder.log
        data:
          message: >-
            Phát hiện shipper: {{ shipper_count['data'] }}
          level: info

Các yếu tố cần cân nhắc về hiệu suất

Tối ưu chi phí

  • Sử dụng Gemini Flash thay vì Pro cho real-time
  • Implement rate limiting để tránh spam LLM calls
  • Cache results cho similar frames

Quản lý độ trễ

  • Pre-process với local AI trước khi gửi LLM
  • Use streaming responses cho faster feedback
  • Implement timeout mechanisms

Bảo mật & riêng tư

  1. Xử lý local: Mọi hình ảnh được xử lý local trước khi gửi LLM
  2. Tối thiểu dữ liệu: Chỉ gửi frames có person detection
  3. Ẩn danh: LLM được instructed không nhận diện danh tính
  4. Chính sách lưu trữ: Auto-delete media sau processing

Gỡ lỗi

Format response LLM

# Test template
{{ shipper_count['data'] }}
# Should return: "shipper_count: 2"

Tích hợp camera

# Verify camera stream
media_content_id: media-source://camera/camera.gate_camera

Regex extraction

# Debug regex
{{ shipper_count['data'] | regex_findall_index('([0-9]+)', 0) }}

Các tính năng nâng cao trong tương lai

  1. Nhận diện đa đối tượng: Mở rộng nhận diện postman, delivery truck...
  2. Phân tích hành vi: Phân tích hành vi (đang chờ, giao hàng, quay đi...)
  3. Tích hợp smart lock: Tự động mở cổng khi xác nhận shipper
  4. Thông báo giọng nói: Thông báo bằng giọng nói

Kết luận

Kết hợp LLM với Home Assistant biến ngôi nhà thông minh từ "reactive" sang "proactive" - không chỉ phản ứng mà còn hiểu và dự đoán nhu cầu. Từ việc đơn giản là đếm shipper đến các ứng dụng phức tạp như phân tích hành vi, LLM mang lại "trí tuệ thực sự" cho hệ thống automation.


Bạn đã triển khai các automation tương tự powered by AI chưa? Chia sẻ kinh nghiệm của bạn!

Bạn đã đăng ký thành công vào Geek Playground
Tuyệt vời! Tiếp theo, hoàn tất thanh toán để có quyền truy cập đầy đủ vào Geek Playground
Chào mừng trở lại! Bạn đã đăng nhập thành công.
Thành công! Tài khoản của bạn đã được kích hoạt đầy đủ, bạn hiện có quyền truy cập vào tất cả nội dung.
Thành công! Thông tin thanh toán của bạn đã được cập nhật.
Cập nhật thông tin thanh toán không thành công.