人脸识别项目实战1:数据批量化读取

#任务1:构建数据集,通过自动化手段批量处理文件数据
#工作流程:
#(1)运行人脸检测代码自动截取人脸,制作人脸数据集
#(2)运行图像批量读取并重命名代码将文件名改为自己的名字拼音,编号从001开始,如liming001。

代码:

##工作流程(1):运行人脸检测代码自动截取人脸,制作人脸数据集
import cv2
import os

# 打开摄像头
cap = cv2.VideoCapture(0)

# 检查摄像头是否成功打开
if not cap.isOpened():
    print("无法打开摄像头")
    exit()

# 设置保存图像的文件夹
output_dir = 'face_images'
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 人脸检测器(这里使用OpenCV自带的Cascade分类器)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 采集图像的计数器
image_counter = 0

try:
    while True:
        # 读取一帧图像
        ret, frame = cap.read()

        # 如果读取成功
        if ret:
            # 将图像转换为灰度图,因为人脸检测通常在灰度图上进行
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

            # 检测人脸
            faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

            # 遍历检测到的人脸
            for (x, y, w, h) in faces:
                # 在原图上绘制矩形框
                cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

                # 截取人脸区域并保存为图像文件
                face_img = frame[y:y+h, x:x+w]
                image_filename = os.path.join(output_dir, f'face_{image_counter:04d}.jpg')
                cv2.imwrite(image_filename, face_img)

                # 更新计数器
                image_counter += 1

                # 如果只需要采集一定数量的人脸图像,可以在这里设置条件退出循环
                # if image_counter >= 10:
                #     break

            # 显示图像
            cv2.imshow('Camera', frame)

            # 按下'q'键退出循环
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            print("无法读取摄像头图像")
            break
finally:
    # 释放摄像头并关闭所有窗口
    cap.release()
    cv2.destroyAllWindows()
##工作流程(2):运行图像批量读取并重命名代码将文件名改为自己的名字拼音,编号从001开始,如lifei001
import cv2#openCV包,用于机器视觉
import os#os包是标准库中用于‌操作系统交互的核心工具‌,如文件与目录管理、系统信息与进程管理
import keyboard#监听键盘输入、模拟按键、记录和回放宏

index=1
folder_path='face_images'#改成你自己的路径
for filename in sorted(os.listdir(folder_path)):#按文件名排序,按顺序获取文件名;sorted是排序函数
        if filename.lower().endswith('.jpg'):#.lower()	将文件名‌全部转为小写.endswith('.jpg')	检查处理后的字符串‌是否以指定后缀结尾
            file_path = os.path.join(folder_path, filename)#‌os.path.join:智能拼接多个路径片段‌,自动适配操作系统的路径分隔符
            # 读取图像(BGR格式)
            #img = cv2.imread(file_path)#读取对应图像
            #cv2.imshow(filename, img)#显示图像
            #key = cv2.waitKey(500) # 等待指定时间500ms或按键
            #file_ext = os.path.splitext(filename).lower()  # 保留原始扩展名
            new_name = f"{"meinv_"}{index:0{3}d}{'.jpg'}"#f"表示字符串变量组,{字符串变量},index:0{3}d表示序号有3位
            index=index+1
            old_path = os.path.join(folder_path, filename)
            new_path = os.path.join(folder_path, new_name)
            # 避免覆盖现有文件
            if os.path.exists(new_path):
               print(f"警告:跳过 {filename},目标文件已存在")
               continue
        
            os.rename(old_path, new_path)
            print(f"已重命名:{filename} -> {new_name}")

            cv2.destroyAllWindows()#关闭所有弹窗
            if keyboard.is_pressed('q'):
               print("检测到q键,程序退出")
               break

注意装载导入包:

(1)pip install keyboard

(2)pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值