人脸识别的方法
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模型)