Python讀取含url圖片鏈接的txt文檔方法小結(jié)
方法一
我本地有一個face.txt文檔,里面是50條url圖片鏈接。幫我寫一段python做一下數(shù)據(jù)增強,額外再生成200張。
數(shù)據(jù)增強通常用于圖像處理任務(wù),比如通過旋轉(zhuǎn)、縮放、裁剪、翻轉(zhuǎn)等方式增加圖像的多樣性。但是,如果你只有圖片的URL,并不能直接對這些URL進行圖像增強。然而,我們可以采用一種間接的方式來模擬增加數(shù)據(jù)量:例如,通過下載圖片并改變圖片的保存位置、格式,或者模擬一些簡單的變化(如添加噪聲)來生成新的URL。
但請注意,這實際上并沒有增加圖像本身的多樣性,只是改變了圖像的保存方式或路徑。如果你真的需要對圖像本身進行數(shù)據(jù)增強,你需要先下載圖像,然后使用圖像處理庫(如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的函數(shù) def generate_extra_urls(base_urls, num_extra): extra_urls = [] for _ in range(num_extra): base_url = random.choice(base_urls) # 這里我們簡單地通過添加隨機字符串來模擬新的URL # 在實際應(yīng)用中,你可能需要更復(fù)雜的策略來生成有意義的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("數(shù)據(jù)增強完成,所有URL已寫入all_faces.txt文件。")
這個腳本首先讀取face.txt文件中的URL,然后定義一個函數(shù)generate_extra_urls來生成額外的URL。這個函數(shù)通過從原始URL中隨機選擇一個,并在其后添加一個隨機字符串來模擬新的URL。最后,所有URL(包括原始的和生成的)都被寫入all_faces.txt文件。
請注意,這只是一個非常簡單的示例,并且生成的URL可能在實際應(yīng)用中并不具有實際意義。如果你真的需要進行圖像增強,你應(yīng)該考慮下載圖像并使用圖像處理庫進行實際的圖像變換。
方法二
如果你想要對圖像進行實際的數(shù)據(jù)增強,而不是僅僅生成新的URL,你需要首先下載這些圖像,然后使用圖像處理技術(shù)來增加圖像的多樣性。這里是一個基本的步驟指南,以及你可以使用的Python庫:
1.下載圖像:
使用requests庫從URL下載圖像,并保存到本地文件夾。
2.圖像數(shù)據(jù)增強:
使用OpenCV或PIL(Python Imaging Library,也稱為Pillow)對圖像進行變換。以下是一些常見的數(shù)據(jù)增強方法:
- 幾何變換:翻轉(zhuǎn)、旋轉(zhuǎn)、裁剪、縮放、平移等。
- 像素變換:添加噪聲、模糊、顏色變換、對比度調(diào)整等。
3.保存增強后的圖像:
將增強后的圖像保存到新的文件夾或數(shù)據(jù)庫中。
4.管理增強數(shù)據(jù):
你可能需要記錄每個增強圖像與其原始圖像的關(guān)系,以便在訓(xùn)練模型時能夠正確地使用它們。
下面是一個簡化的Python代碼示例,展示如何下載圖像并進行基本的數(shù)據(jù)增強:
import os import requests from PIL import Image, ImageOps, ImageEnhance import numpy as np import random # 下載圖像的函數(shù) 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}") # 圖像增強的函數(shù) def enhance_image(image_path, output_dir): # 讀取圖像 image = Image.open(image_path) # 幾何變換示例:隨機翻轉(zhuǎn) 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' # 如果目錄不存在,則創(chuàng)建它們 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("數(shù)據(jù)增強完成,增強后的圖像已保存在", enhanced_dir)
請注意,這只是一個非?;A(chǔ)的示例,實際的圖像增強可能需要更復(fù)雜的策略和參數(shù)調(diào)整。此外,為了獲得最佳效果,你可能需要針對你的特定任務(wù)和數(shù)據(jù)集調(diào)整增強方法。
最后,務(wù)必確保在下載和使用圖像時遵守相關(guān)版權(quán)和隱私法規(guī)。如果你打算在商業(yè)項目中使用這些數(shù)據(jù),確保你有權(quán)這樣做,或者考慮使用經(jīng)過授權(quán)的數(shù)據(jù)集。
方法三
如果你需要一個更復(fù)雜的解決方案來進行圖像數(shù)據(jù)增強,那么你可以考慮使用imgaug(Image Augmentation)庫。imgaug是一個強大且靈活的圖像增強庫,它提供了大量的預(yù)定義增強方法,并且允許你自定義自己的增強策略。
以下是一個使用imgaug進行圖像數(shù)據(jù)增強的Python代碼示例:
import os import requests from PIL import Image import imgaug as ia from imgaug import augmenters as iaa # 下載圖像的函數(shù) 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}") # 定義數(shù)據(jù)增強序列 def create_augmentation_seq(): seq = iaa.Sequential([ iaa.Fliplr(0.5), # 水平翻轉(zhuǎn),50%的概率 iaa.Flipud(0.5), # 垂直翻轉(zhuǎn),50%的概率 iaa.Affine( rotate=(-20, 20), # 隨機旋轉(zhuǎn),范圍在-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", # 使用常數(shù)填充新的像素 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) # 每次應(yīng)用增強時的順序是隨機的 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' # 創(chuàng)建目錄 if not os.path.exists(download_dir): os.makedirs(download_dir) if not os.path.exists(augmented_dir): os.makedirs(augmented_dir) # 創(chuàng)建數(shù)據(jù)增強序列 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圖像轉(zhuǎn)換為numpy數(shù)組 image_array = np.array(image) # 應(yīng)用數(shù)據(jù)增強 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("數(shù)據(jù)增強完成,增強后的圖像已保存在", augmented_dir) # 運行主程序 if __name__ == "__main__": main()
這個腳本首先定義了一個download_image函數(shù)來下載圖像,并定義了一個create_augmentation_seq函數(shù)來創(chuàng)建一個包含多種增強方法的序列。然后,主程序main讀取URL列表,下載圖像,并使用定義的增強序列對每個圖像進行增強。增強后的圖像被保存在一個單獨的目錄中。
請注意,這個腳本假設(shè)所有的URL都指向JPEG格式的圖像,并且所有的圖像都可以被正確下載。在實際應(yīng)用中,你可能需要添加額外的錯誤處理和驗證邏輯。此外,這個腳本使用的是隨機增強,每次運行時都會得到不同的增強結(jié)果。
最后,確保你已經(jīng)安裝了imgaug庫和它的依賴項。你可以使用pip來安裝它
以上就是Python讀取含url圖片鏈接的txt文檔方法小結(jié)的詳細內(nèi)容,更多關(guān)于Python讀取含圖片文檔的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解鎖Python中神器vars內(nèi)置函數(shù)的使用
vars()函數(shù)是一個內(nèi)置函數(shù),用于返回對象的__字典__,其中包含對象的__屬性__,本文主要為大家詳細介紹了vars()函數(shù)的具體使用,需要的小伙伴可以了解下2023-11-11Pycharm?2020最新永久激活碼(附最新激活碼和插件)
最近很多朋友的Pycharm激活時間又過期了,今天小編再把激活的方法匯總和工具分享一下,文中給大家分享兩種方式,需要的朋友直接拿去用吧2020-01-01Python2.7版os.path.isdir中文路徑返回false的解決方法
這篇文章主要為大家詳細介紹了Python2.7版os.path.isdir中文路徑返回false的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06Python實現(xiàn)byte轉(zhuǎn)integer
這篇文章主要介紹了Python實現(xiàn)byte轉(zhuǎn)integer操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06