从安装python到使用opencv进行人脸检测

news2025/7/22 21:05:40

一、python与PyCharm的安装

1.python主要有三种安装方式

参考自:2、Python安装 - 哔哩哔哩

Python安装教程(2022最新)_北京精神病康复中心的博客-CSDN博客

python下载官网:Python Releases for Windows | Python.org

1)在线安装:即执行安装后才透过网络下载python: Download Windows x86-64 web-based installer。

2)exe程序安装: Download Windows x86-64 executable installer。推荐使用这种安装方式,可以不用配置环境变量,一路next就可以了。

3)压缩文件解压缩安装: Download Windows x86-64 embeddable zip file。这种是直接下载整包的方式,下载下来后需要配置环境变量才能使用。

2.PyCharm的安装

安装完python我们需要下载编辑器,在这里推荐使用PyCharm

PyCharm下载官网:Other Versions - PyCharm

1)从官网下载exe文件

注意选择的exe版本最好是比自己下载的Python发布晚一点的预防造成版本问题。并且我们选择community版本进行下载,这样后面可以不用收费。

2)接下来也基本上是一路next就可以了。

可参考:【Python(二)】PyCharm安装教程_和光同其尘的博客-CSDN博客_pycharm安装教程

【Python(二)】PyCharm安装教程_和光同其尘的博客-CSDN博客_pycharm安装教程

后面需要配置一下interpreter,要不然运行的时候可能会出现一些问题,我在interpreter选择的exe是python安装的目录上的exe。

二、安装opencv

1.打开exe输入pip指令

pip install opencv-python

2.安装后的opencv的位置

一般是放在python文件夹下的Lib文件夹下的site-packages

C:/Users/Administrator/AppData/Local/Programs/Python/Python311/Lib/site-packages/

三、使用opencv检测图片和视频中的人脸

1.原理:级联分类器

 2.Haar级联分类器

1)可供检测的类型

 2)关键函数:detectMultiScale

 

 3.检测图片中的人脸和人眼的代码

需要准备一张图片命名为pic.jpg放到main.py所在的文件夹下

import cv2 as cv
import matplotlib.pyplot as plt

#读取图片
img = cv.imread("pic.jpg")
#设置灰度图
gray=cv.cvtColor(img,cv.COLOR_RGB2GRAY)

#加载识别人脸的分类器
face_cas=cv.CascadeClassifier("C:/Users/Administrator/AppData/Local/Programs/Python/Python311/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml")
#加载识别人眼的分类器
eyes_cas=cv.CascadeClassifier("C:/Users/Administrator/AppData/Local/Programs/Python/Python311/Lib/site-packages/cv2/data/haarcascade_eye.xml")

#调用detectMultiScale识别人脸
faceRects=face_cas.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(5,5))
for faceRect in faceRects:
    #读取人脸信息
    x,y,w,h=faceRect
    #将人脸框出来
    #cv.rectangle(img,(x,y),(x+h,y+w),(0,255,0),3)
    cv.circle(img, (int((x + x + w) / 2), int((y + y + h) / 2)), int(w / 2), (0, 255, 0), 2)

    #在识别出的人脸中继续识别人眼
    roi_color=img[y:y+h,x:x+w]
    roi_gary = gray[y:y + h, x:x + w]
    # 调用detectMultiScale识别人眼
    eyes=eyes_cas.detectMultiScale(roi_gary,scaleFactor=1.15,minNeighbors=5,minSize=(3,3))
    #将人眼框出来,人眼有两个
    for(ex,ey,ew,eh) in eyes:
        cv.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)

plt.figure(figsize=(8,6),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title('result')
plt.xticks([]),plt.yticks([])
plt.show()

 4.检测视频中的人脸和代码

需要准备一段视频命名为movie.mp4放到main.py所在的文件夹下

import cv2 as cv
import matplotlib.pyplot as plt


# 1.读取视频
cap = cv.VideoCapture("movie.mp4")
# 2.在每一帧数据中进行人脸识别
while(cap.isOpened()):
    ret, frame = cap.read()
    if frame is None:
        break
    small_frame=[]#视频播放完毕退出窗口
    try:
        #将视频中的帧的大小调小一点,降低运算
        small_frame = cv.resize(frame, (0, 0), fx=0.5, fy=0.5)
    except:
        continue
    if ret==True:
        #转灰度图
        gray = cv.cvtColor(small_frame, cv.COLOR_BGR2GRAY)
        # 3.实例化OpenCV人脸识别的分类器  haarcascade_frontalface_default  haarcascade_frontalface_alt
        face_cas = cv.CascadeClassifier( "C:/Users/Administrator/AppData/Local/Programs/Python/Python311/Lib/site-packages/cv2/data/haarcascade_frontalface_alt.xml" )
        # 4.调用识别人脸
        faceRects = face_cas.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=3,minSize=(3,3))
        for faceRect in faceRects:
            x, y, w, h = faceRect
            # 框出人脸
            cv.rectangle(small_frame, (x, y), (x + h, y + w),(0,255,0), 3)
        cv.imshow("frame",small_frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
# 5. 释放资源
cap.release()
cv.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EDI系统如何恢复历史映射关系?

在知行之桥EDI系统中,由XML Map端口来处理不同 XML 之间的映射关系,主要的功能为:通过鼠标拖拽建立关系映射,将输入的源XML文件转换为目标XML文件。 XML Map端口的基本设置为: 源文件:配置源XML文件的模板…

【Java篇】备战面试——你真的了解“数组”的吗?

目录 数组概念 声明数组 数组默认值 数组拷贝及数组类型VS基本类型 Arrays类 二维数组 数组概念 在JAVA语言中数组是一种数据结构,是用来存储同一类型数据的集合或者序列,我们可以通过整型下标(index,异或索引&#xf…

Centos7 docker搭建onlyoffice

注意:本文的命令使用的是 root 用户登录执行,不是 root 的话所有命令前面要加 sudo 一、安装docker 1、更新 yum 包(使用 root 权限,生产环境中此步操作需慎重) yum -y update yum -y update 升级所有包同时也升级软…

Set接口和常用方法

Set接口基本介绍 无序(添加和取出顺序不一样),没有索引不允许重复元素,所以最多包含一个nullSet接口的常用方法和List一样,Set接口也是Collection的子接口,因此,常用方法和Collection接口一样 …

【C++】类与对象基本知识 (构造 析构 拷贝 explicit 对象数组 动态静态对象)

目录 1.类与对象基本概念 2.构造函数 3.析构函数 4.构造和析构函数调用顺序 5.拷贝构造函数 6.浅拷贝和深拷贝 7.初始化列表 8.explicit防止构造函数隐式转换 9.对象数组 10.动态对象 10.1 动态对象创建 10.2 动态对象数组 11.静态成员 11.1 静态成员变量 11.2 …

Java学习笔记(三)

Java学习笔记(三) 文章目录Java学习笔记(三)1 常用API1.1 类 Math1.1.1 abs1.1.2 ceil和floor1.2 System1.2.1 exit()1.2.2 currentTimeMillis()1.2.3 arraycopy()1.3 Runtime1.4 Object1.4.1 System.out.println底层原理1.4.2 equalsString类重写的equals方法1.5 对象克隆1.5.…

代码随想录训练营第24天|回溯算法理论基础、LeetCode 77.组合

参考 代码随想录 回溯算法理论基础 什么是回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法&#xf…

基于Matlab仿真极化双基地雷达系统以估计目标的范围和速度(附源码)

目录 一、系统设置 二、系统仿真 三、使用圆极化接收阵列 四、总结 五、程序 此示例演示如何仿真极化双基地雷达系统以估计目标的范围和速度。发射器、接收器和目标运动学被考虑在内。 一、系统设置 该系统以 300 MHz 的频率运行,使用线性 FM 波形&#xff0…

1526_AURIX TC275 BootROM下

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个是固件启动的流程介绍,在启动的过程中,HSM的RAM必然会被初始化掉。这个之前倒是没有注意到,HSM还是有专门的RAM的。自然,我自己接触到的…

基于springboot题库管理系统的设计与实现

目前,许多高校绝大多数课程还采用考教统一的模式来完成教学过程,这种传统的考试模式在教学到实施考试的过程带有很大的主观随意性和不规范性。另外随着各高校近年来学生规模的扩大,教学任务日益繁重,教师的工作量相应的不断增加。…

【Bio】基础生物学 - 蛋白质 protein

文章目录1. 蛋白质Ref1. 蛋白质 蛋白质是生命的物质基础,是有机大分子,是构成细胞的基本有机物,是生命活动的主要承担者。没有蛋白质就没有生命。 蛋白质的基本组成单位是 氨基酸 (amino acid)\blue{\text{氨基酸 (amino acid)}}氨基酸 (am…

【C++】树?堆?怎么实现?

新的一周过去了,大家有没有对上星期练习的题目更加熟练呢? 上星期和上上星期我们主要学习了顺序表,链表,和用这俩都能实现的栈和队列 那么今天我们看看堆又是什么结构 目录 1.树 介绍 2.堆 介绍 3.堆的实现 1.树の介绍 不就是树…

cartopy绘制中国降雨地图

常用的地图可视化的编程工具有 MATLAB、IDL、R、GMT、NCL 等。相比于ArcGIS、QGIS和ArcGISpro用鼠标点来点去,编程绘图也是有很大的优点的,方便,可批量,美观。 大气科学和气象的朋友们一直使用的应该是 NCL,易用性不错…

Windows 编写自动复制备份、删除文件定时任务脚本

目录 一、backup.bat 脚本内容如下: 二、脚本内容解析 1.自动生成当天日期的目录 2. 删除前 n 天的文件 forfile 命令参数说明: 3.复制文件到指定目录 robocopy 命令参数说明: 结论: 三、设置定时任务 1. 打开 控制面板…

【数据结构】谈谈ArrayList和LinkedList的区别

(此图源于比特高博) 上图简洁明了的列出了二者的不同点 下面咱们详细聊聊具体的 要问的是区别,问不同点,那就得从二者共有的但是不同的点来讨论 1.底层实现上:ArrayList底层是顺序表,采用数组结构&…

引入DDP技术:英特尔网卡让数据处理更高效

英特尔网卡引入DDP技术后,提高了云和NFV部署的数据包处理效率,按需重配置报文处理引擎,让数据处理更高效 ◆可编程报文处理流水线 ◆按需优化工作负载 ◆无需重启服务器 ◆设备使用更高效 ◆无缝启用新服务 Intel Ethernet 700系列产品…

谷粒商城项目总结(一)-基础篇

一、项目简介 本项目适合人群:学过ssm是必须的。项目里有mybatis-plus和springcloud的内容,你可以用本项目来做实践,也可以利用本项目初识cloud,但最好还是对微服务有一定了解。 下好了vargant,如果安装centos7很慢&…

是什么让 NFT 项目成为“蓝筹”?

Nov. 2022, Vincy Data Source: Footprint Analytics - Bluechip Collection 在 NFT 这样一个不稳定和新兴的行业中,要赋予项目为 "蓝筹 " 地位是很难的。然而,不少的 NFT 项目宣称自己是蓝筹项目,但它们是吗? Foot…

从零开始配置vim(29)——DAP 配置

首先给大家说一声抱歉,前段时间一直在忙换工作的事,包括但不限于交接、背面试题准备面试。好在最终找到了工作,也顺利入职了。期间也有朋友在催更,在这里我对关注本系列的朋友表示感谢。多的就不说了,我们正式进入vim …

【案例 5-1】 模拟订单号生成

【案例介绍】 1.任务描述 编写一个程序,模拟订单系统中订单号的生成。例如给定一个包括年月日以及毫秒值的 数组 arr{2019,0504,1101},将其拼接成字符串 s:[201905041101]。要求使用 String 类常用方 法来实现字符串的拼接。 2.运行结果 运行结果如图 5-1 所示 图…