Python读取TXT文档中的图片URL并执行数据增强
本文详细说明如何通过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图像处理与样本扩充的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













