【机器学习】opencv-人脸识别
一 . opencv是什么及其作用?
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法(百度百科)。
鉴于本人的工作环境主要是采用python作为开发工具,故本篇博客是基于python来做的学习记录。
二 . 环境依赖和opencv包
- 环境:python3.65+windows10
- 包:opencv-python、opencv-contrib-python(pip安装)
- 说明:装好python以后,直接在cmd里面使用pip install 即可,若遇见下载速度过慢或超时的情况,建议换个pip源,使用方式如:pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple/
1. 读取图片,将其转换为数组
from matplotlib import pyplot as pyl import cv2 import numpyimg = cv2.imread("cat.jpg") #img是一个numpy.ndarray对象,默认是以BGR三通道读取图片数据(三维数组) #img_gray = cv2.imread("cat.jpg",cv2.IMREAD_GRAYSCALE) 以灰度图像方式读取图片数据(二维数组)
2. 数组数据转换
img_BGR = cv2.imread("cat.jpg") img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将其转换为灰度的二维数组数据
3. 数组数据窗口展示
img = cv2.imread("cat.jpg")cv2.imshow("IMage",img) cv2.waitKey(0) # 按任意键关闭窗口,cv2.waitKey(1000) 延时一秒关闭窗口 cv2.destroyAllWindows()
4. 图像保存
cv2.imwrite("mycat.jpg",img)
5. 图像的截取
# 其实本质就是对np数组进行操作 img = cv2.imread("cat.jpg") cv2.imshow("IMage",img[:100,:200]) # 取前100行,前200列的像素作为图像展示
6. BGR数据切片
img = cv2.imread("cat.jpg")# 切片 b,g,r = cv2.split(img) # 得到各自颜色通道的二维数组数据# 合并 img = cv2.merge(b,g,r)
7 同样大小的数组像素值运算
img = cv2.imread("cat.jpg") img_2 = numpy.copy(img)# np相加,像素值只要超过255,就减掉255,比如257,结果就为2 print(img[:3,:3,0]+img_2[:3,:3,0] ) # cv2相加,像素值超过255,就等于255 print(cv2.add(img[:3,:3,0],img_2[:3,:3,0]))
8 图片的融合
img_cat = cv2.imread("cat.jpg") img_dog = cv2.imread("dog.jpg")ret = cv2.addWeighted(img_cat,0.2,img_dog,0.8,0) # 数据后面的值决定图片融合和所占的权重 cv2.imshow("IMage",ret) cv2.waitKey(0) # 按任意键关闭窗口,cv2.waitKey(1000) 延时一秒关闭窗口 cv2.destroyAllWindows()# 如果图片大小不一致,使用cv2.resize(img_xx,(300,200)) ————》转换为np.shape = 200,300的数组
9 图片的比例缩放
img_cat = cv2.imread("cat.jpg")ret = cv2.resize(img_cat,(0,0),fx=3,fy=1) #横向拉长三倍 ret2 = cv2.resize(img_cat,(0,0),fx=3,fy=3) #图片扩大三
【实例】通过训练 进行人脸识别:
import numpy as npimport cv2import os
filenames = os.listdir('./faces/')
faces = []
# targerts == labels标签
targets = []
for f in filenames:for fn in os.listdir('./faces/%s'%(f)):faces.append(cv2.imread('./faces/%s/%s'%(f,fn)))targets.append(f.split('.')[0])
faces = np.asarray(faces)
targets = np.asarray(targets)
len(targets)
#60/
labels = np.asarray([i for i in range(1,7)]*10)
labels.sort()
labels
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6])
# face-recognizer人脸的识别
# Eigen特征,根据特征值相似,认为同一个人
fr = cv2.face.EigenFaceRecognizer_create()
labels_train = labels[::2]
len(labels_train)
#30
faces_train = faces[::2]
len(faces_train)
#30
# faces_train2=[]
# for face in faces_train:
# gray = cv2.cvtColor(face,cv2.COLOR_BGR2BGRA)
# faces_train2.append(gray)
# 灰度化处理
faces_train2 = []
for face in faces_train:gray = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY)faces_train2.append(gray)
faces_train2 = np.asarray(faces_train2)
faces_train2.shape
#(30, 64, 64)
# 训练
fr.train(faces_train2,labels_train)
face_test = faces[1::2]
#叫什么名字的标签
labels_test =labels[1::2]
targets_labels =targets[::10]
for face in face_test:gray = cv2.cvtColor(face,cv2.COLOR_RGB2GRAY)# 1 ~ 20label,confidence = fr.predict(gray)cv2.imshow(targets_labels[label-1],face)print(label,confidence)print('------------------',targets_labels[label-1])cv2.waitKey(1000)cv2.destroyAllWindows()
print(targets_labels)
【机器学习】opencv-人脸识别相关推荐
- 机器学习之人脸识别face_recognition使用
机器学习之人脸识别face_recognition使用 简介 一 二 主要方法介绍 1. load_image_file 加载图像 2. face_locations 定位图中所有人脸 3. face ...
- openCV人脸识别简单案例
1 基础 我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器.我们需要从其中提取特征.下图中的 Haar 特征会被使用,就像我们的卷积核 ...
- OpenCV 人脸识别 源代码
请直接查看原文 OpenCV 人脸识别 源代码 https://hotdog29.com/?p=553 在 2019年7月6日 上张贴 由 hotdog发表回复 opencv 人脸识别 在本教程中,您 ...
- 基于python opencv人脸识别的签到系统
基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...
- OpenCV人脸识别(1)原理介绍
前言 本系列博客学习如何使用OpenCV来执行面部识别. 为了构建人脸识别系统,我们首先进行人脸检测,使用深度学习从每个人脸提取人脸特征,在提取到特征上训练人脸识别模型,然后用OpenCV识别图像和视 ...
- 【转】OpenCV人脸识别
转自:https://blog.csdn.net/learning_tortosie/article/details/85121576 写在前面 这是Adrian Rosebrock博客的第二篇翻译, ...
- opencv 全志_移植opencv人脸识别到全志A10开发板上 +linux3.0内核
移植opencv人脸识别 libz: zlib-1.2.3 libjpeg: jpegsrc.v6b libpng: libpng-1.2.18 libyasm: yasm-0.7. ...
- python人脸照片分类_Python OpenCV 人脸识别(一)
前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...
- 图像识别——(java)opencv(人脸识别简单实现)
人脸识别 package com.acts.opencv.demo;import javax.servlet.http.HttpServletRequest; import javax.servlet ...
- Python+OpenCV人脸识别签到考勤系统(新手入门)
Python+OpenCV人脸识别签到考勤系统(新手入门) 前言 项目效果图 项目需要的环境 编译器 辅助开发QT-designer 项目配置 代码部分 核心代码 项目目录结构 后记 正式版改进 项目 ...
最新文章
- 程序员拯救乐坛?OpenAI用“逆天”GPT2.0搞了个AI音乐生成器
- 织梦换了html模板样式没了,织梦(dedecms)如何更换网站模板?
- Oracle11g EM界面乱码解决方法
- PyQt5 技巧篇-按钮竖排显示方法,Qt Designer设置按钮竖排显示。
- Keras之DNN:基于Keras(sigmoid+linear+mse+predict)利用DNN实现回归预测——DIY多分类数据集预测新数据点
- php中url编码地址栏,php url地址栏传中文乱码解决方法集合_PHP
- Angular自学笔记(?)DI提供者
- 判定重大风险有哪几种_安全风险识别和评估的方法有哪些?
- Oracle 数据库误truncate table恢复过程
- 几时几分几秒怎么写_泼尿 涂油漆 写威胁语 业主莫名被骚扰
- c语言程序改错输入5结果为15,《C语言程序设计教学课件》程序改错(自我总结).doc...
- 黑苹果macOS Catalina 10.15.4 安装过程详细记录
- i310100和i59400f哪个好 i3 10100和i5 9400f差距大吗
- word排版案例报告_看完这4个文章排版要点,你就会排版啦!
- 【黄啊码】fastadmin接入微信支付和支付宝支付
- 微信小程序信息授权获取(头像,昵称,等)
- 玉龙雪山景区完善视频监控设施打造智慧景区
- 常用的Linux快捷键 [译]
- XYOJ1257: 捕杀恶龙(break+j=k)
- 人性中的最黑暗面——《电锯惊魂》影…
热门文章
- 源码阅读 AtomicInteger
- springCloud - 第4篇 - 消费者调用服务 ( Feign )
- 解决:Caused by: java.lang.UnsupportedOperationException: null
- Spring Boot 是什么,有什么用。
- face++算法工程实习生面试
- CF #366(div.2) C 模拟,思维
- 3ds max删除了对象后,还是将原来所有对象输出的原因
- JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传
- springboot 整合 mongodb实现 批量更新数据
- 数据库常见面试题总结