Python爬虫数据增强:用MogFace-large自动筛选含人脸的网络图片

发布时间:2026/7/7 18:13:36

Python爬虫数据增强:用MogFace-large自动筛选含人脸的网络图片 Python爬虫数据增强用MogFace-large自动筛选含人脸的网络图片最近在做一个关于人脸识别的小项目最头疼的问题不是模型训练而是找数据。网上公开的人脸数据集要么太旧要么场景单一想自己收集又费时费力。后来我琢磨出一个办法用Python爬虫从网上批量抓取图片再用一个叫MogFace-large的模型自动筛选出带人脸的图片。这么一来一个自动化的人脸数据采集流水线就搭好了效率提升了好几个档次。今天就跟大家分享一下这个完整的流程从写爬虫抓图到用模型筛图再到自动分类整理手把手教你构建一个高质量的人脸数据集。整个过程不需要你一张张去挑全自动搞定。1. 为什么需要自动化的人脸数据采集做机器学习项目尤其是人脸识别这类任务数据质量直接决定了模型的上限。你可能遇到过这些问题数据量不足公开数据集如LFW、CelebA虽然经典但数据量有限且人物、场景多样性不够模型容易过拟合。标注成本高手动从海量网络图片中筛选出含人脸的图片并标注人脸位置是极其枯燥且耗时的工作。数据质量参差不齐爬虫抓取的图片什么都有风景、物品、文字截图等等真正含有人脸且清晰的图片可能只占一小部分。缺乏特定场景数据如果你的应用场景比较特殊比如特定光照、角度、遮挡很难找到现成的匹配数据。解决这些痛点的思路很直接自动化。我们用爬虫解决“数据来源”问题用预训练的人脸检测模型解决“数据筛选”问题。MogFace-large就是这样一个强大的模型它在复杂场景下如遮挡、模糊、小脸的检测能力非常出色能帮我们精准地过滤出有价值的图片。2. 搭建自动化数据流水线整个流程可以分为三个核心步骤像一条流水线一样原始图片从一端进去分类好的人脸图片从另一端出来。2.1 第一步用Python爬虫获取原始图片首先我们需要一个“原料采集器”。这里以使用requests和BeautifulSoup从某个图片分享网站请务必遵守网站的robots.txt协议和使用条款批量下载图片为例。import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin import time def download_images_from_url(base_url, save_dir, max_images100): 从指定网页爬取图片链接并下载 :param base_url: 目标网页URL :param save_dir: 图片保存目录 :param max_images: 最大下载数量 if not os.path.exists(save_dir): os.makedirs(save_dir) headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } try: response requests.get(base_url, headersheaders, timeout10) response.raise_for_status() soup BeautifulSoup(response.content, html.parser) img_tags soup.find_all(img) downloaded 0 for img in img_tags: if downloaded max_images: break img_url img.get(src) if not img_url: continue # 处理相对路径 img_url urljoin(base_url, img_url) # 简单过滤确保是图片链接 if any(img_url.lower().endswith(ext) for ext in [.jpg, .jpeg, .png, .webp]): try: img_data requests.get(img_url, headersheaders, timeout10).content # 生成唯一文件名 file_name fraw_{downloaded:04d}{os.path.splitext(img_url)[1]} file_path os.path.join(save_dir, file_name) with open(file_path, wb) as f: f.write(img_data) print(f已下载: {file_name}) downloaded 1 time.sleep(0.5) # 礼貌爬取避免给服务器造成压力 except Exception as e: print(f下载失败 {img_url}: {e}) continue print(f下载完成共获取 {downloaded} 张图片。) except Exception as e: print(f访问网页失败: {e}) # 使用示例 if __name__ __main__: target_url https://example.com/photos # 请替换为实际目标URL output_dir ./raw_images download_images_from_url(target_url, output_dir, max_images50)关键点说明遵守规则在实际操作前务必检查目标网站的robots.txt文件并尊重其爬虫政策。设置间隔time.sleep很重要避免请求过于频繁。异常处理网络请求充满不确定性良好的异常处理能保证程序稳定运行。结果运行后你会得到一个装满各种网络图片的raw_images文件夹。2.2 第二步用MogFace-large模型筛选人脸原料有了现在需要“质检员”。我们将使用MogFace-large这个专门的人脸检测模型来过滤图片。这里我们借助insightface这个强大的开源库它集成了包括MogFace在内的多种模型。import cv2 import os from insightface.app import FaceAnalysis def filter_images_with_faces(raw_dir, output_dir, min_face_size20): 使用MogFace-large检测图片中的人脸并保存含人脸的图片 :param raw_dir: 原始图片目录 :param output_dir: 含人脸图片的输出目录 :param min_face_size: 最小人脸尺寸像素用于过滤过小人脸 if not os.path.exists(output_dir): os.makedirs(output_dir) # 初始化FaceAnalysis应用指定使用MogFace-large模型 # 注意首次运行会自动从云端下载模型文件 app FaceAnalysis(namebuffalo_l, providers[CUDAExecutionProvider, CPUExecutionProvider]) # 可根据环境选择GPU或CPU app.prepare(ctx_id0, det_size(640, 640)) image_files [f for f in os.listdir(raw_dir) if f.lower().endswith((.png, .jpg, .jpeg))] saved_count 0 for img_file in image_files: img_path os.path.join(raw_dir, img_file) img cv2.imread(img_path) if img is None: continue # 进行人脸检测 faces app.get(img) # 筛选至少包含一张脸且人脸尺寸大于阈值 valid_faces [] for face in faces: bbox face.bbox.astype(int) # 人脸框坐标 [x1, y1, x2, y2] face_width bbox[2] - bbox[0] face_height bbox[3] - bbox[1] if face_width min_face_size and face_height min_face_size: valid_faces.append(face) if valid_faces: # 保存含人脸的图片 output_path os.path.join(output_dir, fface_{saved_count:04d}.jpg) cv2.imwrite(output_path, img) saved_count 1 print(f检测到人脸并保存: {img_file} - {os.path.basename(output_path)} (检测到 {len(valid_faces)} 张脸)) else: print(f未检测到合格人脸: {img_file}) print(f筛选完成。原始图片 {len(image_files)} 张含人脸图片 {saved_count} 张。) # 使用示例 if __name__ __main__: raw_image_dir ./raw_images face_image_dir ./images_with_faces filter_images_with_faces(raw_image_dir, face_image_dir, min_face_size30)关键点说明模型选择buffalo_l配置包含了MogFace-large等模型在精度和速度上平衡得很好。检测阈值min_face_size参数可以过滤掉图片中过小、质量不高的人脸确保后续训练数据的有效性。丰富信息insightface检测返回的face对象不仅包含人脸框还有关键点、性别、年龄等信息如果需要可以进一步利用。2.3 第三步根据人脸属性自动分类质检合格的“产品”可以进一步分门别类。我们可以根据每张图片中检测到的人脸数量或主要人脸的大小进行分类便于不同用途如单人脸识别、多人脸关系分析。import shutil def classify_faces_by_attribute(face_dir, classify_base_dir): 根据人脸数量和人脸大小对图片进行自动分类 :param face_dir: 含人脸图片的目录 :param classify_base_dir: 分类后的根目录 app FaceAnalysis(namebuffalo_l) app.prepare(ctx_id0, det_size(640, 640)) # 定义分类子目录 dir_single os.path.join(classify_base_dir, single_face) dir_multi os.path.join(classify_base_dir, multi_face) dir_large_face os.path.join(classify_base_dir, large_face) for d in [dir_single, dir_multi, dir_large_face]: os.makedirs(d, exist_okTrue) image_files [f for f in os.listdir(face_dir) if f.lower().endswith((.png, .jpg, .jpeg))] for img_file in image_files: img_path os.path.join(face_dir, img_file) img cv2.imread(img_path) faces app.get(img) if len(faces) 1: # 单人脸图片 target_dir dir_single # 可选根据人脸大小进一步判断 bbox faces[0].bbox.astype(int) face_area (bbox[2]-bbox[0]) * (bbox[3]-bbox[1]) img_area img.shape[0] * img.shape[1] if face_area img_area * 0.25: # 如果人脸面积超过图片面积的25%视为大脸特写 target_dir dir_large_face elif len(faces) 1: # 多人脸图片 target_dir dir_multi else: continue # 理论上不会发生因为face_dir里的图片都含脸 shutil.copy(img_path, os.path.join(target_dir, img_file)) print(分类完成。图片已按属性存入对应目录。) # 使用示例 if __name__ __main__: source_face_dir ./images_with_faces classified_dir ./classified_faces classify_faces_by_attribute(source_face_dir, classified_dir)运行完毕后你的classified_faces文件夹里会有三个子文件夹single_face包含单人脸的图片适合用于训练基础的人脸验证或识别模型。multi_face包含多张人脸的图片可用于训练人脸检测或在复杂场景下的识别。large_face人脸特写图片面部细节清晰对训练高精度模型非常有价值。3. 实际应用效果与价值我用自己的项目测试了这套流程。从某个摄影社区爬取了大约1000张图片经过MogFace-large筛选后得到了约300张含清晰人脸的图片。整个过程完全自动化从开始到分类结束耗时主要在网络下载本地处理部分检测分类只用了几分钟。带来的价值是实实在在的效率飞跃将原本需要数天手动完成的工作压缩到一两个小时取决于网络和图片数量。数据质量可控通过调整min_face_size等参数可以控制入库人脸的最小质量从源头提升数据集质量。场景定制化你可以针对性地爬取特定场景的图片如室内、户外、戴眼镜、不同年龄段快速构建垂直领域的数据集。流程可复用这套脚本稍加修改就可以用于其他需要图像筛选的任务比如车辆检测、动物识别等只需要换一个检测模型即可。当然这个方法也有需要注意的地方。爬取的数据可能存在版权问题只能用于个人学习或研究不能商用。另外网络图片的噪声很大尽管MogFace-large很强但仍可能有漏检或误检在构建关键任务的数据集时最后加一道人工抽检的工序会更稳妥。4. 总结把Python爬虫和MogFace-large这样的人脸检测模型结合起来构建自动化数据流水线是一个性价比非常高的解决方案。它完美地解决了人脸识别项目初期“数据荒”的难题。你不需要是标注专家也不需要昂贵的标注工具用一些简单的代码就能启动一个数据飞轮。对于想要入门计算机视觉或者正在为某个特定项目寻找数据的朋友我强烈建议你试试这个方法。从爬取一个你感兴趣的网站开始体验一下从原始数据到分类整理的全过程。你会发现获取高质量数据并没有想象中那么难关键是要用对工具把重复劳动交给代码。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻