Mục lục:

Nhận diện khuôn mặt + nhận dạng: 8 bước (có hình ảnh)
Nhận diện khuôn mặt + nhận dạng: 8 bước (có hình ảnh)

Video: Nhận diện khuôn mặt + nhận dạng: 8 bước (có hình ảnh)

Video: Nhận diện khuôn mặt + nhận dạng: 8 bước (có hình ảnh)
Video: Bài 8 :Nhận dạng khuôn mặt full code Hướng dẫn giải thích - opencv python 2024, Tháng mười một
Anonim
Image
Image
Nhận diện khuôn mặt + nhận dạng
Nhận diện khuôn mặt + nhận dạng

Đây là một ví dụ đơn giản về việc chạy tính năng nhận diện và nhận diện khuôn mặt với OpenCV từ máy ảnh. LƯU Ý: TÔI ĐÃ THỰC HIỆN DỰ ÁN NÀY CHO CUỘC THI CẢM BIẾN VÀ TÔI ĐÃ SỬ DỤNG CAMERA LÀM CẢM BIẾN ĐỂ THEO DÕI VÀ CÁC MẶT CẢNH NHẬN. Tạo mã để nhận diện khuôn mặt 6. Tạo mã để tạo tập dữ liệu 7. Tạo mã để huấn luyện bộ nhận dạng 8. Tạo mã để nhận dạng khuôn mặt & Kết quả.

Bước 1: Cài đặt Anaconda

Cài đặt Anaconda
Cài đặt Anaconda

Anaconda về cơ bản là một IDE Python được đóng gói độc đáo được vận chuyển với hàng tấn gói hữu ích, chẳng hạn như NumPy, Pandas, IPython Notebook, v.v. Nó dường như được khuyến khích ở khắp mọi nơi trong cộng đồng khoa học. Kiểm tra Anaconda để cài đặt nó.

Bước 2: Tải xuống Gói CV Mở

Tải xuống Gói CV Mở
Tải xuống Gói CV Mở

Trước tiên, hãy truy cập trang OpenCV chính thức để tải xuống gói OpenCV hoàn chỉnh. Chọn phiên bản bạn thích (2.x hoặc 3.x). Tôi đang sử dụng Python 2.x và OpenCV 2.x - chủ yếu là vì đây là cách các Hướng dẫn OpenCV-Python được thiết lập / dựa trên.

Trong trường hợp của tôi, tôi đã giải nén gói (về cơ bản là một thư mục) thẳng vào ổ F của mình. (F: / opencv).

Bước 3: Đặt các biến môi trường

Đặt các biến môi trường
Đặt các biến môi trường

Sao chép và dán tệp cv2.pyd

Thư mục Anaconda Site-pack (ví dụ: F: / Program Files / Anaconda2 / Lib / site-package trong trường hợp của tôi) chứa các gói Python mà bạn có thể nhập. Mục tiêu của chúng tôi là sao chép và dán tệp cv2.pyd vào thư mục này (để chúng tôi có thể sử dụng nhập cv2 trong mã Python của chúng tôi.).

Để thực hiện việc này, hãy sao chép tệp cv2.pyd…

Từ thư mục OpenCV này (phần đầu có thể hơi khác trên máy của bạn):

# Python 2.7 và máy 64 bit: F: / opencv / build / python / 2.7 / x64 # Python 2.7 và máy 32 bit: F: / opencv / build / python / 2.7 / x84

Đối với thư mục Anaconda này (phần đầu có thể hơi khác trên máy của bạn):

F: / Program Files / Anaconda2 / Lib / site-package

Sau khi thực hiện bước này, bây giờ chúng ta sẽ có thể sử dụng nhập cv2 bằng mã Python. NHƯNG, chúng tôi vẫn cần làm thêm một chút công việc để FFMPEG (codec video) hoạt động (cho phép chúng tôi thực hiện những việc như xử lý video.)

Nhấp chuột phải vào "Máy tính của tôi" (hoặc "PC này" trên Windows 8.1) -> nhấp chuột trái vào Thuộc tính -> nhấp chuột trái vào tab "Nâng cao" -> nhấp chuột trái vào nút "Biến môi trường…". Thêm một biến người dùng mới. để trỏ đến OpenCV (x86 cho hệ thống 32 bit hoặc x64 cho hệ thống 64 bit.) Tôi hiện đang sử dụng máy 64 bit.

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

Nối% OPENCV_DIR% / bin vào PATH biến người dùng.

Ví dụ: biến người dùng PATH của tôi trông như thế này…

Trước:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts

Sau:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;% OPENCV_DIR% / bin

Đây là nó, chúng tôi đã hoàn thành! FFMPEG đã sẵn sàng để sử dụng!

Bước 4: Kiểm tra để xác nhận

Kiểm tra để xác nhận
Kiểm tra để xác nhận
Kiểm tra để xác nhận
Kiểm tra để xác nhận

Chúng tôi cần kiểm tra xem liệu bây giờ chúng tôi có thể thực hiện những điều này trong Anaconda (thông qua Spyder IDE) hay không:

  • Nhập gói OpenCV
  • Sử dụng tiện ích FFMPEG (để đọc / ghi / xử lý video)

Kiểm tra 1: Chúng ta có thể nhập OpenCV không?

Tạm kết rằng Anaconda hiện có thể nhập gói OpenCV-Python (cụ thể là cv2), phát hành những điều này trong Bảng điều khiển IPython:

nhập cv2

in cv2._ phiên bản_

Nếu gói cv2 được nhập vào ok không có lỗi và phiên bản cv2 được in ra, thì tất cả chúng ta đều tốt!

Kiểm tra 2: Chúng ta có thể sử dụng codec FFMPEG không?

Đặt một mẫu

input_video.mp4

tệp video trong một thư mục. Chúng tôi muốn kiểm tra xem chúng tôi có thể:

  • đọc tệp video.mp4 này và
  • ghi ra một tệp video mới (có thể là.avi hoặc.mp4, v.v.)

Để thực hiện việc này, chúng ta cần có mã python thử nghiệm, gọi nó là test.py. Đặt nó trong cùng một thư mục với mẫu

input_video.mp4

tập tin.

Đây là những gì

test.py

có thể trông như thế nào (Lưu ý: rất cám ơn các đề xuất của Pete và Warren trong trường nhận xét - tôi đã thay thế mã thử nghiệm ban đầu của mình bằng mã thử nghiệm ban đầu của mình - vui lòng tự kiểm tra và cho chúng tôi biết nếu điều này hoạt động tốt hơn):

nhập cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = đã đọc video thành công. Sai - không đọc được video. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = ghi ra video thành công. Sai - không ghi được video. cap.release () out.release ()

Thử nghiệm này RẤT QUAN TRỌNG. Nếu bạn muốn xử lý các tệp video, bạn cần đảm bảo rằng Anaconda / Spyder IDE có thể sử dụng FFMPEG (codec video). Tôi đã mất nhiều ngày để làm cho nó hoạt động. Nhưng tôi hy vọng bạn sẽ mất ít thời gian hơn nhiều!:) Lưu ý: một mẹo rất quan trọng nữa khi sử dụng Anaconda Spyder IDE. Hãy chắc chắn rằng bạn kiểm tra Danh mục làm việc hiện tại (CWD) !!!

Bước 5: Tạo mã nhận diện khuôn mặt

Tạo mã nhận diện khuôn mặt
Tạo mã nhận diện khuôn mặt
Tạo mã nhận diện khuôn mặt
Tạo mã nhận diện khuôn mặt

Ghi bàn

Trong phiên này,

  • Chúng ta sẽ thấy những điều cơ bản về nhận diện khuôn mặt bằng Bộ phân loại xếp tầng dựa trên tính năng Haar
  • Chúng tôi sẽ mở rộng tương tự để phát hiện mắt, v.v.

Phát hiện thác tầng trong OpenCV

Ở đây chúng tôi sẽ giải quyết việc phát hiện. OpenCV đã chứa nhiều bộ phân loại được đào tạo trước cho khuôn mặt, mắt, nụ cười, v.v. Các tệp XML đó được lưu trữ trong thư mục opencv / data / haarcascades /. Hãy tạo bộ dò tìm khuôn mặt và mắt với OpenCV. Đầu tiên chúng ta cần tải các bộ phân loại XML cần thiết. Sau đó tải hình ảnh đầu vào (hoặc video) của chúng tôi ở chế độ thang độ xám HOẶC chúng tôi có thể sử dụng máy ảnh (để nhận diện khuôn mặt trong thời gian thực)

nhập numpy dưới dạng np

import cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascadecades.xml ') cap = cv2. VideoCapture (0) while 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale (xám, 1,5, 5) cho (x, y, w, h) trong các khuôn mặt: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = gray [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle (roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) print "found" + str (len (face)) + "face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

Bước 6: Tạo mã để tạo tập dữ liệu

Tạo mã để tạo tập dữ liệu
Tạo mã để tạo tập dữ liệu
Tạo mã để tạo tập dữ liệu
Tạo mã để tạo tập dữ liệu

Chúng tôi đang thực hiện nhận dạng khuôn mặt, vì vậy bạn sẽ cần một số hình ảnh khuôn mặt! Bạn có thể tạo tập dữ liệu của riêng mình hoặc bắt đầu với một trong những cơ sở dữ liệu khuôn mặt có sẵn, https://face-rec.org/databases/ cung cấp cho bạn cái nhìn tổng quan cập nhật. Ba cơ sở dữ liệu thú vị là (các phần của mô tả được trích dẫn từ

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Cơ sở dữ liệu Yale Facedatabase mở rộng B

Ở đây tôi đang sử dụng tập dữ liệu của riêng mình….với sự trợ giúp của mã được cung cấp bên dưới:

nhập numpy dưới dạng np

import cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter user id') sampleN = 0; trong khi 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale (xám, 1,3, 5) cho (x, y, w, h) trong các khuôn mặt: sampleN = mẫuN + 1; cv2.imwrite ("F: / Program Files / project / face_rec / faceData / User." + str (id) + "." + str (sampleN) + ".jpg", gray [y: y + h, x: x + w]) cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) nếu sampleN> 20: break cap.release () cv2.destroyAllWindows ()

Bước 7: Tạo mã để đào tạo trình nhận dạng

Tạo mã để đào tạo trình nhận dạng
Tạo mã để đào tạo trình nhận dạng

Tạo hàm để chuẩn bị tập huấn luyện

Bây giờ, chúng ta sẽ xác định một hàm

getImagesWithID (đường dẫn)

lấy đường dẫn tuyệt đối đến cơ sở dữ liệu hình ảnh làm đối số đầu vào và trả về bộ gồm 2 danh sách, một danh sách chứa các khuôn mặt được phát hiện và danh sách kia chứa nhãn tương ứng cho khuôn mặt đó. Ví dụ: nếu chỉ mục thứ i trong danh sách các khuôn mặt đại diện cho cá thể thứ 5 trong cơ sở dữ liệu, thì vị trí thứ i tương ứng trong danh sách các nhãn có giá trị bằng 5.

Bây giờ chuyển đổi các mặt của tập dữ liệu (được tạo ở bước 6) thành tệp.yml với sự trợ giúp của mã được cung cấp bên dưới:

nhập hệ điều hành

import numpy as np import cv2 from PIL import Image # Để nhận dạng khuôn mặt, chúng ta sẽ sử dụng Trình nhận dạng khuôn mặt LBPH = cv2.createLBPHFaceRecognizer (); path = "F: / Program Files / project / face_rec / faceData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (path) face = IDs = for imagePath trong imagePaths: # Đọc hình ảnh và chuyển đổi thành các khuôn mặt màu xámImg = Image.open (imagePath).convert ('L') faceNP = np.array (faceImg, 'uint8') # Lấy nhãn của hình ảnh ID = int (os.path.split (imagePath) [- 1].split (".") [1]) # Phát hiện khuôn mặt trong khuôn mặt hình ảnh.append (faceNP) IDs.append (ID) cv2.imshow ("Thêm khuôn mặt để traning", faceNP) cv2.waitKey (10) return np.array (ID), id khuôn mặt, khuôn mặt = getImagesWithID (đường dẫn) Recogzer.train (khuôn mặt, Id) Recogzer.save ("F: / Tệp chương trình / dự án / face_rec / faceREC / trainingdata.yml") cv2.destroyAllWindows ()

bằng cách sử dụng mã này, tất cả tập dữ liệu khuôn mặt được chuyển đổi thành một tệp.yml duy nhất….. vị trí đường dẫn là ("F: / Program Files / project / face_rec / faceREC / trainingdata.yml")

Bước 8: Tạo mã để nhận ra khuôn mặt và kết quả

Guyzz, đây là bước cuối cùng mà chúng ta có thể tạo mã để nhận dạng khuôn mặt với sự trợ giúp của webcamIN BƯỚC NÀY CÓ HAI HOẠT ĐỘNG ĐANG ĐI ĐẾN TRANG CHỦ…. 1. quay video từ cam 2. so sánh nó với tệp.yml của bạn

import numpy dưới dạng npimport cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecognizer (); rec.load ("F: / Tệp chương trình / dự án / face_rec / faceREC / trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) trong khi 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale (xám, 1,5, 5) cho (x, y, w, h) trong các khuôn mặt: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) id, conf = rec.p Dự đoán (màu xám [y: y + h, x: x + w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y + h), font, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

và cuối cùng kết quả sẽ hiện ra trước mắt bạn …… bạn cũng có thể tải xuống tệp zip từ liên kết bên dưới: Nhấp vào đây để tải xuống mã Vì vậy, trong hướng dẫn này, chúng tôi đã thực hiện tác vụ nhận diện khuôn mặt + nhận dạng bằng OpenCV…..nếu bạn như thế này có thể hướng dẫn….. plzzz đăng ký và bình chọn cho tôi…..cảm ơn các bạn:)

Đề xuất: