python+opencv做机器学习人脸识别

数据集和分类器都找不见了,可以自己下载。。。。。。代码是对的

人脸识别

人脸识别与图像识别的区别在于人脸识别需要识别出两个人的不同点. 眉间距离, 鼻子位置.眼睛位置等等…

opencv的视频捕捉

opencv提供了访问视频捕捉设备的API(摄像头), 从而获取图像帧.

"""
demo10_vc.py  捕获视频
"""
import cv2 as cv
# 获取视频采集设备   下标为0的摄像头
videoCapture = cv.VideoCapture(0)
# 获取采集到的第一张图片(第一帧)

while True:
	frame = videoCapture.read()[1]
	cv.imshow('frame', frame)
	# 每33毫秒自动解除阻塞
	if cv.waitKey(33) == 27:
		break

# 释放视频设备
videoCapture.release()
cv.destroyAllWindows()  # 销毁所有窗口
人脸定位

哈尔级联人脸定位

fd = cv.CascadeClassifier('../xxx/face.xml')
# frame, 图像
# 1.3: 最小的人脸尺寸
# 5: 最多找5张脸
faces = fd.detectMultiScale(frame, 1.3, 5)

案例:

"""
demo11_fd.py  人脸定位器
"""
import cv2 as cv

fd = cv.CascadeClassifier('../ml_data/haar/face.xml')
ed = cv.CascadeClassifier('../ml_data/haar/eye.xml')
nd = cv.CascadeClassifier('../ml_data/haar/nose.xml')

# 获取视频采集设备   下标为0的摄像头
videoCapture = cv.VideoCapture(0)
# 获取采集到的第一张图片(第一帧)
while True:
	frame = videoCapture.read()[1]
	# 通过哈尔定位器 进行局部定位 并在图像中标注
	faces = fd.detectMultiScale(frame, 1.3, 2)
	for l, t, w, h in faces:
		# 绘制椭圆
		a, b = int(w/2), int(h/2)
		cv.ellipse(frame, 
			(l+a, t+b), # 椭圆心坐标
			(a, b), # 椭圆半径
			0, 0, 360, (255,0,255), 
			2 # 椭圆的线宽
		)
		# 绘制鼻子和眼睛
		face = frame[t:t+h, l:l+w]
		eyes = ed.detectMultiScale(face, 1.3, 5)
		for l, t, w, h in eyes:	
			a, b = int(w/2), int(h/2)
			cv.ellipse(face, 
				(l+a, t+b), # 椭圆心坐标
				(a, b), # 椭圆半径
				0, 0, 360, (0,255,255), 
				2 # 椭圆的线宽
			)
		
		nodes = nd.detectMultiScale(face, 1.3, 5)
		for l, t, w, h in nodes:	
			a, b = int(w/2), int(h/2)
			cv.ellipse(face, 
				(l+a, t+b), # 椭圆心坐标
				(a, b), # 椭圆半径
				0, 0, 360, (255,255,0), 
				2 # 椭圆的线宽
			)
	cv.imshow('frame', frame)
	# 每33毫秒自动解除阻塞
	if cv.waitKey(33) == 27:
		break

# 释放视频设备
videoCapture.release()
cv.destroyAllWindows()  # 销毁所有窗口
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值