使用opencv批量人脸识别+裁图+设置分辨率(Python代码分享)

这篇具有很好参考价值的文章主要介绍了使用opencv批量人脸识别+裁图+设置分辨率(Python代码分享)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近做LoRA模型训练时需要对一批图片进行人脸识别,并进行裁剪,然后设置特定的分辨率。
首先要导入cv库import cv2
如果没有opencv库的话要用pip先安装一个pip install opencv-python
1、识别出图片面部,并截取原图片靠近面部的最大正方形部位,同时将截取的图片分辨率改为512*512

import numpy as np
import cv2
import os

def crop_face(input_folder_path, output_folder_path):
    # 加载面部识别模型
    face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    images = os.listdir(input_folder_path)
    for image in images:
        image_path = os.path.join(input_folder_path, image)
        img = cv2.imread(image_path)
        height, width, channels = img.shape
        # 将图像转换为灰度图像
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 检测面部
        faces = face_detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))

        
        # 无法识别面部的图片
        if len(faces)==0:
            print(f"No face found in {image_path}")
            return
    
        if len(faces) > 0:
            # 取第一个脸部位置,这里假设一张图片只有一个脸部特征
            # x、y 为人脸的像素位置,w、h 为人脸的宽度和高度。
            x, y, w, h = faces[0]
            # 确定最大正方形的位置
            # 原图片竖方向长,截取正方形长度为原图横方向长,square_size截取正方形的长度
            if height>width:
                square_size = width
                x1=0
                x2=square_size
                # 原图面部靠上
                if y<square_size/2:
                    y1=0
                    y2 =square_size
                # 原图面部靠下
                else:
                    y1=int(square_size/2)
                    y2 =height
           # 原图片是横方向长,截取正方形长度为原图竖方向长度      
            else:
                square_size =  height
                y1=0
                y2=square_size
                # 原图面部靠右
                if x<square_size/2:
                    x1=0
                    x2 =square_size
                # 原图面部靠左
                else:
                    x1=int(square_size/2)
                    x2 =square_size
                
                
            # 根据最大正方形位置裁剪图片并保存
            cropped_img = img[y1:y2, x1:x2] 
            # 调整图像大小为512x512
            resized = cv2.resize(cropped_img, (512, 512), interpolation=cv2.INTER_AREA)
            output_path = os.path.join(output_folder_path,image)
            cv2.imwrite(output_path, resized)


if __name__ == "__main__":
    input_folder = r"输入图片所在文件夹路径" 
    output_folder = r"输出图片所在文件夹路径"  
    # 创建输出目录
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    crop_face(input_folder, output_folder)
    print('Done!')

opencv实现多人脸识别,自动化办公,opencv,python,计算机视觉
opencv实现多人脸识别,自动化办公,opencv,python,计算机视觉

可以看到a1(7)这张图片,模型无法识别,大家做的时候根据实际情况,调整这个位置的参数,以提高识别的准确度。

faces = face_detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))

scaleFactor:表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%。可以根据图像的像素值来设置此参数,像素大缩小的速度就可以快一点,通常在1~1.5之间。

minNeighbors:表示构成检测目标的相邻矩形的最小个数(默认为3个)。是在人脸附近进行指定次数的检测,获取最准确的范围,设置越高,误检率越低,但是对于迷糊图片,设置越高,越不易检测出来,要适当降低。

2、以面部为中心,截取的最大正方形

import numpy as np
import cv2
import os


def crop_face(input_folder_path, output_folder_path):
    face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    images = os.listdir(input_folder_path)
    for image in images:
        image_path = os.path.join(input_folder_path, image)
        img = cv2.imread(image_path)
        height, width, channels = img.shape
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = face_detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))
        
        # 无法识别面部的图片
        if len(faces)==0:
            print(f"No face found in {image_path}")
            return
        
        if len(faces) > 0:
            # 取第一个脸部位置,这里假设一张图片只有一个脸部特征
            x, y, w, h = faces[0]
            # 确定最大正方形的位置
            square_size=min(width-x,x,y,height-y)
           
                
            # 根据最大正方形位置裁剪图片并保存
            cropped_img = img[y-square_size:y+h+square_size, x-square_size:x+w+square_size] #img[y1:y2, x1:x2]
            # 调整图像大小为512x512
            resized = cv2.resize(cropped_img, (512, 512), interpolation=cv2.INTER_AREA)
            output_path = os.path.join(output_folder_path, image)
            cv2.imwrite(output_path, resized)


if __name__ == "__main__":
    input_folder = r"输入图片所在文件夹路径"  
    output_folder = r"输出图片所在文件夹路径" 
    # 创建输出目录
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    crop_face(input_folder, output_folder)
    print('Done!')

opencv实现多人脸识别,自动化办公,opencv,python,计算机视觉
3、只截取人脸部分

import numpy as np
import cv2
import os


def crop_face(input_folder_path, output_folder_path):
    face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    images = os.listdir(input_folder_path)
    for image in images:
        image_path = os.path.join(input_folder_path, image)
        img = cv2.imread(image_path)
        height, width, channels = img.shape
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = face_detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=7, minSize=(30, 30))
        
        # 无法识别面部的图片
        if len(faces)==0:
            print(f"No face found in {image_path}")
            return
        
        for (x,y,w,h) in faces:
            cropped_img = img[y:y+h, x:x+w]  
            # 调整图像大小为512x512
            resized = cv2.resize(cropped_img, (512, 512), interpolation=cv2.INTER_AREA)
            # 将图像保存到输出目录
            output_path = os.path.join(output_folder_path, image)
            cv2.imwrite(output_path, resized)
            
if __name__ == "__main__":
    input_folder = r"输入图片所在文件夹路径"  
    output_folder = r"输出图片所在文件夹路径"  
    # 创建输出目录
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    crop_face(input_folder, output_folder)
    print('Done!')

opencv实现多人脸识别,自动化办公,opencv,python,计算机视觉文章来源地址https://www.toymoban.com/news/detail-519302.html

到了这里,关于使用opencv批量人脸识别+裁图+设置分辨率(Python代码分享)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FFmpeg】ffmpeg 命令行参数 ⑧ ( 使用 ffmpeg 转换封装格式 | 音视频编解码器参数设置 | 视频 帧率 / 码率 / 分辨率 设置 | 音频 码率 / 采样率 设置 )

    音视频 文件 从 采样 - 处理 - 得到原始数据帧队列 - 音视频编码 - 音视频包队列 - 格式封装 的过程如下 : 封装格式 参考 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装

    2024年04月17日
    浏览(61)
  • windows多显示器设置分辨率,自定义分辨率

    方法1:系统自带分辨率 1、单机设置 2、单击屏幕 3、根据显示效果选择显示方式,我这里设置为扩展显示器,可以根据显示器排列方式,拖动上面的两个显示器框来更改显示效果,例如我的副显示器在右边就把图中的2显示器拖到右边 4、根据需要设置哪个显示器来设置分辨率

    2024年02月06日
    浏览(42)
  • Arch Linux高分辨率屏幕设置分辨率及dpi缩放

    由于笔记本原生屏幕分辨率太渣,于是购入一块2440x1400、14英寸副屏。窗口管理器为dwm,使用 startx 命令进入环境 注 :此文不会改变tty的设置,仅设置xorg下某用户的个人设置 关闭笔记本屏幕,只使用副屏 副屏分辨率设置为最高,且屏幕缩放设置为合适大小 高分辨率小屏幕导致

    2024年02月05日
    浏览(45)
  • unity怎么设置分辨率

    要设置Unity中的游戏分辨率(最终发布),有以下两种方法: 其中,Screen.SetResolution()函数用于设置游戏分辨率,参数含义分别为宽度、高度和是否全屏。需要注意的是,在不同的设备上使用固定的分辨率可能会导致显示效果失真或变形,因此最好根据具体设备和游戏的需求进

    2024年02月12日
    浏览(32)
  • OpenCV——多分辨率LBP的计算方法

    OpenCV——多分辨率LBP的计算方法由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。   基本LBP算子虽然在早期的实验中取得了一系列成果,但是应用于不同领域的具体问题时,该算子的处理结果并不能达到预期的效果。因

    2024年01月23日
    浏览(78)
  • 【linux】opencv修改摄像头分辨率

    发现linux系统下调用opencv修改摄像头分辨率,一直修改不成功。 正常在window下面读取摄像头数据是如下代码: 但是在Ubuntu下没办法修改摄像头分辨率,一直都是640x360。 怀疑是摄像头的问题,使用linux下的 v4l2 查看usb摄像头支持的分辨率 1. 查看目前有的摄像头设备 0代表实际

    2024年02月14日
    浏览(39)
  • UE4 双屏分辨率设置

    背景: 做了一个UI 应用,需要在双屏上进行显示。 分辨率如下:3840*1080; 各种折腾,其实很简单: 主要是在全屏模式的时候 一开始没有选对,双屏总是不稳定。  全屏模式改成:Windows 之后 ,双屏的问题就解决了。 没有其他帖子说的那么麻烦 还得改ini 配置文件之类的。

    2024年02月04日
    浏览(31)
  • AutoX.js - openCV多分辨率找图

    AutoXjs 中有两个找图相关的方法 findImage 和 matchTemplate,之前一直没发现什么问题,但最近在一次测试找图时,明明大图和模板图的轮廓都清晰,却怎么也找不到图,降低阈值参数后找到的结果乱七八糟,我仔细对比图像后发现原因,竟是大图相较于模板抠图时的画面等比缩小

    2024年02月06日
    浏览(33)
  • unity设置分辨率的两种方法

    unity设置分辨率的两种方法 使用Unity编辑器中的分辨率设置工具。打开Unity编辑器,选择菜单栏中的“Edit” - “Project Settings” - “Player”,在“Resolution and Presentation”选项卡中选择想要的分辨率,然后点击“Apply”按钮即可。 使用脚本设置分辨率。在Unity中创建一个脚本,使

    2024年02月11日
    浏览(69)
  • 反射UnityEditor.GameView设置GamePlayMode分辨率

    现在很有游戏考虑横屏适配、竖屏适配、阿拉伯语适配(横竖屏)导致拼界面变得越来越繁琐。 有很多时候需要记录各个控件的状态。 为了减少操作,特意制作了这个工具,点击用x配置可以自动切换到 宽高分辨率,如果当前没有则会自动添加到编辑器中。这里特别感谢开源

    2024年02月02日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包