OpenCV人脸识别

2023-11-02

OpenCV人脸识别与口罩检测

下载文件

人脸检测

人脸检测的检测方法主要有两类:基于知识(根据眼睛,眉毛,嘴巴,鼻子等器官特征及相互几何位置关系来检测)和基于统计(将人脸看作一个二维像素矩阵,通过大量人脸图像样本构造人脸模式空间,由相似度量判断人脸是否存在).

基于知识的检测

  • 模板匹配
  • 人脸特征
  • 形状边缘
  • 纹理特征
  • 颜色特征

基于统计的检测

  • 主成分分析与特征脸
  • 神经网络方法
  • 支持向量机
  • 隐马尔可夫模型
  • Adaboost算法

分类

  • 对已知物体类别总数的识别方式,训练时数据就带有标签,明确是人脸还是非人脸,称为有监督学习.

聚类

  • 处理类别总数不确定的方法或训练的数据无标签,无需学习阶段中关于物体类别的信息,成为无监督学习.

Haar分类器

Haar分类器=Har-like特征+积分图方法+AdaBoost+级联

  • 使用Haar-like特征做检测
  • 积分图对Haar-like特征求值加速
  • 使用AdaBoost算法训练区分人脸与非人脸的强分类器
  • 使用筛选式级联把强分类器级联,提高准确率

Haar-like特征

在人脸检测时需要有一个子窗口在待检测的图片窗口中不断的移位滑动,子窗口每到一个位置,就会计算出该区域的特征,再用训练好的级联分类器对该特征进行筛选,当这个特征通过了所有强分类器的筛选,就判定这个区域为人脸。

在这里插入图片描述

上面的方块都是Haar-like特征,将上面的任意一个矩形放到人脸区域上,然后,将白色区域的像素和减去黑色区域的像素和,得到的值为人脸特征值,如果把这个矩形放到一个非人脸区域,那么计算出的特征值应该和人脸特征值是不一样的,而且越不一样越好,所以这些方块的目的就是把人脸特征量化,以区分人脸和非人脸。

比如对于人脸区域,比较明显的两个特征是眼睛比面部和鼻梁区域颜色都要深.

在这里插入图片描述

为了增加区分度,对多个矩形特征计算得到区分度更大的特征值,寻找何种矩形何种特征就是AdaBoost的任务.

AdaBoost算法

AdaBoost是一种有一般性的分类器提升算法,可以帮助选择更好的矩阵特征组合,也就是分类器,将矩阵组合以二叉决策树的形式存储起来.

弱学习

  • 一个学习算法对一组概念的识别率只比随即识别好一点
  • 容易获得,需要大量假设集合(基于某些简单规则的组合和对样本集的性能评估生成的)

强学习

  • 一个学习算法对一组概念的识别率很高
  • 不容易获得的

Kearns和Valiant两位大牛牛提出了弱学习和强学习等价的问题,证明只要有足够数据,弱学习方法可通过集成方式生成任意高精度的强学习方法.

弱分类器和强分类器对应的就是弱学习与强学习.

弱分类器

最初的弱分类器可能只是一个最基本的Haar-like特征,计算输入图像的Haar-like特征值,和最初的弱分类器的特征值比较,以此来判断输入图像是不是人脸,但这个弱分类器太简陋了,可能并不比随机判断的效果好,对弱分类器的孵化就是训练弱分类器成为相对误差稍低的最优弱分类器.

决策树

  • 一个预测模型
  • 代表对象属性与对象值的一种映射关系
  • 分类树: 预计结果可能为两种类型
  • 回归树: 局域结果可能为实数

假设使用三个Haar-like特征f1,f2,f3判断输入数据是否为人脸,可建立决策树
在这里插入图片描述

每个非叶子节点表示一种判断,每个路径代表一种判断的输出,每个叶子节点代表一种类别,作为最终判断结果.一个弱分类器是一个基本与上图类似的决策树,最基本的弱分类器只含一个Haar-like特征,即决策树仅一层,称为树桩.

最重要的就是如何决定每个结点判断的输出,要比较输入图片的特征值和弱分类器中特征,一定需要一个阈值,当输入图片的特征值大于该阈值时才判定其为人脸。训练最优弱分类器的过程实际上就是在寻找合适的分类器阈值,使该分类器对所有样本的判读误差最低。

强分类器

强分类器的诞生需要T轮迭代

    • S: 训练样本集
    • N: 样本数量
    • X: 正样本
    • Y: 负样本
    • T: 最大循环数量
    • 1/N: 初始化样本权重,训练样本的初始概率分布
  1. 第一次迭代训练N个样本,得到一个最优弱分类器
  2. 提高上一轮被误判样本权重
  3. 新的样本和上次分错样本放在一起进行新一轮训练
  4. 循环执行4-5步,T轮后得到T个最优弱分类器
  5. 组合T个最有弱分类器得到强分类器,让所有弱分类器投票,再对投票结果按照弱分类器的错误率加权求和,将投票加权求和的结果与平均投票结果比较得出最终的结果

级联

通过AdaBoost算法训练出了强分类器,但在现实的人脸检测中,只靠一个强分类器还是难以保证检测的正确率,需要训练出多个强分类器将它们强强联手,最终形成正确率很高的级联分类器,即最终的目标Haar分类器。

输入图片输出大量的子窗口图像,这些子窗口图像经过筛选式级联分类器会不断地被每一个节点筛选,抛弃或通过, 这个结构也是一个决策树。

级联强分类器的策略是,将若干个强分类器由简单到复杂排列,希望经过训练使每个强分类器都有较高检测率,而误识率可以放低,比几乎99%的人脸可以通过,但50%的非人脸也可以通过,这样如果有20个强分类器级联,那么他们的总识别率为 0.9 9 20 = 98 % 0.99^{20}=98\% 0.9920=98% ,错误接受率也仅为 0. 5 20 = 0.0001 % 0.5^{20}=0.0001\% 0.520=0.0001%。这样的效果就可以满足现实的需要了,但是如何使每个强分类器都具有较高检测率呢,为什么单个的强分类器不可以同时具有较高检测率和较高误识率呢?

AdaBoost训练出来的强分类器一般具有较小的误识率,但检测率并不很高,一般高检测率会导致高误识率,这是强分类阈值的划分导致的,要提高强分类器的检测率既要降低阈值,要降低强分类器的误识率就要提高阈值,这是个矛盾的事情。而增加分类器个数可以在提高强分类器检测率的同时降低误识率,所以级联分类器在训练时要考虑如下平衡,一是弱分类器的个数和计算时间的平衡,二是强分类器检测率和误识率之间的平衡。

OpenCV

OpenCV是计算机视觉中经典的专用库,其支持多语言、跨平台,功能强大。OpenCV-Python为OpenCV提供了Python接口,使得使用者在Python中能够调用C/C++,在保证易读性和运行效率的前提下,实现所需的功能。
安装教程

OpenCV的Haar级联分类器

OpenCV提供了一种训练方法或预先训练的模型,可以在OpenCV安装的\opencv\sources\data\haarcascades_cuda文件夹中找到, 可以使用cv2.CascadeClassifier(~)方法读取。

先用OpenCV开启笔记本默认摄像头

import numpy as np
import cv2
cap = cv2.VideoCapture(0) # 打开笔记本摄像头
while 1:
    ret,frame = cap.read() # 获取拍摄的图像
    cv2.imshow("picture",frame)
    if cv2.waitKey(1) == 27: # 按下esc停止
        break
cv2.destroyAllWindows() # 关闭所有窗口

文件夹里有很多分类器, 这里用的是haarcascade_frontalface_default.xml正脸检测分类器.

人脸检测

参考文件FaceFind.py

# 加载级联分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 

face_cascade.detectMultiScale可以对输入的灰度图检测, 返回的是一个列表, 列表的元素是人脸所在矩形区域的左上角坐标和宽高, 获取之后我们在原图像上画出来,这里先把检测和画图封装成函数.

# 人脸检测函数
def detect_face(img):
    # 将测试图像转换为灰度图像,因为opencv人脸检测器需要灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 检测多尺度图像,返回值是一张脸部区域信息的列表(x,y,宽,高)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2,minNeighbors=5,minSize=(20, 20)) #人脸的最小范围,如果比20*20像素小忽略)
    # 如果未检测到面部,则返回原始图像
    if (len(faces) == 0):
        return None, None 
    # 目前假设只有一张脸,xy为左上角坐标,wh为矩形的宽高
    (x, y, w, h) = faces[0]
    # 返回图像的正面部分
    return gray[y:y + w, x:x + h], faces[0]

# 根据给定的(x,y)坐标和宽度高度在图像上绘制矩形
def draw_rectangle(img, rect):
    (x, y, w, h) = rect # 矩形跟踪人脸
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 128, 0), 2)
    cv2.rectangle(img, (x+2, y+2), (x + w-2, y + h-2), (0, 255, 128), 2)

然后在while循环的获取图像后加上

try:
    face, rect = detect_face(frame) # 寻找可以识别人脸的图片
    draw_rectangle(frame, rect) # 框选人脸
except: # 未能识别到人脸
    print("no face")

请添加图片描述

模型训练

参考文件FaceTrain.py

知道哪一个区域是人脸后, 下一步就是分辨人脸是谁了, OpenCV也提供了方便的工具, 先录入图片, 创建识别器, 训练得到模型并保存.

# 创建两个列表分别保存所有的脸部和标签
faces = []
labels = []
Names = ["Trump", "Putin", "TrumpTin"]
NameNumber = 2 # 1Trump2Putin

输入参数是人脸图片和标签(正整数123), 一般录入人脸是输入姓名, 但姓名其实也是对应整数标签, 这里偷一下懒, 用NameNumber指代姓名, 检测时再用标签对应到名字数组.

在框选到人脸之后添加, 每次训练都是创建一个新模型, 覆盖掉原来的模型, 所以举例的代码得到的模型只能分辨到一张人脸.

if face is not None:
    #将脸添加到脸部列表并添加相应的标签
    faces.append(face)
    labels.append(NameNumber)
    times += 1
    print(times)
if times > 15:
    # 创建LBPH识别器并开始训练,当然也可以选择Eigen或者Fisher识别器
    face_recognizer = cv2.face.LBPHFaceRecognizer_create()
    face_recognizer.train(faces, np.array(labels))
    # 保存训练好的模型
    face_recognizer.save("face_model.xml")
    break   

人脸预测

参考文件FaceDectect.py

训练得到的是xml后缀的文件, 在检测程序里先加载为face_recognizer

# 加载已训练的模型
def Load_face_model():
    face_recognizer = cv2.face.LBPHFaceRecognizer_create()
    try:
        face_recognizer.read("face_model.xml")
        return face_recognizer
    except:
        print('No Module, please obtain first')
        noi = 1
        return noi
face_recognizer = Load_face_model()
Names = ["Trump", "Putin", "TrumpTin"]

创建预测函数, 用face_recognizer.predict(face)detect_face出的面部区域进行预测, 可以得到一个结果列表label[2], 其中label[0]是预测的标签, 如果正确就是上一节输入的标签NameNumber, label[1]是预测输入的图像与这个标签的正确度, 越小正确度越高, 这里我们取小于70认为是正确, 并用标签label[0]映射回姓名列表, 在图片上写出姓名, 如果否, 就写上陌生人stranger.

# 此函数识别传递的图像中的人物并在检测到的脸部周围绘制一个矩形及其名称
def predict(test_img):
    #生成图像的副本,这样就能保留原始图像
    img = test_img.copy()
    #检测人脸
    face, rect = detect_face(img)
    try:
        #预测人脸
        label = face_recognizer.predict(face)
        print(label)
        # 在检测到的脸部周围画一个矩形
        draw_rectangle(img, rect)
        if label[1]<70:
            # 获取由人脸识别器返回的相应标签的名称
            label_text = Names[label[0]-1]
            # 标出预测的名字
            draw_text(img, label_text,  rect[0], rect[1] - 15, "WHITE")
        else:
            # 未识别,wrong people
            draw_text(img, "Stranger",  rect[0], rect[1] - 5, "RED")
    except Exception as err:
        print(err)
    #print(label)   
    #返回预测的图像
    return img

while 1里的检测改为

try:
    predicted_img = predict(frame)
except: # 未能识别到人脸
    print("no face")

例子里的代码每次训练都是创建一个新模型, 覆盖掉原来的模型, 程序就结束了, 所以举例的代码得到的模型只能分辨到一张人脸. 如果要识别多个人脸, 可以运行gui控件, 根据不同操作持续添加人脸数据, 或者每次都把不同人的图片存下来, 训练时统一调用训练.

请添加图片描述

口罩检测

类似的原理可以训练出检测是否佩戴口罩的模型

mask_cascade = cv2.CascadeClassifier('no_mask_detect_cascade.xml')
# 检测是否佩戴口罩
def detect_facemask(img):
    # 将测试图像转换为灰度图像,因为opencv人脸检测器需要灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 检测多尺度图像,返回值是一张脸部区域信息的列表(x,y,宽,高)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2,
        minNeighbors=5,minSize=(50, 50)) #人脸的最小范围,如果比20*20像素小忽略
    # 如果未检测到面部,则返回原始图像
    if (len(faces) == 0):
        return None, None, None
    # 目前假设只有一张脸,xy为左上角坐标,wh为矩形的宽高
    (x, y, w, h) = faces[0]
    no_mask = mask_cascade.detectMultiScale(gray[y:y + w, x:x + h],
        scaleFactor  = 1.01, minNeighbors = 4)
    # 返回图像的正面部分
    return gray[y:y + w, x:x + h], faces[0], no_mask

红外测温

如果用的是树莓派, 可以比较方便地用杜邦线接入mlx90614等红外测温模块.
在这里插入图片描述

模块用smbus协议通讯, 附件中有现成的接口mlx90614.py, 直接调用即可.

上面这些东西组合起来, 其实是2020年电子设计大赛的赛题

在这里插入图片描述

参考

关注公众号小电动车

请添加图片描述

回复人脸识别获取代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV人脸识别 的相关文章

  • 如何加载4通道的png图像?

    我一直在尝试加载带有透明通道 RGB 和 Alph 的 png 文件 但没有成功 看来 openCV 从图像中剥离了第四个通道 即使我必须修改 OpenCV 源代码并重建它 是否有任何方法可以加载包含 alpha 通道在内的完整 4 个通道
  • 正方形检测找不到正方形

    我正在使用该程序方块 c在 OpenCV 库的示例中可用 它适用于每个图像 但我真的不明白为什么它不能识别该图像中绘制的正方形 After CANNY After DILATE The RESULT图像 红色 http img267 ima
  • OpenCV 的 findHomography 产生无意义的结果

    我正在制作一个程序 使用 OpenCV 2 43 中的 ORB 跟踪功能 我遵循并使用了建议从这里 https stackoverflow com questions 9919505 how can i extract fast featu
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • Python opencv排序轮廓[重复]

    这个问题在这里已经有答案了 我正在关注这个问题 如何从左到右 从上到下对轮廓进行排序 https stackoverflow com questions 38654302 how can i sort contours from left
  • 使用 OpenCV 查找重叠/复杂的圆

    我想计算红圈半径 图2 我在使用 OpenCV 的 HoughCircles 找到这些圆圈时遇到了麻烦 如图所示 2 我只能使用 HoughCircles 找到中心以黑色显示的小圆圈 original fig 2 由于我知道红色圆圈的中心
  • Python 函数前的星号[重复]

    这个问题在这里已经有答案了 我正在关注这个教程 http www pyimagesearch com 2015 04 20 sorting contours using python and opencv comment 405768 ht
  • 在opencv中保存帧而不压缩

    我正在尝试使用写 OpenCV 函数 我想保存帧 TIFF扩大 我遇到的问题是保存的图像被压缩 所以我无法使用它们 知道如何摆脱这种压缩吗 提前致谢 不要介意西奇说的话 TIFF 标志通过 LZW 压缩硬编码在 opencv 二进制文件中
  • 使用 openCV 和 python 检测物体

    我正在尝试使用 OpenCV 和 Python 检测下图中的白点 我尝试使用函数 cv2 HoughCircles 但没有成功 我需要使用不同的方法吗 这是我的代码 import cv2 cv import numpy as np impo
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful
  • Opencv matchTemplate 和 np.where():仅保留唯一值

    继带有马里奥硬币的 opencv 教程 https opencv python tutroals readthedocs io en latest py tutorials py imgproc py template matching p
  • 提高 pytesseract 从图像中正确识别文本的能力

    我正在尝试使用读取验证码pytesseract模块 大多数时候它都能提供准确的文本 但并非总是如此 这是读取图像 操作图像以及从图像中提取文本的代码 import cv2 import numpy as np import pytesser
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • Python:opencv warpPerspective 既不接受 2 个也不接受 3 个参数

    我发现单应矩阵如下特征匹配 单应性教程 https docs opencv org 3 4 1 d1 de0 tutorial py feature homography html using M mask cv2 findHomograp
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 如何计算图像中的 RGB 或 HSV 通道组合?

    我使用 python opencv 加载形状为 30 100 3 的图像 现在想要按颜色计算所有颜色的频率 我不是指单个通道 而是指通道组合 含义 3 个频道列表 例如 255 0 0 表示红色 255 255 0 表示黄色 100 100
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • OpenCV 错误:使用 COLOR_BGR2GRAY 函数时断言失败

    我在使用 opencv 时遇到了一个奇怪的问题 我在 jupyter 笔记本中工作时没有任何问题 但在尝试运行此 Sublime 时却出现问题 错误是 OpenCV错误 cvtColor中断言失败 深度 CV 8U 深度 CV 16U 深度
  • 我可以使用 openCV 比较两张不同图像上的两张脸吗?

    我对 openCV 很陌生 我看到它可以计算出脸部并返回一个矩形来指示脸部 我想知道 openCV 是否可以访问两张包含一张脸的图像 并且我希望 openCV 返回这两个人是否相同的可能性 Thanks OpenCV 不提供完整的人脸识别引
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2

随机推荐

  • 【工具】VirtualBox虚拟机安装Windows操作系统

    前面的文章中介绍了VirtualBox虚拟机的安装 VirtualBox虚拟机中如何安装操作系统 是本文的重点 下面将进行详细介绍 使用VirtualBox虚拟机安装Windows操作系统有很多好处 主要包括以下几点 节省资源 通过虚拟化技
  • Spring Boot将声明日志步骤抽离出来做一个复用类

    上文Spring Boot日志基础使用 设置日志级别中我们写了个比较基本的日志操作 但也随之产生了一个问题 我们这行代码 能不能不写 具体说 我们不希望每个需要日志的类都声明一个在这 看着太不美观了 我们最简单方法当然是继承 我们找个目录创
  • 论python自动化测试(3)- 自动化框架及工具

    python自动化测试 3 自动化框架及工具 1 概述 手续的关于测试的方法论 都是建立在之前的文章里面提到的观点 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍
  • Linux Common Comment in Practices

    Linux中的命令的确是非常多 但是我们只需要掌握我们最常用的命令就可以了 当然你也可以在使用时去找一下man 他会帮你解决不少的问题 然而每个人玩Linux的目的都不同 所以他们常用的命令也就差异非常大 因为不想在使用是总是东查西找 所以
  • 网络安全等级保护合规一览

    公众号关注 WeiyiGeek 将我设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 0x00 前言 0x01 等保2 0基本要求 0x02 等保定级 1 定级流程 2 定级比较 3 定级通用要求 0x03 合规流程 0
  • 自动化平台搭建之定制log系统

    log系统概述 我们搭建的自动化平台 无论是Web和Android 都少不了一个重要的模块 那就是log输出模块 该模块记录了整个自动化平台运行期间的日志记录 完成自动化测试后 我们可以通过日志追踪和分析fail项 根据自动化平台log输出
  • Intellj IDEA基础设置

    基础配置 view toolbar 配置jdk configure project defaults project structure new jdk 路径 添加插件 configure plugins 配置jvm内存 configure
  • Bootstrap的CSS类积累学习

    要看哪个的介绍 搜索关键词就行了 001 container 这是Bootstrap中定义的一个CSS类 它用于创建一个具有固定宽度的容器 比如 container类将 div 元素包装成一个固定宽度的容器 详情见 https blog c
  • STL vector的N种构造方式

    1 使用默认无参的构造函数进行构造 vector
  • 设计一算法,将已建立的单链表进行逆置

    单链表逆序有很多种方法 可是好多种方法都是逆序后就不能再使用之前定义的函数了 因为你的头结点变动了 不再是之前所定义的first或是head了 所以之前的方法都要重写 后来我终于想到了种很好的方法了 为了不重开空间 我们可以就在原来的那个单
  • leetcode:37. 解数独

    题目链接 37 解数独 文章目录 题目描述 思路 代码 题目描述 编写一个程序 通过填充空格来解决数独问题 数独的解法需 遵循如下规则 数字 1 9 在每一行只能出现一次 数字 1 9 在每一列只能出现一次 数字 1 9 在每一个以粗实线分
  • git lfs搭建 —— ubuntu20.04

    一直使用git lab 临时需要放一些pdf文档但有不需要git来版本管理 个人感觉比较占用资源 百度了一通 决定用git lfs 同时发现git lab有内置lfs使用说明 结合网上查得 总结如下 也是个人操作留档 本人使用vscode
  • 学生的姓名 ,年龄,性别,班级及爱好IDEA代码

    学生的姓名 年龄 性别 班级及爱好AIDE代码 package zy 学生类 class Person 属性 姓名 年龄 性别 班级 爱好 String name 姓名 int age 年龄 String sex 性别 int classN
  • 【数据结构】LoopQueue 循环队列

    数据结构源码 接口 public interface Queue
  • yarn安装依赖包报错 error An unexpected error occurred: “https://registry.npm.taobao.orgnpm/element-ui: get

    yarn安装依赖包报错 error An unexpected error occurred https registry npm taobao orgnpm element ui getaddrinfo ENOTFOUND registr
  • NAT(网络地址转换协议)

    目录 NAT 网络地址转换协议 作用 NAT转换内部地址范围 主要应用方向 NAT的优点 实验 1 静态NAT 一个内网地址对一个公网地址 2 动态NAT PAT 多个内网地址对多个公网地址 3 Easy ip 多个内网地址对一个接口 4
  • shell脚本实战:linux系统初始化和mysql8.0编译安装

    linux系统初始化脚本 bin bash version v1 author xingdian cat lt lt eof a 关闭防火墙 b 关闭selinux c 网络连通性检测 d 配置yum仓库 q 退出 eof read p 请
  • STM32 USB声卡录音(USB Microphone),基于CubeMX修改

    目录 说明 CubeMX配置 Pinout Clock Configuration Configuration 工程设置 代码工程修改 修改USB设备描述符 修改数据传输配置 声卡测试 说明 CubeMX生成的USB Audio Devic
  • Openwrt下安装Python3.5运行出现异常:Fatal Python error: Py_Initialize: Unable to get the locale encoding

    环境说明 Openwrt Python 3 5 依赖的库 libbz2 expat libopenssl libpthread zlib libffi libcrypto libncurses libpanel 使用说明 之前已经安装过py
  • OpenCV人脸识别

    OpenCV人脸识别与口罩检测 下载文件 人脸检测 人脸检测的检测方法主要有两类 基于知识 根据眼睛 眉毛 嘴巴 鼻子等器官特征及相互几何位置关系来检测 和基于统计 将人脸看作一个二维像素矩阵 通过大量人脸图像样本构造人脸模式空间 由相似度