#!pip install -Uqq fastbook import fastbook import gradio as gr fastbook.setup_book() from fastbook import * import os title="批量下载图片" description=""" 1. 可以下载不同种类的图片,图片名称使用空格隔开,比如: 张学友 刘德华 黎明 郭富城\n 2. 下载的数量应该大于0,程序运行的速度与下载的图片数量和种类个数有关\n 3. 图片存储地址不能包含空格,有效的存储地址:E:/图片 """ article="

visitor badge

" def download_image(name,number,overwrite,dirs): dirs=dirs.split(' ') dirs=[i for i in dirs if i != ''] if len(dirs)==0: return f"请输入有效的存储地址" else: dirs=''.join(dirs) if not os.path.exists(dirs): # 如果不存在,则创建文件夹。与代码文件所在目录相同。如果存在就直接跳过整段代码 os.makedirs(dirs) # 创建文件夹 names=name.split(' ') names=[i for i in names if i != ''] if len(names)==0: return f"请输入要下载的图片名称" number=int(number) if number<1: return f"请输入大于0的下载数量" if overwrite=='允许重复下载': ow=True if overwrite=='不允许重复下载': ow=False for o in names: # 依次获取想要下载图片的关键字,这里是名字 dest=os.path.join(dirs,o) # 为每个关键字创建一个独立的文件夹 os.makedirs(dest,exist_ok=True) # 创建文件夹 # fastai自带的方法。 {}内是关键字,f'{}',是一种格式化方式 # max_images, 是图片的数量 # 返回图片的链接 # 使用的搜索引擎是 DuckDuckGo,网址是:https://duckduckgo.com/?q=&atb=v319-6__ results=search_images_ddg(f'{o}',max_images=number) # fastai自带的方法,使用并行的方式下载 # dest 下载目录 # urls 链接 download_images(dest,urls=results,preserve_filename=ow) files1=os.listdir(dirs) num1=len(files1) num2=[] for i in range(num1): path2=os.path.join(dirs,files1[i]) num2.append(len(os.listdir(path2))) # return dirs # return f'已下载的文件有:{files1},其中各下载了{num2}' return f'图片存放地址{dirs}\n 已下载的文件有{[{i:j} for i,j in zip(files1,num2)]}' demo=gr.Interface( fn=download_image, inputs=[ gr.Textbox( # placeholder='刘德华', # value='刘德华', label="要下载的图片名称,比如:刘德华 张学友", lines=1, ), gr.Number(value=10, label="下载图片数量,比如:10"), gr.Radio(['不允许重复下载','允许重复下载'],label='是否允许重复下载'), gr.Textbox( label="图片存储地址,比如: E:/图片", lines=1, # placeholder='E:\Research\ldh', # value="E:\Research\ldh", ), ], # "numpy", outputs=[gr.Textbox( label="处理结果", lines=10, )], # allow_flagging = "manual", # examples=[ # [30,5.98,1, "HighScore", [["Zr", 1, 91, 135.6], ["O", 2, 16, 11.63]]], # [1,3.97,1, "临界角全反射模型", [["Al",2, 27,50.33], ["O",3, 16, 11.63]]], # ], title = title, description = description, article = article ) demo.launch()