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) 编辑 收藏 举报