python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python读取含图片文档

Python读取含url图片链接的txt文档方法小结

作者:学地理的小胖砸

这篇文章主要为大家详细介绍了三种Python读取含url图片链接的txt文档方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

方法一

我本地有一个face.txt文档,里面是50条url图片链接。帮我写一段python做一下数据增强,额外再生成200张。

数据增强通常用于图像处理任务,比如通过旋转、缩放、裁剪、翻转等方式增加图像的多样性。但是,如果你只有图片的URL,并不能直接对这些URL进行图像增强。然而,我们可以采用一种间接的方式来模拟增加数据量:例如,通过下载图片并改变图片的保存位置、格式,或者模拟一些简单的变化(如添加噪声)来生成新的URL。

但请注意,这实际上并没有增加图像本身的多样性,只是改变了图像的保存方式或路径。如果你真的需要对图像本身进行数据增强,你需要先下载图像,然后使用图像处理库(如OpenCV或PIL)进行图像变换。

下面是一个简单的Python脚本,它会读取face.txt文件中的URL,并模拟生成额外的URL。请注意,这只是一个模拟过程,并没有真正下载或增强图像。

import os
import random
import string

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

# 生成额外URL的函数
def generate_extra_urls(base_urls, num_extra):
    extra_urls = []
    for _ in range(num_extra):
        base_url = random.choice(base_urls)
        # 这里我们简单地通过添加随机字符串来模拟新的URL
        # 在实际应用中,你可能需要更复杂的策略来生成有意义的URL
        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个额外的URL
extra_urls = generate_extra_urls(urls, 200)

# 将原始URL和额外生成的URL合并
all_urls = urls + extra_urls

# 将所有URL写入新的文件
with open('all_faces.txt', 'w') as f:
    for url in all_urls:
        f.write(f"{url}\n")

print("数据增强完成,所有URL已写入all_faces.txt文件。")

这个脚本首先读取face.txt文件中的URL,然后定义一个函数generate_extra_urls来生成额外的URL。这个函数通过从原始URL中随机选择一个,并在其后添加一个随机字符串来模拟新的URL。最后,所有URL(包括原始的和生成的)都被写入all_faces.txt文件。

请注意,这只是一个非常简单的示例,并且生成的URL可能在实际应用中并不具有实际意义。如果你真的需要进行图像增强,你应该考虑下载图像并使用图像处理库进行实际的图像变换。

方法二

如果你想要对图像进行实际的数据增强,而不是仅仅生成新的URL,你需要首先下载这些图像,然后使用图像处理技术来增加图像的多样性。这里是一个基本的步骤指南,以及你可以使用的Python库:

1.下载图像:

使用requests库从URL下载图像,并保存到本地文件夹。

2.图像数据增强:

使用OpenCV或PIL(Python Imaging Library,也称为Pillow)对图像进行变换。以下是一些常见的数据增强方法:

3.保存增强后的图像:

将增强后的图像保存到新的文件夹或数据库中。

4.管理增强数据:

你可能需要记录每个增强图像与其原始图像的关系,以便在训练模型时能够正确地使用它们。

下面是一个简化的Python代码示例,展示如何下载图像并进行基本的数据增强:

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

# 下载图像的函数
def download_image(url, save_path):
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        with open(save_path, 'wb') as f:
            for chunk in response:
                f.write(chunk)
    else:
        print(f"Failed to download image from {url}")

# 图像增强的函数
def enhance_image(image_path, output_dir):
    # 读取图像
    image = Image.open(image_path)
    
    # 几何变换示例:随机翻转
    if random.choice([True, False]):
        image = ImageOps.flip(image)
    
    # 像素变换示例:添加噪声
    if random.choice([True, False]):
        noise = np.random.normal(0, 10, image.size)
        noisy_image = Image.fromarray(np.clip(image + noise, 0, 255).astype(np.uint8))
        image = noisy_image
    
    # 保存增强后的图像
    output_path = os.path.join(output_dir, f"enhanced_{os.path.basename(image_path)}")
    image.save(output_path)

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

# 下载并增强图像的目录
download_dir = 'downloaded_images'
enhanced_dir = 'enhanced_images'

# 如果目录不存在,则创建它们
if not os.path.exists(download_dir):
    os.makedirs(download_dir)
if not os.path.exists(enhanced_dir):
    os.makedirs(enhanced_dir)

# 下载并增强图像
for url in urls:
    image_path = os.path.join(download_dir, f"face_{os.path.basename(url.split('/')[-1])}")
    download_image(url, image_path)
    enhance_image(image_path, enhanced_dir)

print("数据增强完成,增强后的图像已保存在", enhanced_dir)

请注意,这只是一个非常基础的示例,实际的图像增强可能需要更复杂的策略和参数调整。此外,为了获得最佳效果,你可能需要针对你的特定任务和数据集调整增强方法。

最后,务必确保在下载和使用图像时遵守相关版权和隐私法规。如果你打算在商业项目中使用这些数据,确保你有权这样做,或者考虑使用经过授权的数据集。

方法三

如果你需要一个更复杂的解决方案来进行图像数据增强,那么你可以考虑使用imgaug(Image Augmentation)库。imgaug是一个强大且灵活的图像增强库,它提供了大量的预定义增强方法,并且允许你自定义自己的增强策略。

以下是一个使用imgaug进行图像数据增强的Python代码示例:

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

# 下载图像的函数
def download_image(url, save_path):
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        with open(save_path, 'wb') as f:
            for chunk in response:
                f.write(chunk)
    else:
        print(f"Failed to download image from {url}")

# 定义数据增强序列
def create_augmentation_seq():
    seq = iaa.Sequential([
        iaa.Fliplr(0.5),  # 水平翻转,50%的概率
        iaa.Flipud(0.5),  # 垂直翻转,50%的概率
        iaa.Affine(
            rotate=(-20, 20),  # 随机旋转,范围在-20到20度之间
            scale=(0.8, 1.2),  # 随机缩放,范围在0.8到1.2倍之间
            translate_percent={"x": (-0.1, 0.1), "y": (-0.1, 0.1)},  # 随机平移,范围在-10%到10%之间
            mode="constant",  # 使用常数填充新的像素
            cval=(0, 255)    # 填充像素的值范围
        ),
        iaa.AdditiveGaussianNoise(loc=0, scale=(0.0, 0.05*255), per_channel=0.5),  # 添加高斯噪声
        iaa.ContrastNormalization((0.7, 1.3)),  # 对比度归一化
    ], random_order=True)  # 每次应用增强时的顺序是随机的
    return seq

# 主程序
def main():
    # 读取face.txt文件中的URL
    with open('face.txt', 'r') as f:
        urls = f.read().splitlines()

    # 下载图像的目录
    download_dir = 'downloaded_images'
    # 增强后图像的目录
    augmented_dir = 'augmented_images'

    # 创建目录
    if not os.path.exists(download_dir):
        os.makedirs(download_dir)
    if not os.path.exists(augmented_dir):
        os.makedirs(augmented_dir)

    # 创建数据增强序列
    seq = create_augmentation_seq()

    # 下载并增强图像
    for idx, url in enumerate(urls):
        image_path = os.path.join(download_dir, f"face_{idx}.jpg")
        download_image(url, image_path)

        # 读取图像
        image = Image.open(image_path)
        # 将PIL图像转换为numpy数组
        image_array = np.array(image)

        # 应用数据增强
        augmented_images = seq(images=[image_array])

        # 保存增强后的图像
        for i, aug_image in enumerate(augmented_images):
            aug_image_path = os.path.join(augmented_dir, f"face_{idx}_aug_{i}.jpg")
            Image.fromarray(aug_image).save(aug_image_path)

    print("数据增强完成,增强后的图像已保存在", augmented_dir)

# 运行主程序
if __name__ == "__main__":
    main()

这个脚本首先定义了一个download_image函数来下载图像,并定义了一个create_augmentation_seq函数来创建一个包含多种增强方法的序列。然后,主程序main读取URL列表,下载图像,并使用定义的增强序列对每个图像进行增强。增强后的图像被保存在一个单独的目录中。

请注意,这个脚本假设所有的URL都指向JPEG格式的图像,并且所有的图像都可以被正确下载。在实际应用中,你可能需要添加额外的错误处理和验证逻辑。此外,这个脚本使用的是随机增强,每次运行时都会得到不同的增强结果。

最后,确保你已经安装了imgaug库和它的依赖项。你可以使用pip来安装它

以上就是Python读取含url图片链接的txt文档方法小结的详细内容,更多关于Python读取含图片文档的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文