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ư
- Xử lý local: Mọi hình ảnh được xử lý local trước khi gửi LLM
- Tối thiểu dữ liệu: Chỉ gửi frames có person detection
- Ẩn danh: LLM được instructed không nhận diện danh tính
- 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
- Nhận diện đa đối tượng: Mở rộng nhận diện postman, delivery truck...
- Phân tích hành vi: Phân tích hành vi (đang chờ, giao hàng, quay đi...)
- Tích hợp smart lock: Tự động mở cổng khi xác nhận shipper
- 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!