Tải thư viện haar_cascade tại link dưới, chép vào folder project
opencv/data/haarcascades at master · opencv/opencv
# import thư viện OpenCV
import cv2
# load thư viện nhận diện khuôn mặt vào biến haar_cascade (đặt tên biến tùy ý)
haar_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# load ảnh
img = cv2.imread('01.png')
# chuyển sang ảnh xám
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# nhận diện khuôn mặt có trong hình bằng cách gọi thư viện nhận diện mặt đã khai báo
# kết quả trả về là biến faces_rect (đặt tên biến tùy ý) chứa thông tin các khuôn mặt phát hiện được
# trong đó mỗi khuôn mặt sẽ gồm 4 thông số x,y,w,h của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
# x, y: tọa độ điểm bắt đầu (góc trên bên trái) của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
# w: chiều rộng của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
# h: chiều cao của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
faces_rect = haar_cascade.detectMultiScale(gray_img, 1.1, 9)
# tham số 1.1 được điều chỉnh để đảm bảo nhận diện chính xác, ko bỏ sót khuôn mặt
# vẽ lại đường bao các khuôn mặt lên ảnh gốc
# vòng lặp xét lần lượt khuôn mặt đầu tiên đến khuôn mặt cuối cùng đã phát hiện được
for (x, y, w, h) in faces_rect:
# vẽ hình chữ nhật bao quanh khuôn mặt phát hiện được
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# show ảnh kết quả
cv2.imshow('Detected faces', img)
# đợi người dùng nhấn phím bất kì
cv2.waitKey(0)
# xóa toàn bộ cửa sổ đã tạo ra
cv2.destroyAllWindows()
# import thư viện OpenCV
import cv2
# load thư viện nhận diện khuôn mặt vào biến haar_cascade (đặt tên biến tùy ý)
haar_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# load ảnh
img = cv2.imread('01.png')
# chuyển sang ảnh xám
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# nhận diện khuôn mặt có trong hình bằng cách gọi thư viện nhận diện mặt đã khai báo
# kết quả trả về là biến faces_rect (đặt tên biến tùy ý) chứa thông tin các khuôn mặt phát hiện được
# trong đó mỗi khuôn mặt sẽ gồm 4 thông số x,y,w,h của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
# x, y: tọa độ điểm bắt đầu (góc trên bên trái) của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
# w: chiều rộng của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
# h: chiều cao của hình chữ nhật nhỏ nhất bao quanh khuôn mặt
faces_rect = haar_cascade.detectMultiScale(gray_img, 1.1, 9)
# tham số 1.1 được điều chỉnh để đảm bảo nhận diện chính xác, ko bỏ sót khuôn mặt
# vẽ lại đường bao các khuôn mặt lên ảnh gốc
# vòng lặp xét lần lượt khuôn mặt đầu tiên đến khuôn mặt cuối cùng đã phát hiện được
for (x, y, w, h) in faces_rect:
# cắt ảnh vùng chứa khuôn mặt
roi = img[y:y+h, x:x+w]
# làm mờ vùng ảnh cắt
roi = cv2.GaussianBlur(roi, (15, 15), 30)
# ghép lại vùng ảnh cắt đã làm mờ vào ảnh gốc
img[y:y+roi.shape[0], x:x+roi.shape[1]] = roi
# show ảnh kết quả
cv2.imshow('Blur faces', img)
# đợi người dùng nhấn phím bất kì
cv2.waitKey(0)
# xóa toàn bộ cửa sổ đã tạo ra
cv2.destroyAllWindows()
# import thư viện OpenCV
import cv2
# gán luồng webcam
# 0: camera builtin - thường là webcam có sẵn của máy
# 1: camera usb (gắn ngoài) thứ nhất
# 2: camera usb (gắn ngoài) thứ hai
# ...
cap = cv2.VideoCapture(0)
# kiểm tra xem video đã được load vào cap chưa
# nếu chưa được (file lỗi/ko tồn tại) thì báo
if (cap.isOpened()== False):
print("Error opening video stream or file")
# đọc video đến khi kết thúc (hết frame hình)
while(cap.isOpened()):
# load lần lượt frame 1, 2, 3... đến frame cuối
ret, frame = cap.read()
# nếu load dc frame
if ret == True:
# hiện frame
cv2.imshow('Frame',frame)
# nếu nhấn phím Q thì thoát vòng lặp -> ngừng video
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# nếu ko load dc frame -> thoát vòng lặp -> ngừng video
else:
break
# giải phóng bộ nhớ
cap.release()
# đóng hết cửa sổ
cv2.destroyAllWindows()
Y như mở webcam/camera, chỉ khác là thay vì chỉ số camera thì thay bằng file video
# import thư viện OpenCV
import cv2
# gán video 01.mp4 vào biến cap
cap = cv2.VideoCapture('01.mp4')
# kiểm tra xem video đã được load vào cap chưa
# nếu chưa được (file lỗi/ko tồn tại) thì báo
if (cap.isOpened()== False):
print("Error opening video stream or file")
# đọc video đến khi kết thúc (hết frame hình)
while(cap.isOpened()):
# load lần lượt frame 1, 2, 3... đến frame cuối
ret, frame = cap.read()
# nếu load dc frame
if ret == True:
# hiện frame
cv2.imshow('Frame',frame)
# nếu nhấn phím Q thì thoát vòng lặp -> ngừng video
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# nếu ko load dc frame -> thoát vòng lặp -> ngừng video
else:
break
# giải phóng bộ nhớ
cap.release()
# đóng hết cửa sổ
cv2.destroyAllWindows()