1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Thiết kế hệ thống cánh cửa tự động sử dụng công nghệ xử lý ảnh

106 1,1K 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 106
Dung lượng 4,18 MB

Nội dung

Ngày nay, khi xã hội ngày một phát triển mạnh mẽ, nhu cầu về sự an ninh được đặt lên hàng đầu. Đặc biệt đối các vị trí nhạy cảm và quan trọng như các tòa nhà Quốc hội, các ngân hàng, các nhà kho lưu trữ dữ liệu quan trọng, hay các ngôi nhà của chung cư cao cấp. Mà thực tế hiện nay, việc đầu tư vào hệ thống an ninh ở nước ta đang dậm chân tại chỗ. Điển hình ở việc người ta đang sử dụng con người cho mục đích an ninh là chính như việc thuê các bảo vệ viên hay lắp đặt các hệ thống camera thông thường mà một kẻ gian hiểu biết có thể qua mặt được. Để thấy được đây đang là một vấn đề cần được giải quyết tốt hơn. Và một giải pháp được đề cập đến trong đề tài này đó là sử dụng một hệ thống cửa tự động nhận diện khuôn mặt, giọng nói, đồng thời thêm nhiều tính năng bảo mật để có thể lắp đặt đối với những vị trí quan trọng nói trên. Trong khuôn khổ đề tài này, chúng tôi sẽ xây dựng một mô hình hệ thống cửa tự động với cấp độ bảo mật cao. Hệ thống cửa này sử dụng camera để phân biệt, nhận diện các đối tượng được phép mở cửa làm phương thức bảo mật chính. Ngoài ra hệ thống cửa còn chấp nhận các yêu cầu khác như việc nhập khẩu từ bàn phím có sẵn hay nhận dạng giọng nói. Khi yêu cầu mở cửa của người dùng được chấp nhận, một cái chốt khóa sẽ tự động được kéo ra cho phép người dùng có thể mở cửa. Cũng như cái chốt sẽ gài lại khi có yêu cầu từ người dùng. Ngoài ra hệ thống còn có một số tính năng bổ sung khác như truyền hình ảnh từ camera đến các thiết bị khác như điện thoại, máy tính, cũng như chế độ từ chối tiếp khách liên động với chuông cửa. Cái cốt lõi nhất mà đề tài này hướng đến đó là giải pháp tự động hóa mang tính cải tiến và nâng cao bảo mật và ứng dụng thực tế cao. Và mô hình của đề tài mang hơi hướng cánh cửa của các ngôi nhà ở đó là cửa chính của các khu chung cư cao cấp.

LỜI NÓI ĐẦU Ngày giới với bùng nổ nghành công nghệ thông tin, điện tử v.v Đã làm cho đời sống người ngày hoàn thiện Các thiết bị tự động hóa ngày sử dụng vào sản xuất chí vào sống sinh hoạt ngày người Do nhà thông minh, có thiết bị tự động không mơ ước người mà trở thành thực hóa Qua báo chí, phương tiện truyền thông, internet thấy mô hình nhà thông minh, có cánh cửa tự động đời Là sinh viên ngành Điện, thân có mong ước đóng góp phần công sức cho xã hội việc làm có ý nghĩa thực tế, từ kiến thức học sau bốn năm rưỡi theo học trường Đại học Bách Khoa Đà Nẵng Sau thời gian học tập trường, bảo hướng dẫn nhiệt tình thầy cô giáo ngành Điện tự động trường Đại học Bách Khoa Đà Nẵng, em kết thúc khoá học tích luỹ vốn kiến thức định Được đồng ý nhà trường thầy cô giáo khoa em giao đề tài tốt nghiệp nghiên cứu chế tạo: “Hệ thống cửa tự động” Đồ án tốt nghiệp em gồm bốn chương: Chương 1: Tổng quan hệ thống cửa tự động Chương 2: Thiết kế phần cứng hệ thống Chương 3: Lập trình điều khiển hệ thống Chương 4: Thực nghiệm Bằng cố gắng nỗ lực thân đặc biệt giúp đỡ tận tình, chu đáo thầy giáo TS Lê Tiến Dũng, em hoàn thành đồ án thời hạn Do thời gian làm đồ án có hạn trình độ nhiều hạn chế nên tránh khỏi thiếu sót Em mong nhận đóng góp ý kiến thầy cô bạn sinh viên để đồ án hoàn thiện Một lần nữa, em xin chân thành cảm ơn thầy giáo TS Lê Tiến Dũng tạo điều kiện giúp đỡ em hoàn thành đồ án, nhờ thầy mà em biết thêm nhiều phương án hay, nhiều kiến thức hữu ích cho đề tài em chọn, đồng thời em gửi lời cảm ơn thầy cô giáo khoa Điện chuyên ngành Điện tự động trường Đại học Bách Khoa Đà Nẵng tạo điều kiện giúp đỡ em thời gian qua Em xin chân thành cảm ơn! Sinh viên thực MỤC LỤC TỔNG QUAN HỆ THỐNG CỬA TỰ ĐỘNG .10 1.1 Đặt vấn đề 10 1.2 Tổng quan hệ thống cửa tự động 10 1.2.1 Giới thiệu chung hệ thống cửa tự động 10 1.2.2 Các hệ thống cửa tự động thực tế công nghệ sử dụng 11 1.2.2.1 Cửa thông minh sân bay Australia 11 1.2.2.2 Chuông cửa thông minh (Chui smart Doorbell) 12 1.2.2.3 Khóa thông minh nhận dạng khuôn mặt HF6618 13 1.3 Tính năng, giải pháp công nghệ đề tài 14 1.3.1 Tính năng, yêu cầu đề tài 14 1.3.1.1 Thao tác nhanh khóa cửa .14 1.3.1.2 Mở cửa dễ dàng 14 1.3.1.3 Nhiều phương án mở cửa 15 1.3.1.4 Chế độ theo dõi từ xa 15 1.3.1.5 Hoạt động điện 15 1.3.2 Giải pháp, công nghệ đề tài 15 1.3.2.1 Quy trình vận hành 15 1.3.2.2 Phía nhà 15 1.3.2.3 Phía nhà 15 1.3.2.4 Thiết lập hệ thống 16 1.3.3 Sơ đồ khối hệ thống 16 1.3.4 Các thành phần hệ thống 17 THIẾT KẾ PHẦN CỨNG CỦA HỆ THỐNG 19 2.1 Thiết kế phần cứng 20 2.1.1 Khung bao cửa 20 2.1.2 Cửa 20 2.1.3 Tay nắm cửa 21 2.1.4 Chốt khóa cửa 22 2.1.5 Bản lề 22 2.2 Lựa chọn linh kiện, thiết bị .23 2.2.1 Camera 23 2.2.2 Bàn phím 23 2.2.3 Màn hình hiển thị 24 2.2.3.1 Màn hình hiển thị bên 24 2.2.3.2 Màn hình hiển thị bên .25 2.2.4 Động servo 25 2.2.5 Mạch Arduino Mega 2560 26 2.2.6 Raspberry Pi 27 2.3 Kết nối thiết bị hệ thống 28 2.3.1 Sơ đồ kết nối tổng thể .28 2.3.2 Sơ đồ đấu nối dây chi tiết mạch điều khiển 34 2.3.2.1 Kết nối LCD I2C với Arduino Mega 2560 35 2.3.2.2 Nối dây keypad 4x4 Arduino MEGA 2560 35 2.3.2.3 Nối dây RFID RC522 Arduino MEGA2560 36 2.3.2.4 Đấu nối động servo SG90 Arduino MEGA2560 .37 2.3.2.5 Kết nối nút nhấn tới Arduino MEGA2560 37 2.3.2.6 Kết nối hình TFT LCD Raspberry pi 37 2.4 Thiết kế mạch dự phòng 38 LẬP TRÌNH ĐIỀU KHIỂN HỆ THỐNG .41 3.1 Sơ đồ thuật toán 41 3.2 Thuật toán xử lý ảnh 43 3.2.1 Phát khuôn mặt 43 3.2.2 Căn chỉnh khuôn mặt 45 3.2.3 Biểu diễn khuôn mặt 48 3.2.4 Xác minh khuôn mặt 48 3.2.5 Kết thực nghiệm 49 3.2.6 Đọc ảnh từ server 51 3.2.7 Lưu ảnh thành video 53 3.3 Chương trình nhận diện người nói (Speaker Identifier) 54 3.3.1 Giới thiệu nhận diện người nói 54 3.3.2 Thư viện âm MARF 55 3.3.3 Cài đặt thư viện 56 3.3.4 Huấn luyện máy nhận diện .56 3.3.5 Nhận diện người nói 57 3.4 Chương trình vi điều khiển Arduino Mega 2560 58 3.4.1 Nhiệm vụ Arduino Mega 2560 58 3.4.2 Các thư viện sử dụng 59 3.4.2.1 Thư viện SPI 59 3.4.2.2 Thư viện RFID 59 3.4.2.3 Thư viện LCD I2C .59 3.4.2.4 Thư viện Servo 59 3.4.2.5 Thư viện Keypad 60 3.4.2.6 Thư viện password .60 3.4.3 Các chương trình 60 3.5 Kết nối MQTT (Message Queuing Telemetry Transport) 61 3.5.1 Publish subscribe 61 3.5.2 QoS 62 3.5.3 Retain 62 3.5.4 MQTT với ngôn ngữ Python 62 3.6 Truyền ảnh qua Internet 63 THỰC NGHIỆM 64 4.1 Sản phẩm thực tế sau hoàn thành 65 4.2 Thử nghiệm độc lập chế độ bảo mật 69 4.2.1 Chế độ bảo mật bàn phím .69 4.2.2 Chế độ bảo mật giọng nói 69 4.2.3 Chế độ bảo mật hình ảnh 69 4.2.4 Chế độ bảo mật thẻ RFID .70 4.3 Điều khiển toàn hệ thống, kết hợp nhiều chế độ bảo mật 71 4.3.1 Chế độ bảo mật hình ảnh kết hợp với bảo mật giọng nói .71 4.3.2 Chế độ bảo mật nhận dạng hình ảnh kết hợp thẻ RFID 71 4.3.3 Chế độ bảo mật nhận dạng giọng nói kết hợp thẻ RFID 71 4.4 Đánh giá kết thực nghiệm 72 MỤC LỤC HÌNH Hình 1-1: Đưa hộ chiếu visa vào máy .11 Hình 1-2: Nhận dạng hình ảnh để kiểm tra du khách .12 Hình 1-3: Hệ thống Chui smart Doorbell 13 Hình 1-4: Khóa thông minh nhận dạng khuôn mặt HF6618 13 Hình 1-5: Nhận dạng khuôn mặt với khóa HF6618 13 Hình 1-6: Sơ đồ khối hệ thống 17 Hình 1-7: Hình ảnh thiết kế mặt trước thiết bị gắn cửa đề tài 18 Hình 1-8: Hình ảnh thiết kế mặt sau hệ thống cửa đề tài 19 Hình 2-1: Hình dáng kích thước khung bao cửa 20 Hình 2-2: Kích thước cánh cửa hệ thống 21 Hình 2-3: Ảnh khóa cửa tròn (khóa đấm) cấu tạo 22 Hình 2-4: Cơ cấu chốt khóa cửa gắn với động Servo .22 Hình 2-5: Hình ảnh lề 22 Hình 2-6: Webcam COLORVIS 23 Hình 2-7: Bàn phím ma trận x 23 Hình 2-8: Sơ đồ nguyên lý bàn phím ma trận x 24 Hình 2-9: Màn hình LCD 16x2 .24 Hình 2-10: Màn hình hiển thị TFT 25 Hình 2-11: Động servo SG90 25 Hình 2-12: Mạch Arduino Mega 2560 26 Hình 2-13: Mạch Rasberry Pi .27 Hình 2-14: Sơ đồ kết nối tổng thể thiết bị .28 Hình 2-15: Kết nối động Servo với Arduino Mega 2560 28 Hình 2-16: Kết nối hình LCD 16x2 với Arduino Mega 2560 .29 Hình 2-17: Kết nối nút nhấn ( Open, Close, Exit) với Arduino Mega 2560 29 Hình 2-18: Kết nối bàn phím với Arduino Mega 2560 30 Hình 2-19: Kết nối Modul RFID RC522 với Arduino Mega 2560 .30 Hình 2-20: Kết nối hình TFT LCD với Raspberry Pi 31 Hình 2-21: Kết nối Camera với Raspberry Pi .31 Hình 2-22: Kết nối Usb âm với Raspberry Pi .32 Hình 2-23: Kết nối USB Wifi với Raspberry pi 33 Hình 2-24: Sơ đồ đấu nối dây chi tiết hệ thống 34 Hình 2-25: Kết nối chân LCD I2C Arduino Mega 2560 35 Hình 2-26: Kết nối chân KeyPad Arduino Mega 2560 35 Hình 2-27: Kết nối đèn LED Arduino Mega 2560 36 Hình 2-28: Kết nối chân mô đun RFID-RC522 Arduino Mega 2560 36 Hình 2-29: Kết nối chân KeyPad Arduino Mega 2560 37 Hình 2-30: Kết nối chân ba nút nhấn (Open, Close, Exit) Arduino Mega 2560 37 Hình 2-31: Kết nối chân hình TFT LCD Raspberry Pi 38 Hình 2-32: Sơ đồ nguyên lý mạch dự phòng .38 Hình 2-33: Mô đun ổn áp LM2596 .39 Hình 2-34: Cầu chì bảo vệ 2A .40 Hình 2-35: Sơ đồ mạch in 40 Hình 2-36: Hình ảnh mạch thực tế sử dụng 40 Hình 3-1: Sơ đồ thuật toán hệ thống .41 Hình 3-2: Kết đoạn chương trình phát khuôn mặt 44 Hình 3-3: Kết tìm điểm landmarks chỉnh khuôn mặt 45 Hình 3-4: Các điểm landmarks chuẩn sử dụng đề tài 46 Hình 3-5: Các ảnh sử dụng để test .50 Hình 3-6: Lưu đồ thuật toán đọc chuỗi trả xuất thành ảnh .52 Hình 3-7: Mô đun nhận diện giọng nói VR3 55 Hình 3-8: Giới thiệu MARF 55 Hình 3-9: Minh họa chế publish/subscribe giao thức MQTT .61 Hình 4-1: Hình ảnh mặt trước mặt sau cửa sau hoàn thiện .65 Hình 4-2: Hình ảnh chi tiết vị trí thiết bị mặt trước cửa 66 Hình 4-3: Hình ảnh chi tiết vị trí thiết bị mặt sau cửa 67 Hình 4-4: Hình ảnh thiết bị mặt trước cửa (camera, micro, nút nhấn, bàn phím, LCD hiển thị, tay khóa đấm) 68 Hình 4-5: Hình ảnh bo mạch điều khiển trung tâm 68 Hình 4-6: Hình ảnh thiết bị mặt sau cửa 68 Hình 4-7: Những khuôn mặt có liệu hệ thống 70 MỤC LỤC BẢNG Bảng 1-1: Thứ tự ưu tiên chế độ mở cửa 16 Bảng 2-1: Thông số Arduino Mega 2560 26 Bảng 3-1: Kết xác minh khuôn mặt hình 3- 50 Bảng 4-1 : Bảng tổng hợp kết thử nghiệm 71 DANH MỤC TỪ VIẾT TẮT RFID: Radio Frequency Identifier (Xác nhận dùng tần số sóng radio) CAM: Camera Identifier (Chế độ xác nhận sử dụng camera) VOICE: Voice Identifier (Chế độ xác nhận giọng nói, người nói) DSP: Departures SmartGate CSD: Chui smart Doorbell SPI: Serial Peripheral Interface (Chuẩn truyền thông ngoại vi nối tiếp) MQTT: Message Queuing Telemetry Transport LCD: Lyquid Crystal Display TFT: Thin Film Transistor (trong từ TFT LCD) MARF: Modular Audio Recogniton Framework QoS: Quality of Service LAN: Local Area Network QR: Quick Response CTHT: Công tắc hành trình IDE: Integrated Development Environment KẾ HOẠCH THỰC HIỆN TỔNG QUAN HỆ THỐNG CỬA TỰ ĐỘNG Trong chương này, tìm hiểu cửa tự động gì, lại dùng cửa tự động xem qua giải pháp cửa tự động đề tài đề xuất Đặt vấn đề Ngày nay, xã hội ngày phát triển mạnh mẽ, nhu cầu an ninh đặt lên hàng đầu Đặc biệt đối vị trí nhạy cảm quan trọng tòa nhà Quốc hội, ngân hàng, nhà kho lưu trữ liệu quan trọng, hay nhà chung cư cao cấp Mà thực tế nay, việc đầu tư vào hệ thống an ninh nước ta dậm chân chỗ Điển hình việc người ta sử dụng người cho mục đích an ninh việc thuê bảo vệ viên hay lắp đặt hệ thống camera thông thường mà kẻ gian hiểu biết qua mặt Để thấy vấn đề cần giải tốt Và giải pháp đề cập đến đề tài sử dụng hệ thống cửa tự động nhận diện khuôn mặt, giọng nói, đồng thời thêm nhiều tính bảo mật để lắp đặt vị trí quan trọng nói Trong khuôn khổ đề tài này, xây dựng mô hình hệ thống cửa tự động với cấp độ bảo mật cao Hệ thống cửa sử dụng camera để phân biệt, nhận diện đối tượng phép mở cửa làm phương thức bảo mật Ngoài hệ thống cửa chấp nhận yêu cầu khác việc nhập từ bàn phím có sẵn hay nhận dạng giọng nói Khi yêu cầu mở cửa người dùng chấp nhận, chốt khóa tự động kéo cho phép người dùng mở cửa Cũng chốt gài lại có yêu cầu từ người dùng Ngoài hệ thống có số tính bổ sung khác truyền hình ảnh từ camera đến thiết bị khác điện thoại, máy tính, chế độ từ chối tiếp khách liên động với chuông cửa Cái cốt lõi mà đề tài hướng đến giải pháp tự động hóa mang tính cải tiến nâng cao bảo mật ứng dụng thực tế cao Và mô hình đề tài mang hướng cánh cửa nhà cửa khu chung cư cao cấp Tổng quan hệ thống cửa tự động Giới thiệu chung hệ thống cửa tự động Cửa tự động (automatic gate) khái niệm đến hệ thống cửa có khả tự điều kiển điều khiển từ xa Cửa tự động sử dụng rộng rãi với mục đích kiểm soát hoạt động vào của người khu vực bảo vệ định Giải pháp cửa tự động có nhiều cấp độ khác Từ đơn giản tự động mở cửa có người đến đỉnh cao cửa tự động có trang bị hệ thống bảo vệ tân tiến hệ thống nhận diện đối tượng camera, nhận diện đối tượng cảm biến vân tay, giọng nói, chí thời điểm viết đề tài công nghệ bảo mật tuyệt vời mắt SAMSUNG công nghệ quét mống mắt Đây timeout = millis() + 4000; ///4000+4000 = 8s wait for step2 step1_data = data; step1_type = 'F'; step1_ok = true; //done step1 LCD.clear(); LCD.print("Good Face!"); LCD.setCursor(0, 1); LCD.print("Step2: "); if (A_Func) { //if rfid auth enable with voice LCD.print(" > RDID CARD"); } else if (C_Func) { //if face auth enable with voice LCD.print(" > VOICE"); } } } } } else if (ok == 'N') { //fail to authenticate LCD.clear(); LCD.print("Bad Face :( "); LCD.setCursor(0, 1); LCD.print("score: " + data); timeout = millis(); } } else while(Serial.available()>0) Serial.read(); } bool compareArrays(byte a[], byte b[], byte n) { byte ii; for (ii = 0; ii < n; ii++) { if (a[ii] != b[ii]) return 0; } return 1; } 3.1 Chương trình xử lý ảnh (python) Alighface.py # -*- coding: utf-8 -*import cv2 import dlib import numpy as np from numpy.linalg import inv TEMPLATE = np.float32([ (0.0792396913815, 0.339223741112), (0.0829219487236, 0.456955367943), (0.0967927109165, 0.575648016728), (0.122141515615, 0.691921601066), (0.168687863544, 0.800341263616), (0.239789390707, 0.895732504778), (0.325662452515, 0.977068762493), (0.422318282013, 1.04329000149), (0.531777802068, 1.06080371126), (0.641296298053, 1.03981924107), (0.738105872266, 0.972268833998), (0.824444363295, 0.889624082279), (0.894792677532, 0.792494155836), (0.939395486253, 0.681546643421), (0.96111933829, 0.562238253072), (0.970579841181, 0.441758925744), (0.971193274221, 0.322118743967), (0.163846223133, 0.249151738053), (0.21780354657, 0.204255863861), (0.291299351124, 0.192367318323), (0.367460241458, 0.203582210627), (0.4392945113, 0.233135599851), (0.586445962425, 0.228141644834), (0.660152671635, 0.195923841854), (0.737466449096, 0.182360984545), (0.813236546239, 0.192828009114), (0.8707571886, 0.235293377042), (0.51534533827, 0.31863546193), (0.516221448289, 0.396200446263), (0.517118861835, 0.473797687758), (0.51816430343, 0.553157797772), (0.433701156035, 0.604054457668), (0.475501237769, 0.62076344024), (0.520712933176, 0.634268222208), (0.565874114041, 0.618796581487), (0.607054002672, 0.60157671656), (0.252418718401, 0.331052263829), (0.298663015648, 0.302646354002), (0.355749724218, 0.303020650651), (0.403718978315, 0.33867711083), (0.352507175597, 0.349987615384), (0.296791759886, 0.350478978225), (0.631326076346, 0.334136672344), (0.679073381078, 0.29645404267), (0.73597236153, 0.294721285802), (0.782865376271, 0.321305281656), (0.740312274764, 0.341849376713), (0.68499850091, 0.343734332172), (0.353167761422, 0.746189164237), (0.414587777921, 0.719053835073), (0.477677654595, 0.706835892494), (0.522732900812, 0.717092275768), (0.569832064287, 0.705414478982), (0.635195811927, 0.71565572516), (0.69951672331, 0.739419187253), (0.639447159575, 0.805236879972), (0.576410514055, 0.835436670169), (0.525398405766, 0.841706377792), (0.47641545769, 0.837505914975), (0.41379548902, 0.810045601727), (0.380084785646, 0.749979603086), (0.477955996282, 0.74513234612), (0.523389793327, 0.748924302636), (0.571057789237, 0.74332894691), (0.672409137852, 0.744177032192), (0.572539621444, 0.776609286626), (0.5240106503, 0.783370783245), (0.477561227414, 0.778476346951)]) TPL_MIN, TPL_MAX = np.min(TEMPLATE, axis=0), np.max(TEMPLATE, axis=0) MINMAX_TEMPLATE = (TEMPLATE - TPL_MIN) / (TPL_MAX TPL_MIN) class AlignFace: """ Use `dlib's landmark estimation `_ to align faces The alignment preprocess faces for input into a neural network Faces are resized to the same size (such as 96x96) and transformed to make landmarks (such as the eyes and nose) appear at the same location on every image Normalized landmarks: image:: /images/dlib-landmark-mean.png """ #: Landmark indices INNER_EYES_AND_BOTTOM_LIP = [39, 42, 57] OUTER_EYES_AND_NOSE = [36, 45, 33] INNER_EYES_AND_NOSE = [39, 42, 33] def init (self, facePredictor): """ Instantiate an 'AlignDlib' object :param facePredictor: The path to dlib's :type facePredictor: str """ assert facePredictor is not None self.detector = dlib.get_frontal_face_detector() self.predictor = dlib.shape_predictor(facePredictor) def getAllFaceBoundingBoxes(self, rgbImg): """ Find all face bounding boxes in an image :param rgbImg: RGB image to process Shape: (height, width, 3) :type rgbImg: numpy.ndarray :return: All face bounding boxes in an image :rtype: dlib.rectangles """ assert rgbImg is not None try: return self.detector(rgbImg, 1) except Exception as e: print("Warning: {}".format(e)) # In rare cases, exceptions are thrown return [] def getLargestFaceBoundingBox(self, rgbImg, skipMulti=False): """ Find the largest face bounding box in an image :param rgbImg: RGB image to process Shape: (height, width, 3) :type rgbImg: numpy.ndarray :param skipMulti: Skip image if more than one face detected :type skipMulti: bool :return: The largest face bounding box in an image, or None :rtype: dlib.rectangle """ assert rgbImg is not None faces = self.getAllFaceBoundingBoxes(rgbImg) if (not skipMulti and len(faces) > 0) or len(faces) == 1: return max(faces, key=lambda rect: rect.width() * rect.height()) else: return None def findLandmarks(self, rgbImg, bb): """ Find the landmarks of a face :param rgbImg: RGB image to process Shape: (height, width, 3) :type rgbImg: numpy.ndarray :param bb: Bounding box around the face to find landmarks for :type bb: dlib.rectangle :return: Detected landmark locations :rtype: list of (x,y) tuples """ assert rgbImg is not None assert bb is not None points = self.predictor(rgbImg, bb) return list(map(lambda p: (p.x, p.y), points.parts())) def align(self, imgDim, rgbImg, bb=None, landmarks=None, landmarkIndices=INNER_EYES_AND_BOTTOM_LIP, skipMulti=False): r"""align(imgDim, rgbImg, bb=None, landmarkIndices=INNER_EYES_AND_BOTTOM_LIP) landmarks=None, Transform and align a face in an image :param imgDim: The edge length in pixels of the square the image is resized to :type imgDim: int :param rgbImg: RGB image to process Shape: (height, width, 3) :type rgbImg: numpy.ndarray :param bb: Bounding box around the face to align \ Defaults to the largest face :type bb: dlib.rectangle :param landmarks: Detected landmark locations \ Landmarks found on `bb` if not provided :type landmarks: list of (x,y) tuples :param landmarkIndices: The indices to transform to :type landmarkIndices: list of ints :param skipMulti: Skip image if more than one face detected :type skipMulti: bool :return: The aligned RGB image Shape: (imgDim, imgDim, 3) :rtype: numpy.ndarray """ assert imgDim is not None assert rgbImg is not None assert landmarkIndices is not None if bb is None: bb = self.getLargestFaceBoundingBox(rgbImg, skipMulti) if bb is None: return if landmarks is None: landmarks = self.findLandmarks(rgbImg, bb) npLandmarks = np.float32(landmarks) npLandmarkIndices = np.array(landmarkIndices) #Calculate the transformation matrix H: standardFace = imgDim * MINMAX_TEMPLATE[npLandmarkIndices] alignedFace = npLandmarks[npLandmarkIndices] targetPoints = np.float32([standardFace[0][0], standardFace[0][1], standardFace[1][0], standardFace[1][1], standardFace[2][0], standardFace[2][1]]) alignPoints = np.float32([(alignedFace[0][0], alignedFace[0][1], 1, 0, 0, 0), (0, 0, 0, alignedFace[0][0], alignedFace[0][1], 1), (alignedFace[1][0], alignedFace[1][1], 1, 0, 0, 0), (0, 0, 0, alignedFace[1][0], alignedFace[1][1], 1), (alignedFace[2][0], alignedFace[2][1], 1, 0, 0, 0), (0, 0, 0, alignedFace[2][0], alignedFace[2][1], 1),]) alignPoints_inverse = inv(alignPoints) T = np.dot(alignPoints_inverse, targetPoints) H = np.float32([(T[0],T[1],T[2]),(T[3], T[4], T[5])]) #H = cv2.getAffineTransform(npLandmarks[npLandmarkIndices], #imgDim * MINMAX_TEMPLATE[npLandmarkIndices]) #use the transformation matrix H to align the detected face: thumbnail = cv2.warpAffine(rgbImg, H, (imgDim, imgDim)) return thumbnail 3.2 Main.py import datetime import time import argparse import cv2 import os import numpy as np np.set_printoptions(precision=2) import dlib import openface import urllib import AlignFace as AlF import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("192.168.1.123", 1883, 60) #video_capture = cv2.VideoCapture(0) fiLEDir = os.path.dirname(os.path.realpath( file )) modelDir = os.path.join(fiLEDir, ' ', 'models') dlibModelDir = os.path.join(modelDir, 'dlib') openfaceModelDir = os.path.join(modelDir, 'openface') #imagesDir = os.path.join(fiLEDir, ' ', 'images') face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') parser = argparse.ArgumentParser() #parser.add_argument('imgs', type=str, nargs='+', help="Input images.") parser.add_argument(' dlibFacePredictor', type=str, help="Path to dlib's face predictor.", default=os.path.join(dlibModelDir, "shape_predictor_68_face_landmarks.dat")) parser.add_argument(' networkModel', type=str, help="Path to Torch network model.", default=os.path.join(openfaceModelDir, 'nn4.small2.v1.t7')) parser.add_argument(' imgDim', type=int, help="Default image dimension.", default=96) parser.add_argument(' verbose', action='store_true') args = parser.parse_args() start = time.time() align = AlF.AlignFace(args.dlibFacePredictor) net = openface.TorchNeuralNet(args.networkModel, args.imgDim) if args.verbose: print("Loading the dlib and OpenFace models took {} seconds.".format( time.time() - start)) def getRep(imgPath): if args.verbose: print("Processing {}.".format(imgPath)) bgrImg = cv2.imread(imgPath) if bgrImg is None: raise Exception("Unable to load image: {}".format(imgPath)) rgbImg = cv2.cvtColor(bgrImg, cv2.COLOR_BGR2RGB) #rgbImg = bgrImg if args.verbose: print(" + Original size: {}".format(rgbImg.shape)) start = time.time() bb = align.getLargestFaceBoundingBox(rgbImg) if bb is None: raise Exception("Unable to find a face: {}".format(imgPath)) if args.verbose: print(" + Face detection took {} seconds.".format(time.time() - start)) start = time.time() alignedFace = align.align(args.imgDim, rgbImg, bb, landmarkIndices=openface.AlignDlib.OUTER_EYES_AND_NOSE) if alignedFace is None: raise Exception("Unable to align image: {}".format(imgPath)) if args.verbose: print(" + Face alignment took {} seconds.".format(time.time() - start)) start = time.time() rep = net.forward(alignedFace) if args.verbose: print(" + OpenFace forward pass took {} seconds.".format(time.time() - start)) print("Representation:") print(rep) print(" -\n") return rep embeddingList = [] nameList = [] for filename in os.listdir(os.path.join(os.path.dirname(fiLEDir), 'images')): rep = getRep(os.path.join(os.path.join(os.path.dirname(fiLEDir), 'images'), filename)) PName = str(filename) Identity = PName.split(".")[0] embeddingList.append(rep) nameList.append(Identity) print embeddingList print nameList #Read date and time: a = datetime.datetime.now() #Create video name: video_name = str(a.year) + str(a.month) + str(a.day) + "_" + str(a.hour) + str(a.minute) + str(a.second) + ".avi" #Create video writer: fourcc = cv2.cv.CV_FOURCC(*‘MJPG’) fps = video_writer = cv2.VideoWriter(video_name, fourcc, fps, (680, 480)) stream = urllib.urlopen('http://192.168.1.123:8081') bytes = '' already_sent = False matched = False distanceList = [] start = time.time() matched_message = None while True: bytes += stream.read(1024) a = bytes.find('\xff\xd8') b = bytes.find('\xff\xd9') saveImg = None if a != -1 and b != -1: jpg = bytes[a:b+2] bytes= bytes[b+2:] i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.CV_LOAD_IMAGE_COLOR) video_writer.write(i) saveImg = i gray_image = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY) cv_faces = face_cascade.detectMultiScale(gray_image, 1.3, 5) bb_2 = None xf = 0; yf = 0; wf = 0; hf = for (x, y, w, h) in cv_faces: #cv2.rectangle(i, (x, y), (x+w, y+h), (255, 0, 0), 2) #roi_gray = gray_image[y:y+h, x:x+w] #roi_color = i[y:y+h, x:x+w] if w > 100: xf = x; yf = y; wf = w; hf = h bb_2 = dlib.rectangle(left = long(x), top = long(y), right = long(x + w), bottom = long(y + h)) #bb_2 = align.getLargestFaceBoundingBox(i) if bb_2 is None: already_sent = False; if not bb_2 is None: alignedFace_2 = align.align(args.imgDim, i, bb_2, landmarkIndices=AlF.AlignFace.INNER_EYES_AND_NOSE) if not alignedFace_2 is None: rep = net.forward(alignedFace_2) message = "F" matched = False distanceList = [] num = length = len(embeddingList) for x in range(0, length): delta = embeddingList[x] - rep distance = np.dot(delta,delta) distanceList.append(distance) if distance and already_sent and num == 0: start = time.time() print message matched_message = None client.publish("dutdoor",message) client.loop(2) print distanceList if not matched: stop = time.time()-start if stop > 5: start = time.time() score = min(distanceList) message = message + "N" + str(round(score, 3)) if matched_message == None: print message client.publish("dutdoor",message) client.loop(2) else: print matched_message client.publish("dutdoor",matched_message) client.loop(2) matched_message = None cv2.rectangle(i, (xf, yf), (xf+wf, yf+hf), (255, 0, 0), 2) roi_gray = gray_image[yf:yf+hf, xf:xf+wf] roi_color = i[yf:yf+hf, xf:xf+wf] cv2.imshow('i',i) if cv2.waitKey(1) & 0xFF == ord('q'): cv2.imwrite('Kien.jpg',saveImg) break cv2.destroyAllWindows() ... cấp Tổng quan hệ thống cửa tự động Giới thiệu chung hệ thống cửa tự động Cửa tự động (automatic gate) khái niệm đến hệ thống cửa có khả tự điều kiển điều khiển từ xa Cửa tự động sử dụng rộng rãi... QUAN HỆ THỐNG CỬA TỰ ĐỘNG .10 1.1 Đặt vấn đề 10 1.2 Tổng quan hệ thống cửa tự động 10 1.2.1 Giới thiệu chung hệ thống cửa tự động 10 1.2.2 Các hệ thống cửa tự động. .. nhỏ hệ thống cửa tự động, hệ thống cảnh báo nguy hiểm, hệ thống an ninh nhỏ phải liên kết với để hoạt động cho mục đích chung Sử dụng cửa tự động thay cho bảo vệ viên giúp tiết kiệm nhân công

Ngày đăng: 23/09/2017, 15:55

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w