

Haar人臉識別方法
scaleFactor調整哈爾級聯(lián)器的人臉選框使其能框住人臉
官方教程指路
每個特征都是通過從黑色矩形下的像素總和減去白色矩形下的像素總和獲得的單個值
級聯(lián)器模型文件位置
# -*- coding: utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#第二步,導入人臉識別的圖片并將其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
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, 255, 0), 3)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
Haar識別眼鼻口
# -*- coding: utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
#第二步,導入人臉識別的圖片并將其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行人臉識別
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
eyes = eye.detectMultiScale(gray, 1.1, 5)
mouses = mouse.detectMultiScale(gray, 1.1, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
for (x, y, w, h) in eyes:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 3)
# for (x, y, w, h) in mouses:
# cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
識別嘴就會不精確了
# -*- coding: utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
#第二步,導入人臉識別的圖片并將其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行人臉識別
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
eyes = eye.detectMultiScale(gray, 1.1, 5)
mouses = mouse.detectMultiScale(gray, 1.1, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
for (x, y, w, h) in eyes:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 3)
for (x, y, w, h) in mouses:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
識別鼻子
# -*- coding: utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
nose = cv2.CascadeClassifier('./haarcascade_mcs_nose.xml')
#第二步,導入人臉識別的圖片并將其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行人臉識別
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
eyes = eye.detectMultiScale(gray, 1.1, 5)
mouses = mouse.detectMultiScale(gray, 1.1, 5)
noses = nose.detectMultiScale(gray, 1.1, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
for (x, y, w, h) in eyes:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 3)
for (x, y, w, h) in mouses:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)
for (x, y, w, h) in noses:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
只要不測口,還是比較準確的
# -*- coding: utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
nose = cv2.CascadeClassifier('./haarcascade_mcs_nose.xml')
#第二步,導入人臉識別的圖片并將其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行人臉識別
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
# eyes = eye.detectMultiScale(gray, 1.1, 5)
# mouses = mouse.detectMultiScale(gray, 1.1, 5)
# noses = nose.detectMultiScale(gray, 1.1, 5)
i = 0
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
roi_img = img[y: y+h, x:x+w]
eyes = eye.detectMultiScale(roi_img, 1.1, 5)
for (x, y, w, h) in eyes:
cv2.rectangle(roi_img, (x, y), (x + w, y + h), (255, 255, 0), 3)
noses = nose.detectMultiScale(roi_img, 1.1, 5)
for (x, y, w, h) in noses:
cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 0, 255), 3)
# mouses = mouse.detectMultiScale(roi_img, 1.1, 5)
# for (x, y, w, h) in mouses:
# cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 255, 255), 3)
# i += 1
# winname = 'face' + str(i)
# cv2.imshow(winname, roi_img)
# for (x, y, w, h) in mouses:
# cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)
# for (x, y, w, h) in noses:
# cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
測口準確度太低?。?!
# -*- coding: utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
nose = cv2.CascadeClassifier('./haarcascade_mcs_nose.xml')
#第二步,導入人臉識別的圖片并將其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行人臉識別
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
# eyes = eye.detectMultiScale(gray, 1.1, 5)
# mouses = mouse.detectMultiScale(gray, 1.1, 5)
# noses = nose.detectMultiScale(gray, 1.1, 5)
i = 0
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
roi_img = img[y: y+h, x:x+w]
eyes = eye.detectMultiScale(roi_img, 1.1, 5)
for (x, y, w, h) in eyes:
cv2.rectangle(roi_img, (x, y), (x + w, y + h), (255, 255, 0), 3)
noses = nose.detectMultiScale(roi_img, 1.1, 5)
for (x, y, w, h) in noses:
cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 0, 255), 3)
mouses = mouse.detectMultiScale(roi_img, 1.1, 5)
for (x, y, w, h) in mouses:
cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 255, 255), 3)
# i += 1
# winname = 'face' + str(i)
# cv2.imshow(winname, roi_img)
# for (x, y, w, h) in mouses:
# cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)
# for (x, y, w, h) in noses:
# cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
Haar+Tesseract進行車牌識別
安裝很簡單,這里貼一個安裝教程
配置出現(xiàn)問題的,可以看看這篇博客
測試一下,識別文字還是很準的!?。?br>
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
carplate = cv2.CascadeClassifier('./haarcascade_russian_plate_number.xml')
#第二步,導入帶車牌的圖片并將其灰度化
img = cv2.imread('./chinacar.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行車牌定位
#[[x,y,w,h]]
carplates = carplate.detectMultiScale(gray, 1.1, 5)
for (x, y, w, h) in carplates:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
carplate = cv2.CascadeClassifier('./haarcascade_russian_plate_number.xml')
#第二步,導入帶車牌的圖片并將其灰度化
img = cv2.imread('./chinacar.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行車牌定位
#[[x,y,w,h]]
carplates = carplate.detectMultiScale(gray, 1.1, 5)
for (x, y, w, h) in carplates:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
# 對獲取到的車牌進行預處理
# 1.提取ROI
roi = gray[y: y+h, x:x+w]
# 2.進行二值化
ret, roi_bin = cv2.threshold(roi, 10, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('img', img)
cv2.imshow('roi_bin', roi_bin)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 引入tesseract庫
import pytesseract
# cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,創(chuàng)建Haar級聯(lián)器
carplate = cv2.CascadeClassifier('./haarcascade_russian_plate_number.xml')
#第二步,導入帶車牌的圖片并將其灰度化
img = cv2.imread('./chinacar.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#第三步,進行車牌定位
#[[x,y,w,h]]
carplates = carplate.detectMultiScale(gray, 1.1, 5)
for (x, y, w, h) in carplates:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
# 對獲取到的車牌進行預處理
# 1.提取ROI
roi = gray[y: y+h, x:x+w]
# 2.進行二值化
ret, roi_bin = cv2.threshold(roi, 10, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract_OCR\tesseract.exe'
print(pytesseract.image_to_string(roi, lang='chi_sim+eng', config='--psm 8 --oem 3'))
cv2.imshow('img', img)
cv2.imshow('roi_bin', roi_bin)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
具體實現(xiàn)還需要進一步優(yōu)化?。?!
深度學習基礎知識
深度學習是計算機視覺最為重要的方法
dnn實現(xiàn)圖像分類
# -*- coding: utf-8 -*-
import cv2
from cv2 import dnn
import numpy as np
# 1.導入模型,創(chuàng)建神經(jīng)網(wǎng)絡
# 2.讀取圖片,轉成張量
# 3.將張量輸入到網(wǎng)絡中,并進行預測
# 4.得到結果,顯示
# 導入模型,創(chuàng)建神經(jīng)網(wǎng)絡
config = "./bvlc_googlenet.prototxt"
model = "./bvlc_googlenet.caffemodel"
net = dnn.readNetFromCaffe(config, model)
# 讀取圖片,轉成張量
img = cv2.imread('./smallcat.jpeg')
blob = dnn.blobFromImage(img, 1.0, (224, 224), (104, 117, 123))
# 將張量輸入到網(wǎng)絡中,并進行預測
net.setInput(blob)
r = net.forward()
# 讀取類目
classes = []
path = './synset_words.txt'
with open(path, 'rt') as f:
classes = [x [x.find(" ") + 1:] for x in f]
order = sorted(r[0], reverse=True)
z = list(range(3))
for i in list(range(0, 3)):
z[i] = np.where(r[0] == order[i])[0][0]
print('No.', i + 1, ' matches:', classes[z[i]], end='')
print('category row is at:', z[i] + 1, ' ', 'posibility:', order[i])
文章來源:http://www.zghlxwxcb.cn/news/detail-825931.html
之后我會持續(xù)更新,如果喜歡我的文章,請記得一鍵三連哦,點贊關注收藏,你的每一個贊每一份關注每一次收藏都將是我前進路上的無限動力 ?。?!↖(▔▽▔)↗感謝支持!文章來源地址http://www.zghlxwxcb.cn/news/detail-825931.html
到了這里,關于OpenCV完結篇——計算機視覺(人臉識別 || 車牌識別)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!