Python读取TXT文档中的图片URL并执行数据增强

周末不加班
周末不加班
发布时间:2026-10-11| 3人浏览过
原创

本文详细说明如何通过Python脚本读取包含图片URL的TXT文本,并提供三种实现路径:轻量级URL扩展、基于Pillow的基础几何与像素变换,以及调用imgaug的高级批量增强流程。内含完整可运行代码、依赖配置步骤、输出目录校验方法及合规提示,适用于计算机视觉模型训练前的样本扩充任务。

核心目标与运行环境

当本地存在存放大量图片访问链接的TXT文件(如face.txt)时,直接将其作为训练集往往会导致数据量不足。本文以Python 3.x为底座,演示如何解析TXT内的URL,下载对应图片,并利用图像处理库实施数据增强,最终生成符合模型输入要求的新样本。建议提前配置好requests、Pillow与imgaug的运行环境。

方法一:基于URL字符串的简单扩展(仅适用于链接管理)

若仅需扩大URL列表数量而不涉及实际图片处理,可通过追加随机查询参数模拟新地址。该方法并不改变图像像素,无法提升模型泛化能力,但可用于测试管道或生成占位索引。

import os
import random
import string

# 读取TXT文件中的URL
with open('face.txt', 'r', encoding='utf-8') as f:
    urls = f.read().splitlines()

def generate_extra_urls(base_urls, num_extra):
    extra_urls = []
    for _ in range(num_extra):
        base_url = random.choice(base_urls)
        random_str = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10))
        # 追加随机查询串模拟新链接
        extra_url = f"{base_url}?extra={random_str}"
        extra_urls.append(extra_url)
    return extra_urls

# 合并原始与新生成的200条链接
all_urls = urls + generate_extra_urls(urls, 200)

# 写入结果文件
os.makedirs(os.path.dirname('all_faces.txt') or '.', exist_ok=True)
with open('all_faces.txt', 'w', encoding='utf-8') as f:
    f.write('\n'.join(all_urls))
print("链接扩展完成,已保存至 all_faces.txt")

方法二:使用Pillow进行基础图像增强

第1步:安装必要依赖

执行pip install requests Pillow numpy获取基础网络请求、图像处理与数值计算模块。

第2步:配置下载与增强逻辑

风险提示:本步骤将在磁盘创建目录并写入新图片。若原始路径存在同名文件,新图像将直接覆盖。建议在首次运行前备份原始TXT与本地镜像数据。

import os
import requests
from PIL import Image, ImageOps, ImageEnhance
import numpy as np

DOWNLOAD_DIR = 'downloaded_images'
ENHANCED_DIR = 'enhanced_pil'

for d in (DOWNLOAD_DIR, ENHANCED_DIR):
    os.makedirs(d, exist_ok=True)

def download_image(url, save_path):
    try:
        with requests.get(url, stream=True, timeout=10) as resp:
            resp.raise_for_status()
            with open(save_path, 'wb') as f:
                for chunk in resp.iter_content(chunk_size=8192):
                    f.write(chunk)
    except Exception as e:
        print(f"下载失败 {url}: {e}")

def enhance_with_pillow(image_path, output_dir):
    img = Image.open(image_path).convert('RGB')
    # 几何变换:水平翻转
    if np.random.rand() > 0.5:
        img = ImageOps.mirror(img)
    # 像素变换:对比度调整
    enhancer = ImageEnhance.Contrast(img)
    img = enhancer.enhance(np.random.uniform(0.8, 1.5))
    
    fname = os.path.basename(image_path)
    out_path = os.path.join(output_dir, f'pil_{fname}')
    img.save(out_path)
    return out_path

with open('face.txt', 'r', encoding='utf-8') as f:
    urls = f.read().splitlines()

for idx, url in enumerate(urls):
    img_name = f'face_{idx}.jpg'
    dl_path = os.path.join(DOWNLOAD_DIR, img_name)
    download_image(url, dl_path)
    enhance_with_pillow(dl_path, ENHANCED_DIR)

print(f"Pillow增强完成,共处理 {len(urls)} 张图片")

第3步:运行脚本并检查输出

终端返回成功统计后,进入enhanced_pil目录核对文件数量与命名规则。正常状态下,输出文件夹内的文件数应与原TXT行数一致,无破损图标或空字节文件。

方法三:调用imgaug实现高级批量增强

第1步:定义增强变换序列

安装pip install imgaug后,通过iaa.Sequential构建复合管线。支持随机控制概率、角度范围、平移比例与噪声强度,确保每次运行时输出多样化结果。

第2步:自动化下载与多版本生成

import os
import requests
from PIL import Image
import imgaug as ia
from imgaug import augmenters as iaa
import numpy as np

AUGMENTED_DIR = 'augmented_imgaug'
os.makedirs(AUGMENTED_DIR, exist_ok=True)

def create_augment_seq():
    return iaa.Sequential([
        iaa.Fliplr(0.5),
        iaa.Affine(
            rotate=(-15, 15),
            scale=(0.85, 1.15),
            translate_percent={"x": (-0.1, 0.1), "y": (-0.1, 0.1)},
            mode='constant', cval=(0, 255)
        ),
        iaa.AdditiveGaussianNoise(scale=0.02*255),
        iaa.Multiply((0.9, 1.1)),
    ], random_order=True)

seq = create_augment_seq()

with open('face.txt', 'r', encoding='utf-8') as f:
    urls = f.read().splitlines()

for idx, url in enumerate(urls):
    tmp_path = f'download_tmp_{idx}.jpg'
    with requests.get(url, stream=True, timeout=10) as r:
        r.raise_for_status()
        with open(tmp_path, 'wb') as tf:
            for chunk in r.iter_content(8192): tf.write(chunk)
    
    pil_img = Image.open(tmp_path).convert('RGB')
    arr = np.array(pil_img)
    
    # 生成3个增强变体
    aug_list = seq(images=[arr, arr, arr])
    for v_idx, aug_arr in enumerate(aug_list):
        out_path = os.path.join(AUGMENTED_DIR, f'imgaug_v{v_idx}_{idx}.jpg')
        Image.fromarray(aug_arr).save(out_path)
    os.remove(tmp_path)

print("imgaug批量增强完成")

第3步:验证增强结果目录

脚本结束后,目标文件夹会生成多倍于原始数量的子图像。可使用图片浏览器批量抽查,确认旋转未导致严重白边溢出、对比度调整未丢失面部细节、噪声添加未引入大面积色块即可判定流水线正常。

异常排查与合规提示

  • 下载超时或403错误:部分图床启用Referer校验或防盗链。可在requests.get()中添加headers={'User-Agent': 'Mozilla/5.0...'}绕过检测。
  • PIL数组维度冲突:若出现形状不匹配报错,请确保在执行np.clip前已将PIL.Image转换为numpy.ndarray。
  • 版权与隐私:自动化爬取与修改受版权保护的图片可能引发法律风险。商业部署前务必核验图片来源授权,或替换为公开数据集(如CelebA、MS-Celeb-1M)进行替代验证。

以上就是Python读取含url图片链接的txt文档并执行数据增强的详细内容,更多关于Python图像处理与样本扩充的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。