Article:
Dùng webcam làm camera chống trộm
9516
ngocdaothanh.myopenid.com 172Over 3 years ago |
Webcam bây giờ rẻ bèo, 10 người có lẽ 8 9 người đã có webcam. Nếu khéo léo tận dụng được điều này vào ứng dụng xử lí ảnh, ta có thể tạo được thị trường.
Bài viết này bàn cách viết chương trình có tính năng sau:
- Dùng flash làm client để thu và xử lí video từ webcam. Flash có nhiều ưu điểm, lớn nhất là chỉ cần mở trình duyệt là dùng được ngay, không phải cài đặt.
- Khi phát hiện hình ảnh chuyển động, client sẽ gửi ảnh đến server trung gian. Server sẽ gửi ảnh vào email của người dùng.
Server viết bằng Rails. Dữ liệu truyền qua lại giữa client-server có format do ta tự định nghĩa. Phần bóc tách (parse) dữ liệu sử dụng những điều trình bày trong bài viết Tự chỉ định và xử lí MIME trong Rails.
Client
Để tạo client, có thể dùng Adobe Flash mất tiền hoặc Flex miễn phí. Việc cài đặt và sử dụng chúng nằm ngoài khuôn khổ bài viết ngắn này.
Thu và hiển thị ảnh từ webcam
Xin xem tài liệu này, nó chỉ dẫn rất căn cơ về cách dùng webcam.
Phát hiện ảnh chuyển động
Ta dùng thuật toán đơn giản sau:
- Lấy dữ liệu bitmap từ camera theo frame (webcam thường 15frame/s). Vì mỗi điểm ảnh có 3 kênh RGB kiểu vector, nên để tính toán số học, cần chuyển thành kiểu vô hướng 1 kênh. Tóm lại cần chuyển ảnh màu thành ảnh grayscale (<- có thế thôi mà dẫn cả vector ra, nhiều chuyện ghê
). - Lấy giá trị của từng điểm ảnh của frame này trừ đi giá trị của từng điểm ảnh của frame trước đó, rồi lấy giá trị tuyệt đối của hiệu.
- Cộng tất cả các giá trị tuyệt đối lại, nếu lớn hơn ngưỡng nào đó, thì phán là có chuyển động (trộm loay hoay trước laptop của ta chẳng hạn
).
Ảnh webcam thường có kích thước 320x240 (= 76800) hoặc 640x480 (= 307200), số điểm ảnh khá lớn, thời gian tính toán lâu. Có thể cải tiến như sau:
- Trộm nhanh tay lắm thì cũng mất chừng vài giây, nên cứ sau vài giây lặp lại quá trình tính toán trên cũng vẫn an toàn.
- Thay tính trên toàn bộ tất cả điểm ảnh của 1 frame, có thể nhảy cóc 5 điểm ảnh chẳng hạn.
- Công thức phổ biến để chuyển ảnh màu thành grayscale là: Y = 0.3R + 0.59G + 0.11B. Tuy nhiên, vì ảnh grayscale này không được hiển thị, quá trình tính toán chỉ là trung gian, nên để tăng tốc độ xử lí, ta dùng công thức: Y = 30R + 59G + 11B. CPU thực hiện phép cộng nhanh hơn phép nhân, phép nhân số nguyên nhanh hơn nhân số thực.
Server
Sau khi chộp được ảnh tên trộm, ta có nhu cầu gửi ảnh vào email chứ không lưu xuống đĩa cứng, phòng trường hợp tên trộm cuỗm luôn cả giàn máy hoặc laptop thì toi công.
Để gửi ảnh từ flash vào email, ta cần viết thêm server trung gian.
[còn tiếp]
172
over 3 years ago
Updated over 3 years ago
over 3 years ago
Updated over 3 years ago
Updated over 3 years ago
over 3 years ago