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