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

visitor badge

" def zipDir(dirpath,outfullname): zipp=ZipFile(outfullname,'w') for path, dirnames,filenames in os.walk(dirpath): fpath=path.replace(dirpath,'') for filename in filenames: zipp.write(os.path.join(path,filename),os.path.join(fpath,filename)) zipp.close() return outfullname def download_image(name,number,overwrite): #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) # 创建文件夹 # 因为在使用Huggingface的时候,其不能访问本地电脑,所以直接内置一个地址 dirs='E:\图片' 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) files2=[] num1=len(files1) num2=[] for i in range(num1): path2=os.path.join(dirs,files1[i]) files2.append(path2) num2.append(len(os.listdir(path2))) printing=[] for i,j in zip(files1,num2): pp=f'{i}: 共有{j}张' printing.append(pp) prt='\n'.join(printing) num2=np.array(num2) out1=f'一共下载{num2.sum()}张图片\n其中:\n{prt}\n' out2=zipDir(dirs,'pictures.zip') # 删除文件夹 for i in files2: shutil.rmtree(i) return (out1,out2) demo=gr.Interface( fn=download_image, inputs=[ gr.Textbox( label="要下载的图片名称,比如:刘德华 张学友", lines=1, placeholder='刘德华 张学友', ), gr.Number(value=10, label="下载图片数量,比如:10"), gr.Radio(['不允许重复下载','允许重复下载'],label='是否允许重复下载'), # 不用输入下载地址了,也就不需要这个了 #gr.Textbox( # label="图片存储地址,比如: E:\图片", # lines=1, # placeholder='E:\图片', #value="E:\图片", # ), ], # "numpy", outputs=[gr.Textbox( label="处理结果", lines=10, ), gr.File( label='图片合集压缩下载' ), ], title = title, description = description, article = article ) demo.launch(enable_queue=True)