python opencv

import cv2 as cv
# 导入加载图片
img = cv.imread('test.jpg')
# 图片显示
cv.imshow('img',img)
# 键盘输入
# cv.waitKey(1000)
cv.waitKey(0)
# C++清理缓存
cv.destroyAllWindows()

 图片识别

import cv2 as cv
# 识别脸部图片
def face_detect_demo():
    # 讲图片转换为灰图片
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv.CascadeClassifier\
    ('C:/programjavapython/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    # 检测人脸
    faces = face_detector.detectMultiScale(gray)
    # 在识别出的脸上绘制矩形
    for x,y,w,h in faces:
        cv.rectangle(img,(x,y),(x+w,y+h),color = (0,0,255),thickness = 2)
# 导入加载图片
img = cv.imread('test.jpg')
# 调用方法
face_detect_demo()
# 图片显示
cv.imshow('img',img)
# 键盘输入
# cv.waitKey(1000)
cv.waitKey(0)
# C++清理缓存
cv.destroyAllWindows()

 视频识别

import cv2 as cv
def face_detect_demo(img):
    # 讲图片转换为灰图片
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv.CascadeClassifier\
    ('C:/programjavapython/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    # 检测人脸
    faces = face_detector.detectMultiScale(gray)
    # 在识别出的脸上绘制矩形
    for x,y,w,h in faces:
        cv.rectangle(img,(x,y),(x+w,y+h),color = (0,0,255),thickness = 2)
    cv.imshow('result',img)
# 导入视频
cap = cv.VideoCapture('VID_20200420_101745.mp4')
# 当导入成功,进行视频分析
while True:
    flag,frame = cap.read()
    # 如果视频已经放完了   
    if not flag:
        break
    face_detect_demo(frame)
    # 如果按了q
    if ord('q') == cv.waitKey(10):
        break
cv.destroyAllWindows()
cap.release()

 训练数据(人脸识别)

import cv2 as cv
import sys
import os
import numpy as np
from PIL import Image

def getImageAndLabels(path):
# 新建两个空的列表
    facesSamples = []
    ids = []
# 找到对应的图片文件名称,放在图片列表里面
    imagePaths = [os.path.join(path,f) for f in os.listdir(path)]
    # print(imagePaths)
# 检测人脸
    # 加载特征数据
    face_detector = cv.CascadeClassifier\
    ('C:/programjavapython/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    # 在识别出的脸上绘制矩形
# 遍历图片
    for imagePath in imagePaths:
        # 打开图片
        PIL_img = Image.open(imagePath).convert('L')
        # 将图像化为数组
        img_numpy = np.array(PIL_img,'uint8')
        # 检测人脸
        faces = face_detector.detectMultiScale(img_numpy)
#  获取每张图片的路径(名称)
        id = int(os.path.split(imagePath)[1].split('.')[0])
        for x,y,w,h in faces:
            facesSamples.append(img_numpy[y:y+h,x:x+w])
            ids.append(id)
    return facesSamples,ids

if __name__ == '__main__':
    # 图片路径
    path = './jm/'
    # 获取图像和标签
    faces,ids = getImageAndLabels(path)
    # 获取循环对象
    recognizer = cv.face.LBPHFaceRecognizer_create()
    recognizer.train(faces,np.array(ids))
    recognizer.write('trainer/trainer.yml')

 用于图片去识别

import cv2 
import sys
import os
import numpy as np
from PIL import Image

# 加载训练数据集文件trainer.yml
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('trainer/trainer.yml')
# 准备需要识别的图片
img = cv2.imread('./jm/10.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
face_detector = cv2.CascadeClassifier\
    ('C:/programjavapython/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
faces = face_detector.detectMultiScale(gray,minSize = (200,200))
for x,y,w,h in faces:
    # print(x,y,w,h)
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
    # 人脸识别
    id,confidence = recogizer.predict(gray[y:y+h,x:x+w])
    print(id,confidence)
cv2.imshow('result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

posted on 2020-04-16 15:32  dandanduba  阅读(252)  评论(0编辑  收藏  举报

导航