Thông báo

Collapse
No announcement yet.

Xây dựng hệ thống cảnh báo thâm nhập bằng webcam và PIR

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xây dựng hệ thống cảnh báo thâm nhập bằng webcam và PIR

    Sau loại bài Điều khiển thiết bị nhà bằng máy tính của bác nguyendinhvan mình xin mở chủ đề này để các bạn nào quan tâm cùng tham gia thảo luận và xây dựng. Mục tiêu của đề tài này là xây dựng chương trình cho phép hiện sự thâm nhập (trộm?) bằng webcam hoặc cảm biến PIR từ đó có những hành động xử lý (bật còi báo động? gọi điện thoại hoặc nhắn tin cho chủ nhà, xịt bột tiêu cay vào mặt tên trộm, shock điện và những ý tưởng khác của bạn).
    - Về nguyên tắc phát hiện chuyển động bằng webcam (camera) là so sánh những thay đổi pixel của các hình liên tiếp được capture. Cũng có thể xây dựng thêm một thuật toán đề nhận dạng đối tượng (phân biệt là người hay động vật (human detection), phân biệt là bạn hay thù (face detection)). Nhược điểm của phương pháp này là phụ thuộc vào môi trường ánh sáng. Độ chính xác phụ thuộc vào chất lượng ảnh từ webcam và thuật toán của chương trình. Ví dụ: khi trời tối đen thì để chương trình chạy được phải dùng camera hồng ngoại mới nhận được ảnh. Trời đang sáng bỗng tối sầm lại hoặc một chiếc lá rơi nếu chương trình xử lý không tốt thì sẽ phát báo động giả.
    - Còn về phương pháp dùng cảm biến PIR có lợi thế là không phụ thuộc vào môi trường. Một cảm biến tốt sẽ phát hiện được thân nhiệt của cơ thể sống vào loại ra những nhiễu do ánh sáng, nhiệt độ. Mình đã thử với cái cảm biến của mình bằng cách thắp một ngọn nến phía trước nó, nó sẽ không detect nhưng khi giơ bàn tay qua thì nó phát hiện ra liền hehe he.

    Nào chúng ta cùng thảo luận nhé...
    Last edited by bxngoc; 12-10-2006, 11:20.
    “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

  • #2
    Em có vài ý kiến về PIR:
    - PIR chỉ hoạt động tốt ở nhiệt độ môi trường nhỏ hơn đáng kể so với nhiệt độ thân nhiệt (37 độ C), vì thế nó thường chỉ ứng dụng vào ban đêm và những nơi có khí hậu ôn đới, như châu Âu, còn ở châu miền nhiệt đới như nước ta, em e phải bật điều hòa suốt ngày mất.

    - Một điều nữa, bác lắp xong hệ thống dùng PIR, em chỉ cần trùm cái chăn bông là vô hiệu hóa hệ thống của bác ngay. Vì thế, em thấy ứng dụng khả thi nhất của PIR là làm những đèn cầu thang, toilet tự động bật đèn vào ban đêm khi chiều vừa uống bia xong mà chưa kịp xả hết.

    Nguyên văn bởi bxngoc Xem bài viết
    Còn về phương pháp dùng cảm biến PIR có lợi thế là không phụ thuộc vào môi trường. Một cảm biến tốt sẽ phát hiện được thân nhiệt của cơ thể sống vào loại ra những nhiễu do ánh sáng, nhiệt độ. Mình đã thử với cái cảm biến của mình bằng cách thắp một ngọn nến phía trước nó, nó sẽ không detect nhưng khi giơ bàn tay qua thì nó phát hiện ra liền hehe he.
    Ngọn nến có nhiệt độ cháy vài trăm độ, nó cao hơn nhiều so với kính lọc bằng sillic của PIR (7-14um ~ chưa tính ra nhưng nó khoảng vài chục độ C)

    ), vì vậy nó ko vào được bên trong cảm biến. Bác thử mang ra ngoài nắng chưa? Em chưa thử nhưng nghĩ thì thấy ko được, bác thử OK thì bảo em với nhé, em cũng đang muốn biết có được ko.
    Last edited by Gorp; 12-10-2006, 11:40.

    Comment


    • #3
      Trước tiên mình sẽ bắt đầu bằng phương pháp sử dụng webcam. Mình sử dụng thư viện của tác giả Rodney cho project robot của ông ta. Lý do là nó đáp ứng được các như cầu của mình và là open-source. Bạn có thể download source về và compile thành DLL và sử dụng trong VB, VC, Delphi và .NET. Nói nhiều quá thư viện nó đây http://www.fuzzgun.btinternet.co.uk/...components.htm.
      Các thư viện ở link trên hỗ trợ các chức năng sau:
      - Motion detection (phát hiện chuyển động)
      - Object/Face Detection (nhận dạng đối tượng/khuôn mặt)
      - Emotion detection (nhận dạng cảm xúc) sử dụng OpenCV của Intel
      Thế là đã đầy đủ đồ chơi cho một hệ thống nhận dạng, bạn chỉ cần một PC cấu hình tương đối, Visual Studio 98 và một webcam để tiến hành.
      Trước tiên ta bắt đầu với phần motion detection bằng VB6 cho đơn giản. Bạn download thư viện motionDLL về. Giải nén ra ta sẽ thấy source code của thư viện viết bằng VC6. Nếu thích thì bạn có thể dùng VC mở project motionsegment.dsw ra để xem thuật toán của thư viện và biên dịch lại. Còn không thì có thể sử dụng ngay thư viện đã biên dịch sẵn motionsegment.dll trong thư mục Release. Thư viện này chứa các hàm API ta có thể gọi nó trong VB6 hoặc Delphi. Để cho chương trình chúng ta viết tìm thấy thư viện thì bạn nên chép nó vào cùng thư mục chương (chúng ta sẽ viết) hoặc vào C:\winnt\system32 (C:\Windows\system32). Tôi chép nó vào trong C:\winnt\system32.
      Bạn cũng sẽ tìm thấy 2 file CapStill.dll và FSFWrap.dll trong 2 thư mục VBgrabMono và VBgrabStereo. Đây là 2 thư viện wrapper cho phép gọi các hàm capture video từ webcam bằng DirectX. Chúng ta đã có vài bài tutorial về capture video trên forum rùi nên ta không cần bàn thêm. Chỉ cần chép 2 file đó vào một thư mục như C:\components rùi đăng ký chúng.
      C:\regsvr32 C:\components\CapStill.dll
      C:\regsvr32 C:\components\FSFWrap.dll

      Bây giờ chúng ta dùng VB để mở project prjVBgrab.vbp trong thư mục VBgrabMono lên, mở module basWinAPI để xem khai báo các hàm trong thư viện motionDLL. Ta sẽ thấy các hàm được khai báo như sau:
      Declare Sub RCmseg_update Lib "c:\develop\motionsegment\release\motionsegment.DL L" (bmp() As Byte, ByVal width As Long, ByVal height As Long)
      ....
      ....
      Sửa thư mục c:\develop\motionsegment\release\ thành thư mục chúng ta đã chép file motionsegment.DLL vào. Nếu bạn chép file này vào system32 thì bỏ luôn đường dẫn mà chỉ để lại tên file
      Declare Sub RCmseg_update Lib "motionsegment.DLL" (bmp() As Byte, ByVal width As Long, ByVal height As Long)
      Chức năng của các hàm được mô tả như sau:
      Sub RCmseg_update Lib "motionsegment.DLL" (bmp() As Byte, ByVal width As Long, ByVal height As Long)
      Phân mảnh (segment) bitmap (bmp()) với chiều rộng width, chiều cao height để chuẩn bị cho detect motion.

      Function RCmseg_update_stereo Lib "motionsegment.DLL" (left_bmp() As Byte, right_bmp() As Byte, ByVal width As Long, ByVal height As Long) As Long
      Chức năng giống hàm trên như cần 2 bitmap left_bmp() và right_bmp() để xác định khoảng cách (distance) đã chuyển động của đối tượng.

      Function RCmseg_getPixel Lib "motionsegment.DLL" (ByVal x As Long, ByVal y As Long, ByVal col As Long) As Byte
      Trả về giá trị (color) của một pixel trong bitmap đã được phân mảnh (segmented)

      Function RCmseg_getAverageFlow_x Lib "motionsegment.DLL" () As Single
      Trả về optical flow (dịch là chuyển động quang học) theo hướng x của bitmap

      Function RCmseg_getAverageFlow_y Lib "motionsegment.DLL" () As Single
      Trả về optical flow (dịch là chuyển động quang học) theo hướng y của bitmap

      Function RCmseg_getAspectRatio Lib "motionsegment.DLL" () As Single
      Trả về tỉ lệ (height:width) cho hình bao của chuyển động

      Sub RCmseg_getBoundingBox Lib "motionsegment.DLL" (ByRef tx As Long, ByRef ty As Long, ByRef bx As Long, ByRef by As Long)
      Trả về hình bao của chuyển động. (Tức là trong bitmap phần nào chuyển động sẽ được xác định bởi hình chữ nhật bao quanh).

      Function RCmseg_getFlowHistory Lib "motionsegment.DLL" (ByVal t As Long, ByVal index As Long) As Long
      Trả về một giá trị từ lịch sử chuyển động quang học (optical flow history) (motion trajectory: quỹ đạo chuyển động). Nó dùng để nhận dạng hành động theo thời gian. "t" số frame (khung hình) từ trước đến hiện tại (từ 0 .. 99), "index" là giá trị ta muốn hàm trả về, đó là:
      0 giá trị trung bình của chuyển động theo hướng x của toàn hình ảnh
      1 giá trị trung bình của chuyển động theo hướng y của toàn hình ảnh
      2 tọa độ x trái trên (top/left) của hình bao chuyển động
      3 tọa độ y trái trên (top/left) của hình bao chuyển động
      4 tọa độ x phải dưới (bottom/right) của hình bao chuyển động
      5 tọa độ y phải dưới (bottom/right) của hình bao chuyển động
      6 đo lường sự chênh lệch lập thể (nếu sử dụng hàm RCmseg_update_stereo)

      Function RCmseg_faceProbability Lib "motionsegment.DLL" () As Single
      Trả về xác suất khuôn mặt xuất hiện trong bitmap (từ 0.0 - 1.0) Cái này thú vị nhỉ có thể xác định là mặt người (nếu không là mặt chó/mèo) heheehe. Chú ý là xác suất này có giá trị tương đối không chính xác tuyệt đối.

      Function RCmseg_personProbability Lib "motionsegment.DLL" () As Single
      Trả về chỉ số là người xuất hiện trong bitmap (từ 0.0 - 1.0). Hàm này chỉ khảo sát một hình bao cao và mỏng chỉ ra một người đứng thẳng. Giá trị cũng mang tính tương đối.

      Function RCmseg_activityLevel Lib "motionsegment.DLL" () As Single
      Trả về một chỉ số mức hoạt động (level of activity (motion)) bên trong hình ảnh. Có giá trị từ 0.0-1.0. Bạn có thể chọn giá trị này là bao nhiêu thì là có chuyển động để tránh báo động giả (ví dụ trong chương trình tôi xét nếu giá trị này > 0.5 và lặp lại 5 lần thì thì bật alarm).
      Last edited by bxngoc; 16-10-2006, 11:47.
      “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

      Comment


      • #4
        Hu hu bác oi link die roi có ai biết link mới down ở đâu giúp em nhé thank nhiều em đang muốn tìm hiểu các gọi hình ảnh từ webcam ra trong Visual Basic thấy trong đấy nó có gọi Webcam của yahoomesenger nhưng không biết dùng hix

        Comment


        • #5
          down load nhung link die rồi, ai có thì up lai cho mọi nguoi cùng tham khảo

          Comment


          • #6
            Tôi đang có ý tưởng dùng chương trình chống trộm sử dụng camera để áp dụng vào hệ thống tiết kiệm điện của trường học!
            VD
            Trước tiên dùng PLC logo lập trình thời gian thực cho hệ thồng điện cứ bật vào lúc 6h30 tắt vào lúc 11h!
            Nhưng nếu phòng nào ko có người thì camera đưa tín hiệu về thì sao 15' điện sẽ tự tắt
            Vì phần mềm chống trộm nên lúc đầu nó sẽ chụp 1 bức ảnh và so sánh khi ảnh bị thay đổi thì sẽ đưa tín hiệu ra! Như vậy là ngược hệ thống của tôi! Hệ thống của tôi là có sự thay đổi ảnh thì ko đưa tín hiệu còn ko có sự thay đổi thì sẽ đưa tín hiệu ra!
            Do vậy tôi định làm giao tiếp giữa máy tính và PLC và đảo ngựoc tín hiệu từ PC!
            Các bạn thấy hệ thống đó thế nào có khả thi ko? Xin các bạn cho ý kiến!
            Hiện tại tôi vẫn chưa biết cách nào để giao tiếp giữa máy tính và PLC cả các bạn giúp tôi 1 tay nhé

            Comment


            • #7
              Bác ơi post lại link đi! Bài hay thế nầ mà ko được thử thì phí!

              Comment


              • #8
                Bác nòa nhanh chân copy được cái lập trình Bằng VB cho camera thì post lại cho anh em tham khảo nào! Tôi tìm mãi mà chả thấy!

                Comment


                • #9
                  mấy pro ơi post lại đường link đi cho anh em tham khảo với cái này hay đó
                  Eragon

                  Comment


                  • #10
                    Chán quá có vẻ như phần này bị lãng quên rùi hay sao đấy!

                    Comment


                    • #11
                      Về vấn đề này thì thực chất trước đã có một cậu nhóm tôi làm rồi và làm rất tốt. Core của nó là sử dụng OpenCV để phân tích hình ảnh nhận được từ webcame. Kết quả thực tế có thể nhận diện tương đối được hình dáng vật thể và chuyển động. Hiện tại phần mềm này được phát triển trên Linux tuy nhiên quá trình porting lên Windows cũng không quá phức tạp. Nhóm đã hoàn thành mục tiêu công việc nhưng không phải là về an ninh hay điều khiển thiết bị gia đình. Nếu bạn nào có dự án hoặc muốn đầu tư phát triển một ứng dụng tương tự có thể trực tiếp liên hệ với tôi để nói chuyện. Email: techamaco@yahoo.com.vn
                      http://techpal.vn
                      Chia sẻ công nghệ, cùng thành công

                      Comment


                      • #12
                        Vậy phiền bác post code đó và cách sử dụng cho cả làng xem nhé!
                        Tôi thấy chủ đề nà rất nóng bỏng đó! Mọi người cùng thảo luận

                        Comment


                        • #13
                          camera thế có cần cài driver sẵn vào trong PC không và có thể cho mình biết thư viện của nó được không thanks

                          Comment


                          • #14
                            Camera nếu có driver thì phải cài thôi! Còn có loại thì chỉ cần cằm là nhân được! Nhưng qua USB đó! không cần driver

                            Comment


                            • #15
                              Mấy bác này cao thủ và rắc rối quá ta.Mình sợ nhất là sử lí ảnh từ Webcam.Cái này khó...thành ra bó tay


                              Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                              Tel: 031 518648 Phone: 0904 283 505

                              Comment

                              Về tác giả

                              Collapse

                              bxngoc Nothing to reveal Tìm hiểu thêm về bxngoc

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X