Mục lục:

Chuông cửa có nhận dạng khuôn mặt: 7 bước (có hình ảnh)
Chuông cửa có nhận dạng khuôn mặt: 7 bước (có hình ảnh)

Video: Chuông cửa có nhận dạng khuôn mặt: 7 bước (có hình ảnh)

Video: Chuông cửa có nhận dạng khuôn mặt: 7 bước (có hình ảnh)
Video: Hệ thống chuông cửa ra vào nhận diện khuôn mặt AI Akuvox R29C Phong cách và Mạnh mẽ 2024, Tháng bảy
Anonim
Chuông cửa có nhận dạng khuôn mặt
Chuông cửa có nhận dạng khuôn mặt

Động lực

Gần đây, có một làn sóng trộm cướp ở đất nước tôi, nhắm vào những người cao tuổi tại nhà riêng của họ. Thông thường, quyền tiếp cận được cấp bởi chính những người cư ngụ kể từ khi khách thuyết phục họ rằng họ là người chăm sóc / y tá. Không ngoài lời nói, những câu chuyện này khiến tôi cảm thấy tức giận và buồn bã biết bao. Nhà phải là nơi trú ẩn an toàn đầu tiên của bạn và thậm chí còn hơn thế nữa nếu bạn đã ở trong tình trạng dễ bị tổn thương khi ra ngoài. Với suy nghĩ này, tôi bắt đầu dự án này.

Thông tin chung

Hệ thống chuông cửa chủ yếu được thiết kế cho người già hoặc người bị suy giảm thị lực và hoạt động khá dễ hiểu. Nói tóm lại, công tắc chuông cửa kích hoạt camera để thu được cảnh quay. Tiếp theo, các khuôn mặt trong đoạn phim được phát hiện và khớp với danh sách trắng và danh sách đen. Người ngồi trên xe nhận được phản hồi trực quan rõ ràng nhờ màn hình đèn giao thông rõ ràng. Theo đó, đèn xanh lá cây, vàng hoặc đỏ cho biết (những) người có trong danh sách trắng, hệ thống không xác định hoặc nằm trong danh sách đen tương ứng. Nếu đèn vàng hoặc đỏ được kích hoạt, ảnh sẽ được gửi bởi bot Telegram để thông báo / cảnh báo cho người thân hoặc người chăm sóc.

Mức độ chuyên môn

Dự án được thành lập cho những người đam mê đặc biệt tò mò về việc sử dụng thị giác máy tính và trí tuệ nhân tạo. Hướng dẫn này được viết cho đối tượng người mới bắt đầu, vì vậy đừng lo lắng nếu bạn chưa có kinh nghiệm! Hơn nữa, dự án cũng có thể thú vị đối với các nhà sản xuất có kinh nghiệm vì đường ống được tổ chức theo cách mà bạn có thể mở rộng nó với tầm nhìn máy tính và ý tưởng nhận dạng khuôn mặt của riêng mình mà không gặp nhiều rắc rối.

Bước 1: Vật liệu

Vật liệu
Vật liệu

Danh sách sản phẩm với các yêu cầu tối thiểu:

Sản phẩm Liên kết Bình luận
Raspberry Pi 3b RPi Liên kết hiển thị RPi 4 vì nó có hiệu suất tốt hơn và giá gần như ngang bằng với RPi 3b.
Micro SD Amazon Thẻ micro SD 16 GB hoặc lớn hơn sẽ thực hiện công việc này. Tuy nhiên, thẻ 16 GB trên Amazon hiện có giá tương đương với thẻ 32 GB.
Máy ảnh Raspberry Pi Amazon Camera v1 rẻ hơn, nhưng v2 tốt hơn và sẽ được hỗ trợ lâu hơn.
Cáp uốn FPC 15 chân Amazon Độ dài thực sự phụ thuộc vào hoàn cảnh thực hiện dự án này. Nếu bạn chỉ muốn xây dựng một nguyên mẫu, cáp flex ban đầu sẽ thực hiện công việc.
Nguồn cung cấp 5v micro usb Adafruit Điều này không bao giờ để đáp ứng xuống! Chất lượng tuyệt vời. (Không có trên ảnh)
Các nút arcade với đèn LED tích hợp Amazon Chọn kích thước bạn muốn, nhưng thiết kế CAD dựa trên các nút 60mm
Điện trở Amazon Bạn chỉ cần một vài điện trở 1k và 100 ohm. 1 / 4W thông thường là tốt.
Tụ điện 0,1 uF Amazon Ba tụ điện là cần thiết. (Không có trên ảnh)
Jumper Wires / Ribbon Cable AmazonAmazon Nếu bạn muốn tiết kiệm cho mình một số tiền, bạn cũng có thể sử dụng cáp ribbon ổ đĩa mềm cũ (xem ảnh).
Ống co lại / Băng điện AmazonAmazon

Các công cụ cần thiết:

Dụng cụ Thiết yếu? Bình luận
Hàn sắt đúng
Đồng hồ vạn năng đúng
Thợ thoát y dây đúng Hoặc bạn có thể dùng dao / kéo.
Máy cắt laser Không
máy in 3D Không
Kẹp Không Hữu ích để giữ hộp cùng nhau trong giai đoạn thử nghiệm.

Nhận xét:

Để tăng khả năng tiếp cận của dự án, tôi quyết định phát triển nó bằng cách sử dụng Raspberry Pi 3b. Trong khi nó làm tăng khả năng truy cập, nó làm giảm khả năng của ứng dụng vì RPi không nhanh như vậy. Nếu bạn đang tìm kiếm một máy tính bo mạch đơn nhanh hơn, bạn có thể muốn xem xét NVIDIA Jetson Nano

Bước 2: Đấu dây

Đấu dây
Đấu dây
Đấu dây
Đấu dây
Đấu dây
Đấu dây

Sơ đồ giản đồ là thông tin nhất cho bước này và khá tự giải thích. Trong trường hợp bạn là người mới làm quen với điện tử, bạn có thể sử dụng hình ảnh chú giải. Giá trị của thành phần (nếu áp dụng) được nêu trong giản đồ. Các bức ảnh có thể giúp biết cách tôi xây dựng mạch. Về cơ bản, tôi đã kết nối tất cả các thành phần càng gần nút arcade càng tốt, điều này dẫn đến cái nhìn tổng quan rõ ràng về những gì đang xảy ra.

Nhận xét:

  • Tôi thực sự thích sử dụng đầu nối cáp ruy-băng, vì chúng chắc chắn hơn so với sử dụng dây nhảy đơn lẻ.
  • Như đã đề xuất, tôi đã sử dụng cáp ruy-băng đã được nhặt rác từ một máy tính cũ. Tuy nhiên, điều này hơi phức tạp vì bạn sẽ phải xác nhận cấu hình của cáp theo cách thủ công. Trong dự án này chẳng hạn, tôi phát hiện ra rằng một số lỗ được kết nối với nhau (có thể được sử dụng làm nền cho ứng dụng ban đầu). Vì vậy, tôi đã phải lấy một cáp khác sau đó như bạn có thể thấy trên hình ảnh.

Bước 3: Xây dựng Vỏ bọc

Xây dựng vỏ bọc
Xây dựng vỏ bọc
Xây dựng vỏ bọc
Xây dựng vỏ bọc
Xây dựng vỏ bọc
Xây dựng vỏ bọc
Xây dựng vỏ bọc
Xây dựng vỏ bọc

Vỏ máy ảnh

Nhiều vỏ bọc cho picamera có thể được tải xuống miễn phí từ internet. Vì vậy, tôi chọn không phát minh lại bánh xe và chọn một vỏ bọc cơ bản nhưng đẹp từ internet: thingiverse.com - Vỏ / vỏ máy ảnh Raspberry pi. (Gửi lời cảm ơn đến nhà thiết kế VGer.)

Vỏ đèn giao thông

Đối với vỏ đèn giao thông, tôi đã thiết kế một hộp nhỏ trong Autodesk Fusion 360 (có thể tải xuống miễn phí, xem phần Chú thích) phù hợp với tất cả phần cứng. Trong tệp đính kèm, bạn có thể tìm thấy tệp mà tôi đã gửi cho công ty cắt laser tại địa phương của tôi. Do đó, thiết kế dựa trên độ dày tấm 6mm. Tuy nhiên, nếu bạn muốn điều chỉnh mọi thứ, bạn có thể truy cập tất cả các loại định dạng tệp bằng cách sử dụng liên kết này. Như trong hình, bạn cũng có thể sử dụng hộp các tông nếu không có máy cắt laser. Tôi đã sử dụng hộp các tông trên bức tranh để tạo mẫu và nó hoạt động như một sự quyến rũ.

Việc lắp ráp khá thẳng về phía trước:

  1. Gắn các công tắc Arcade.
  2. Đảm bảo không để dây cho chuông cửa.
  3. Kết nối cáp ruy-băng với RPi.
  4. Vặn RPi vào bảng điều khiển phía dưới.
  5. Kết nối dây chuông cửa với đầu nối dây và cũng gắn nó vào bảng điều khiển phía dưới.
  6. Kết nối Picamera với RPi.
  7. Khoan một lỗ trên một trong các mặt bên cho dây chuyển đổi chuông cửa và dây nguồn RPi.

Đầu nối dây được sử dụng làm điểm lắp cho dây công tắc chuông cửa, để sau này có thể cố định vào chuông cửa có sẵn. Mọi thứ bây giờ đã ở đúng vị trí và có thể được dán lại với nhau. Tuy nhiên, trước tiên bạn có thể muốn hoàn thành các bước tiếp theo, để đảm bảo mọi thứ hoạt động theo đúng cách.

Nhận xét:

Autodesk Fusion 360 có sẵn miễn phí cho những người có sở thích! Nếu bạn muốn lấy bản sao của mình, hãy truy cập liên kết này: autodesk.com - Fusion 360 For Hobbyists. Có một số điều khoản, vì vậy hãy nhớ đọc và áp dụng chúng. Đây là dự án đầu tiên của tôi với Fusion 360 và tôi không có nhiều kinh nghiệm trong việc sử dụng phần mềm CAD, nhưng tôi phải nói rằng tôi thực sự thích phần mềm này và tất cả các công cụ bổ sung đi kèm với Fusion 360

Bước 4: Định cấu hình máy ảnh

Định cấu hình máy ảnh
Định cấu hình máy ảnh
Định cấu hình máy ảnh
Định cấu hình máy ảnh
Định cấu hình máy ảnh
Định cấu hình máy ảnh

Giả sử rằng bạn đã cài đặt Raspbian và nó chạy ở chế độ GUI. Nếu bạn chưa cài đặt Raspbian, bạn có thể theo dõi bài viết này: raspberrypi.org - Cài đặt hình ảnh hệ điều hành. Nếu khởi động Raspbian, bạn sẽ thấy một màn hình nền như trong hình.

Hãy cấu hình máy ảnh trên RPi và xem nó có hoạt động không! Phương pháp được mô tả ở đây là trực tiếp từ raspberrypi.org - Tài liệu. Trước tiên, hãy cập nhật lên các gói mới nhất (bao gồm phần mềm máy ảnh) bằng cách thực hiện các lệnh sau trong cửa sổ đầu cuối (xem hình ảnh):

cập nhật apt sudo

sudo apt nâng cấp đầy đủ

Tiếp theo, máy ảnh phải được bật bằng lệnh sau:

sudo raspi-config

Trong menu, đi tới 5. Tùy chọn Giao diện -> Máy ảnh P1. Chọn bật máy ảnh và khởi động lại RPi bằng cách thực hiện:

khởi động lại

Máy ảnh bây giờ phải được định cấu hình đúng cách. Nó có thể được kiểm tra bằng cách mở một cửa sổ đầu cuối và thực hiện:

raspistill -v -o /home/pi/test.jpg

Hình ảnh được lưu vào: / home / pi.

Bước 5: Thiết lập Docker

Thiết lập Docker
Thiết lập Docker
Thiết lập Docker
Thiết lập Docker
Thiết lập Docker
Thiết lập Docker
Thiết lập Docker
Thiết lập Docker

Để tránh phụ thuộc và lỗi cài đặt, tôi quyết định xây dựng hình ảnh Docker tùy chỉnh cho dự án này (xem wikipedia.org - Docker). Nếu bạn chưa bao giờ sử dụng hoặc nghe nói về Docker, đừng lo lắng, tôi sẽ giải thích từng bước cách sử dụng nó trong dự án này. Trong thực tế, nó rất dễ dàng! Trong trường hợp bạn muốn chạy dự án này trên bản cài đặt cục bộ (thay vì trong vùng chứa Docker), tôi sẽ cung cấp cho bạn một số mẹo. Nhưng chúng tôi rất khuyến khích sử dụng hình ảnh Docker. Sau cùng, tôi xây dựng nó để giúp bạn dễ dàng chạy dự án này!

Docker là gì?

Lưu ý: phần này cung cấp một số thông tin cơ bản về Docker, có thể bỏ qua nếu bạn chỉ muốn chạy mã.

Dự án này là lần đầu tiên tôi sử dụng Docker và nó chỉ đơn giản là tuyệt vời! Có thể bạn đã nghe nói về virtualenv hoặc Anaconda cho Python? Chà, Docker khá giống với nghĩa là bạn có thể dễ dàng quản lý các phiên bản gói và chạy các phiên bản Python khác nhau trên một hệ thống máy chủ bằng cách sử dụng một môi trường khác (hoặc vùng chứa như nó được gọi trong Docker). Tuy nhiên, so với virtualenv và Anaconda, Docker mạnh hơn rất nhiều vì nó không bị giới hạn chỉ chứa các gói Python. Thật vậy, trong vùng chứa Docker, bạn cũng có thể cài đặt và quản lý các gói của hệ điều hành mong muốn. Ví dụ: hãy xem xét một trang web bạn muốn di chuyển chạy khuôn khổ web Python (ví dụ: Django) với cơ sở dữ liệu (ví dụ: MySQL). Nếu không có vùng chứa Docker, bạn sẽ phải cài đặt tất cả các gói trên máy chủ mới, một quá trình rất dễ xảy ra lỗi và lỗi. Mặt khác, khi trang web của bạn đã được xây dựng trong Docker, việc di chuyển về cơ bản dễ dàng như di chuyển tệp / tệp hình ảnh sang máy chủ mới và chạy tệp / tệp đó. Như bạn có thể tưởng tượng, Docker cũng rất hữu ích cho các dự án trên Guiductable;)! Nếu bạn muốn biết thêm về Docker, hãy xem trang web của họ: docker.org - Docker: Enterprise Container Platform. Bây giờ, hãy bắt đầu và chạy với Docker!

Cài đặt Docker

Cài đặt Docker bằng cách thực thi:

curl -sSL https://get.docker.com | NS

Tiếp theo, người dùng được thêm vào nhóm người dùng 'docker', nhóm này cung cấp quyền chạy Docker. Điều này được thực hiện bởi:

sudo usermod -aG docker $ USER

Bây giờ, bạn sẽ có thể chạy Docker. Điều này có thể được xác thực bằng cách chạy hình ảnh hello-world:

docker run hello-world

Cuối cùng, hãy kéo hình ảnh Docker chứa tất cả các phụ thuộc cần thiết để chạy các tập lệnh Python của chuông cửa. Quá trình này có thể mất một lúc vì hình ảnh khá lớn (~ 1,5 GB). Hành hình:

docker kéo erientes / chuông cửa

Lưu ý: Dockerfile có thể được tìm thấy trên kho lưu trữ chuông cửa trên Github. Bây giờ, mọi thứ đã sẵn sàng để chạy các kịch bản chuông cửa, điều này sẽ được thảo luận trong bước tiếp theo.

Cài đặt cục bộ

Một lần nữa, tôi thực sự khuyên bạn nên sử dụng hình ảnh Docker thay vì cài đặt cục bộ. Nhưng để hoàn thành hướng dẫn này, bây giờ tôi sẽ mô tả một số bước tôi đã thực hiện để cài đặt cục bộ.

Để có thể chạy mã, phiên bản python phải> = 3.5 (tôi đã sử dụng python 3.5.3) và các gói sau cần được cài đặt:

  • nhận dạng khuôn mặt
  • picamera
  • numpy
  • Cái gối
  • python-telegram-bot
  • RPi. GPIO

Liên kết này khá hữu ích: Github - Cài đặt dlib và face_recognition trên Raspberry Pi. Tuy nhiên, có một số lưu ý ở đây: 1) Pillow cần ít nhất Python 3.5, sẽ không được cài đặt theo phương pháp này. 2) Ngoài ra, không phải tất cả các gói cần thiết trong dự án chuông cửa sẽ được cài đặt theo phương pháp này. Tuy nhiên, bạn sẽ có thể cài đặt nó bằng cách sử dụng pip3.

Bước 6: Chạy tập lệnh chuông cửa

Chạy tập lệnh chuông cửa
Chạy tập lệnh chuông cửa
Chạy tập lệnh chuông cửa
Chạy tập lệnh chuông cửa
Chạy tập lệnh chuông cửa
Chạy tập lệnh chuông cửa

Nhận các tập lệnh

Các tập lệnh có thể được tải xuống theo cách thủ công từ: github.com - Erientes / doorbell. Hoặc nếu bạn đã cài đặt Git, hãy thực thi:

git clone

Tạo bí danh

Bây giờ, để làm cho cuộc sống của chúng ta dễ dàng hơn một chút, hãy tạo một số bí danh để chạy các tập lệnh. Hành hình:

leafpad ~ /.bashrc

Thêm các dòng sau và lưu tệp:

alias doorbell_run = 'docker run --privileged -v / home / pi / doorbell: / doorbell -w / doorbell -it erientes / doorbell python $ 1'

alias doorbell_login = 'docker run --privileged -v / home / pi / doorbell: / doorbell -w / doorbell -it erientes / doorbell bash'

Tập lệnh thử nghiệm

Để kiểm tra xem mọi thứ đã được cài đặt đúng chưa, hãy mở một thiết bị đầu cuối mới và thực hiện:

ví dụ doorbell_run / 0_test_installation.py

Kết quả sẽ chỉ đơn giản là một thông báo trong cửa sổ đầu cuối cho biết 'Cài đặt chuông cửa đã kết thúc thành công!'. Để kiểm tra xem máy ảnh có thể được truy cập bởi vùng chứa Docker hay không, hãy chạy:

ví dụ về doorbell_run / 1_test_camera.py

Bằng cách chạy 1_test_camera.py một bức ảnh sẽ được chụp và lưu dưới dạng 'test.jpg', bạn có thể tìm thấy ảnh này trong / home / pi / doorbell. Cuối cùng, các trình điều khiển LED có thể được kiểm tra bằng cách thực hiện:

ví dụ doorbell_run / 2_test_voicehat_drivers.py

Khi tập lệnh này đang chạy, đèn LED trong công tắc arcade sẽ phản hồi khi nhấn nút.

Chạy tập lệnh chuông cửa

Để chạy các tập lệnh của Chuông cửa, trước tiên bạn cần phải lấy thông tin đăng nhập của bot Telegram. Cài đặt Telegram trên điện thoại của bạn và truy cập telegram.me - Botfather. Bắt đầu cuộc trò chuyện và nhập:

/ newbot

Điền tên và tên người dùng cho bot. Sau đó, bạn sẽ được cung cấp mã thông báo truy cập. Sao chép giá trị đó vào tệp 'credentials_telegram_template.py' trong / home / pi / doorbell và lưu nó vào một tệp mới có tên là 'credentials_telegram.py'. Cuối cùng, hãy bắt đầu cuộc trò chuyện với bot bạn vừa tạo bằng cách nhấp vào liên kết mà Botfather cung cấp cho bạn.

Cuối cùng, hãy chạy Chuông cửa với Nhận dạng khuôn mặt:

doorbell_run main.py

Nhận xét:

Nếu bạn muốn biết thêm về cách mã hoạt động, hãy xem các nhận xét trong chính các đoạn mã. Nếu bạn có câu hỏi về mã, vui lòng liên hệ với tôi qua Github

Bước 7: Sử dụng chuông cửa

Image
Image
Sử dụng chuông cửa
Sử dụng chuông cửa
Sử dụng chuông cửa
Sử dụng chuông cửa

Hãy chạy tập lệnh chuông cửa bằng cách thực hiện:

doorbell_run main.py Sau khi tải các gói, các tập lệnh sẽ không hoạt động. Về cơ bản có 2 điều có thể xảy ra:

  1. Có người bấm chuông cửa.
  2. Ai đó được thêm vào danh sách trắng.

Ai đó bấm chuông cửa

Trong trường hợp này, script sẽ bắt đầu chụp ảnh cho đến khi nó chụp một bức ảnh có khuôn mặt được phát hiện. Sau khi phát hiện, một số phương pháp từ gói python 'face_recognition' được gọi để tính toán mã hóa 128 của khuôn mặt. Tiếp theo, mã hóa thu được được so sánh với các mã hóa trong whitelist.csv và blacklist.csv. Các kết quả có thể dẫn đến phản ứng sau:

Trong danh sách trắng? Trong danh sách đen? Phản ứng
đúng Không Đèn xanh bật sáng.
đúng đúng Đèn vàng bật sáng. Camera chuông cửa gửi ảnh tới bot Telegram có biểu tượng màu cam. Trạng thái này có thể xảy ra nếu ai đó được thêm vào cả hai danh sách. Ví dụ, khi ai đó được chào đón lúc đầu, nhưng sau đó bị đưa vào danh sách đen.
Không Không Đèn vàng bật sáng. Camera chuông cửa gửi ảnh tới bot Telegram có biểu tượng màu cam.
Không đúng Đèn đỏ bật sáng. Camera chuông cửa gửi ảnh tới bot Telegram có biểu tượng màu đỏ.

Ai đó đã được thêm vào danh sách trắng

Để thêm ai đó vào danh sách trắng, hãy nhấn nút màu vàng của đèn giao thông khi chuông cửa ở trạng thái không hoạt động. Đầu tiên, đèn vàng sẽ bật. Nếu đèn xanh nhấp nháy 3 lần, khuôn mặt của người đó đã được thêm thành công vào danh sách trắng. Nếu đèn xanh không nhấp nháy 3 lần, nỗ lực không thành công. Trong trường hợp đó, hãy nhấn lại nút màu vàng. Bạn có thể dễ dàng xác minh xem nó có thành công hay không bằng cách bấm chuông cửa và kiểm tra xem đèn xanh có được thông qua hay không.

Làm thế nào để thêm ai đó vào danh sách đen?

Rõ ràng, những người có ý đồ xấu sẽ không đi qua để cho chúng tôi chụp ảnh khuôn mặt của họ. Vì vậy, thay vào đó, bạn có thể thêm hình ảnh của những người khét tiếng mà (ví dụ) cảnh sát đã xuất bản vào thư mục img / blacklist. Mỗi giờ, thư mục này được kiểm tra các hình ảnh mới. Nếu có hình ảnh mới, mã hóa khuôn mặt sẽ được tính toán và thêm vào danh sách đen.csv. Sau đó, hình ảnh được đổi tên và chuyển đến thư mục / img / blacklist / được mã hóa.

Nhận xét:

  • Việc vận hành các tập lệnh bằng cách đăng nhập vào RPi cung cấp nhiều cách kiểm soát và thông tin hơn, nhưng việc kiểm soát và thông tin cơ bản có thể đạt được chỉ bằng cách sử dụng màn hình đèn giao thông.
  • Nhận dạng khuôn mặt được thực hiện bằng cách sử dụng gói python 'face_recognition'. Gói này dựa trên Dlib có chứa thuật toán nhận dạng khuôn mặt hiện đại, thực hiện độ chính xác 99,38% trên các khuôn mặt được gắn nhãn trong tiêu chuẩn Wild (nguồn: dlib.net - Nhận dạng khuôn mặt chất lượng cao với Deep Metric Learning).
Cuộc thi công nghệ hỗ trợ
Cuộc thi công nghệ hỗ trợ
Cuộc thi công nghệ hỗ trợ
Cuộc thi công nghệ hỗ trợ

Giải nhất trong cuộc thi công nghệ hỗ trợ

Đề xuất: