OpenCV_14 人脸识别

发布于:2022-12-18 ⋅ 阅读:(173) ⋅ 点赞:(0)

人脸识别的方法

1.哈尔(Haar)级联方法

Haar是专门为解决人脸识别而推出的方法。在深度学习DNN方法未出现时就可以商用了。

Haar人脸识别步骤:

  • 创建Haar级联器
  • 导入图片并将其灰度化
  • 调用detectMultiScale方法进行人脸识别

detectMultiScale()
声明:void detectMultiScale( InputArray image, CV_OUT std::vector<Rect>& objects, double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize = Size(), Size maxSize = Size() );
参数
   scaleFactor:缩放因子
   minNeighbors:人脸图像最少像素数量

代码示例:

import cv2
import numpy as np 

# 创建Haar级联器
facer = cv2.CascadeClassifier("./haarcascades/haarcascade_frontalface_default.xml")

#导入人脸识别的图像并将其灰度化
img = cv2.imread("./picture/p3.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 进行人脸识别
# [[x, y, w, h]]
faces = facer.detectMultiScale(gray, 1.1, 5)

for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)

cv2.imshow("img", img)
cv2.waitKey()

结果展示:
请添加图片描述
车牌识别步骤:

  • 通过Haar定位车牌的大体位置
  • 对车牌进行预处理:二值化、形态学处理、去噪、缩放
  • 调用tesseract进行文字识别

Tesseract安装

sudo apt install tesseract-ocr
sudo apt install libtesseract-dev

检查版本:

tesseract --version

若无问题则显示

tesseract 4.0.0-beta.1
 leptonica-1.75.3

成功安装tesseract之后,可以运行以下命令来检查已安装的tesseract版本支持哪些语言:

tesseract --list-langs

若无问题则显示

List of available languages (2):
eng
osd

eng表示可以检测英语,而osd则可以检测方向和脚本。

代码示例:

import cv2
import numpy as np 
import pytesseract

kernel = np.ones((3, 3), np.uint8)

# 创建Haar级联器
plate = cv2.CascadeClassifier("./haarcascades/haarcascade_russian_plate_number.xml")

#导入带车牌的图像并定位
img = cv2.imread("./picture/chinacar.jpeg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 进行人脸识别
# [[x, y, w, h]]
plates = plate.detectMultiScale(gray, 1.1, 5)

for (x, y, w, h) in plates:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)

# 对车牌进行预处理
# 提取ROI
roi = gray[y : y+h, x : x+w]
# 进行二值化
ret, roi_bin = cv2.threshold(roi, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 开运算去掉小线条
# roi_bin = cv2.morphologyEx(roi_bin, cv2.MORPH_OPEN, kernel)

print(pytesseract.image_to_string(roi_bin, lang='chi_sim+eng', config = '--psm 8 --oem 3', ))


cv2.imshow("img", img)
cv2.imshow("roi_bin", roi_bin)
cv2.waitKey()

2.深度学习方法(DNN)

OpenCV对DNN的支持
OpenCV只能使用DNN,不能训练DNN模型,支持的模型有:

  • TensorFlow
  • Pytorch/torch
  • Caffe
  • DarkNet(YOLO模型)