当前位置: 首页 > news >正文

【工具】解析URL获取实际图片地址下载原始FFHQ图像

问题简述

最近的项目需要用到FFHQ的原始图像,但是官网上的70k张图像是已经对齐过的,想下载原始高清图像,怎么搞?

前置条件

官方地址https://github.com/NVlabs/ffhq-dataset下载json (ffhq-dataset-v2.json)文件,里面包含所有图像的原始地址。
示例如下
在这里插入图片描述
"photo_url"代表着原始图像的地址,可以进去下载,首先需要把flickr上的70k个人脸图像剥离开来,方便下载

步骤1 剥离地址,方便下载

import json
import os
def process_json(json_data, output_dir):# os.makedirs(output_dir, exist_ok=True)with open(output_dir, 'w') as f:for key, value in json_data.items():metadata = value.get("metadata", {})photo_url = metadata.get("photo_url")if photo_url:# 使用键作为文件名f.write(photo_url + '\n')# save_path = os.path.join(output_dir, f"{key}.jpg")# download_image(photo_url, save_path)
def main():json_file = r"F:\ffhq-dataset-v2.json"  # 替换为你的 JSON 文件路径output_dir = r"downloaded_images\ffhq_down_url.txt"with open(json_file, 'r') as file:json_data = json.load(file)process_json(json_data, output_dir)if __name__ == "__main__":main()

运行代码后得到干净的txt下载地址,如下示例所示
在这里插入图片描述

步骤2 解析URL获取实际图片地址下载图像

这里采用BeautifulSoup解释,通过地址加后缀的方式可以选择想要的图像尺寸,例如"/sizes/k"代表2048尺寸,/sizes/o 代表原始尺寸。如果修改,后面的_k.jpg也需要跟着修改。

import requests
import os
from bs4 import BeautifulSoup
from tqdm import tqdm
# 解析URL获取实际图片地址
def get_actual_image_url(preview_url):new_preview_url = preview_url.rstrip('/') + '/sizes/k'try:response = requests.get(new_preview_url)response.raise_for_status()soup = BeautifulSoup(response.text, 'html.parser')img_tag = soup.find('img', {'src': lambda x: x and x.endswith('_k.jpg')})if img_tag:actual_url = img_tag['src']return actual_urlexcept requests.exceptions.RequestException as e:print(f'解析失败 {new_preview_url}: {e}')# parts = preview_url.strip('/').split('/')# photo_id = parts[-1]# return f'https://live.staticflickr.com/unknown_domain/{photo_id}_k.jpg'# 下载图片
def download_image(preview_url, save_dir):actual_url = get_actual_image_url(preview_url)if actual_url and actual_url.startswith('//'):actual_url = 'https:' + actual_urlif not os.path.exists(save_dir):os.makedirs(save_dir)if actual_url:file_name = os.path.join(save_dir, os.path.basename(actual_url))else:print(f'未获取到有效图片链接,跳过 {preview_url}')returntry:import requestsresponse = requests.get(actual_url)response.raise_for_status()with open(file_name, 'wb') as file:file.write(response.content)print(f'成功下载: {file_name}')except requests.exceptions.RequestException as e:print(f'下载失败 {actual_url}: {e}')# 主函数
def main():url_file = 'e:\\Research\\Tools\\downloaded_images\\ffhq_down_url.txt'save_dir = r'F:\Data\20250430FFHQ_ori'with open(url_file, 'r') as file:urls = file.readlines()for url in tqdm(urls):download_image(url.strip(), save_dir)if __name__ == '__main__':main()

如果只需要示例图,相关代码可以修改为:

def get_actual_image_url(preview_url):try:response = requests.get(preview_url)response.raise_for_status()soup = BeautifulSoup(response.text, 'html.parser')img_tag = soup.find('img', {'class': 'main-photo'})  # 根据实际情况调整classif img_tag:actual_url = img_tag['src']return actual_urlexcept requests.exceptions.RequestException as e:print(f'解析失败 {preview_url}: {e}')

即只需要获取'class': 'main-photo' 就行。

多说一句

为什么不使用flickr的api https://www.flickr.com/services/api/,安装相应的包使用https://stuvel.eu/software/flickrapi/

因为现在要钱了,用不了
在这里插入图片描述

相关文章:

  • C++:实现线程池
  • VMware中虚拟机和主机的SSH远程连接
  • langchain使用推理模型如DeepSeek,删除回答中的推理过程<think></think>
  • 数据库实验10 函数存储
  • vitepress 复杂环境引入 mermaid
  • Python技巧:TX串口输入十六进制字符串,并获取输出,RX获取输出;循环1000次,通过分析RX输出,计算丢包率。
  • 使用docker配置Mysql
  • 深度学习:图神经网络GNN、GCN及其在推荐系统的应用
  • 人工智能 计算智能领域中分布估计算法的核心思想
  • 影刀RPA中使用AI模型
  • 【PhysUnits】1 SI Prefixes 实现解析(prefix.rs)
  • 常识补充(NVIDIA NVLink技术:打破GPU通信瓶颈的革命性互联技术)
  • 前端基础之《Vue(14)—组件通信》
  • 【LLM】什么是 MCPACPACA
  • 塔能水泵节能方案:精准驱动工厂能耗优化
  • 5.6刷题并查集
  • opencv实战:银行卡卡号识别
  • 即插即用!长安汽车复旦提出LMPOcc:长期记忆先验实现占用预测任务新SOTA
  • 富文本编辑器的第三方库ProseMirror
  • C++复习2
  • 马上评|不再提“智驾”,新能源车企回归理性
  • 过半中国上市公司去年都在“扩编”,哪些公司人效最高
  • 中方对原产印度进口氯氰菊酯实施反倾销措施,商务部回应
  • 以色列计划“占领加沙”,特朗普下周中东行结束之际将是“机会窗口”
  • 山东滕州一车辆撞向公交站台撞倒多人,肇事者被控制,案件已移交刑警
  • 玉渊谭天丨是自保还是自残?八个恶果透视美国征收100%电影关税