[docs]defhello_world(args):""" Execute the multimodal example. :param args: arguments passed from CLI """Path(args.workdir).mkdir(parents=True,exist_ok=True)withImportExtensions(required=True,help_text='this demo requires Pytorch and Transformers to be installed, ''if you haven\'t, please do `pip install jina[torch,transformers]`',):importtorchimporttorchvisionimporttransformersassert[torch,transformers,torchvision,]#: prevent pycharm auto remove the above line# args.workdir = '0bae16ce-5bb2-43be-bcd4-6f1969e8068f'targets={'people-img':{'url':args.index_data_url,'filename':os.path.join(args.workdir,'dataset.zip'),}}# download the dataifnotos.path.exists(targets['people-img']['filename']):download_data(targets,args.download_proxy,task_name='download zip data')withzipfile.ZipFile(targets['people-img']['filename'],'r')asfp:fp.extractall(args.workdir)# this envs are referred in index and query flow YAMLsos.environ['HW_WORKDIR']=args.workdiros.environ['PY_MODULE']=os.path.abspath(os.path.join(cur_dir,'my_executors.py'))# now comes the real work# load index flow from a YAML file# index it!f=Flow.load_config('flow-index.yml')withf,open(f'{args.workdir}/people-img/meta.csv',newline='')asfp:f.index(inputs=DocumentArray.from_csv(fp),request_size=10,show_progress=True)f.post(on='/dump',target_executor='textIndexer')f.post(on='/dump',target_executor='imageIndexer')f.post(on='/dump',target_executor='keyValueIndexer')# search it!f=Flow.load_config('flow-search.yml')# switch to HTTP gatewayf.protocol='http'f.port=args.porturl_html_path='file://'+os.path.abspath(os.path.join(cur_dir,'static/index.html'))withf:try:webbrowser.open(url_html_path,new=2)except:pass# intentional pass, browser support isn't cross-platformfinally:default_logger.info(f'You should see a demo page opened in your browser, 'f'if not, you may open {url_html_path} manually')ifnotargs.unblock_query_flow:f.block()
[docs]defdownload_data(targets,download_proxy=None,task_name='download fashion-mnist'):""" Download data. :param targets: target path for data. :param download_proxy: download proxy (e.g. 'http', 'https') :param task_name: name of the task """opener=urllib.request.build_opener()opener.addheaders=[('User-agent','Mozilla/5.0')]ifdownload_proxy:proxy=urllib.request.ProxyHandler({'http':download_proxy,'https':download_proxy})opener.add_handler(proxy)urllib.request.install_opener(opener)withProgressBar(total_length=len(targets),description=task_name)ast:fork,vintargets.items():ifnotos.path.exists(v['filename']):urllib.request.urlretrieve(v['url'],v['filename'],)t.update()