Spaces:
Runtime error
Runtime error
import os | |
os.system("pip uninstall numpy -y") | |
os.system("pip install numpy") | |
os.system("pip install pandas") | |
import gradio as gr | |
import sys | |
from uuid import uuid1 | |
from PIL import Image | |
from zipfile import ZipFile | |
import pathlib | |
import shutil | |
import pandas as pd | |
import deepsparse | |
import json | |
rn50_embedding_pipeline_default = deepsparse.Pipeline.create( | |
task="embedding-extraction", | |
base_task="image-classification", # tells the pipeline to expect images and normalize input with ImageNet means/stds | |
model_path="zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/channel20_pruned75_quant-none-vnni", | |
#emb_extraction_layer=-1, # extracts last layer before projection head and softmax | |
) | |
rn50_embedding_pipeline_last_1 = deepsparse.Pipeline.create( | |
task="embedding-extraction", | |
base_task="image-classification", # tells the pipeline to expect images and normalize input with ImageNet means/stds | |
model_path="zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/channel20_pruned75_quant-none-vnni", | |
emb_extraction_layer=-1, # extracts last layer before projection head and softmax | |
) | |
rn50_embedding_pipeline_last_2 = deepsparse.Pipeline.create( | |
task="embedding-extraction", | |
base_task="image-classification", # tells the pipeline to expect images and normalize input with ImageNet means/stds | |
model_path="zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/channel20_pruned75_quant-none-vnni", | |
emb_extraction_layer=-2, # extracts last layer before projection head and softmax | |
) | |
rn50_embedding_pipeline_last_3 = deepsparse.Pipeline.create( | |
task="embedding-extraction", | |
base_task="image-classification", # tells the pipeline to expect images and normalize input with ImageNet means/stds | |
model_path="zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/channel20_pruned75_quant-none-vnni", | |
emb_extraction_layer=-3, # extracts last layer before projection head and softmax | |
) | |
rn50_embedding_pipeline_dict = { | |
"0": rn50_embedding_pipeline_default, | |
"1": rn50_embedding_pipeline_last_1, | |
"2": rn50_embedding_pipeline_last_2, | |
"3": rn50_embedding_pipeline_last_3 | |
} | |
def zip_ims(g): | |
from uuid import uuid1 | |
if g is None: | |
return None | |
l = list(map(lambda x: x["name"], g)) | |
if not l: | |
return None | |
zip_file_name ="tmp.zip" | |
with ZipFile(zip_file_name ,"w") as zipObj: | |
for ele in l: | |
zipObj.write(ele, "{}.png".format(uuid1())) | |
#zipObj.write(file2.name, "file2") | |
return zip_file_name | |
def unzip_ims_func(zip_file_name, choose_model, | |
rn50_embedding_pipeline_dict = rn50_embedding_pipeline_dict): | |
print("call file") | |
if zip_file_name is None: | |
return json.dumps({}) | |
unzip_path = "img_dir" | |
if os.path.exists(unzip_path): | |
shutil.rmtree(unzip_path) | |
with ZipFile(zip_file_name) as archive: | |
archive.extractall(unzip_path) | |
im_name_l = pd.Series( | |
list(pathlib.Path(unzip_path).rglob("*.png")) + \ | |
list(pathlib.Path(unzip_path).rglob("*.jpg")) + \ | |
list(pathlib.Path(unzip_path).rglob("*.jpeg")) | |
).map(str).values.tolist() | |
rn50_embedding_pipeline = rn50_embedding_pipeline_dict[choose_model] | |
embeddings = rn50_embedding_pipeline(images=im_name_l) | |
if os.path.exists(unzip_path): | |
shutil.rmtree(unzip_path) | |
im_name_l = pd.Series(im_name_l).map(lambda x: x.split("/")[-1]).values.tolist() | |
return json.dumps({ | |
"names": im_name_l, | |
"embs": embeddings.embeddings[0] | |
}) | |
def emb_img_func(im, choose_model, | |
rn50_embedding_pipeline_dict = rn50_embedding_pipeline_dict): | |
print("call im :") | |
if im is None: | |
return json.dumps({}) | |
im_obj = Image.fromarray(im) | |
im_name = "{}.png".format(uuid1()) | |
im_obj.save(im_name) | |
rn50_embedding_pipeline = rn50_embedding_pipeline_dict[choose_model] | |
embeddings = rn50_embedding_pipeline(images=[im_name]) | |
os.remove(im_name) | |
return json.dumps({ | |
"names": [im_name], | |
"embs": embeddings.embeddings[0] | |
}) | |
''' | |
def emb_gallery_func(gallery): | |
print("call ga :") | |
if gallery is None: | |
return [] | |
im_name_l = list(map(lambda x: x["name"], images)) | |
embeddings = rn50_embedding_pipeline(images=im_name_l) | |
return embeddings | |
''' | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
choose_model = gr.Radio(choices=["0", "1", "2", "3"], | |
value="0", label="Choose embedding layer", elem_id="layer_radio") | |
with gr.Row(): | |
with gr.Column(): | |
inputs_0 = gr.Image(label = "Input Image for embed") | |
button_0 = gr.Button("Image button") | |
with gr.Column(): | |
inputs_1 = gr.File(label = "Input Images zip file for embed") | |
button_1 = gr.Button("Image File button") | |
with gr.Row(): | |
outputs = gr.Text(label = "Output Embeddings") | |
button_0.click(fn = emb_img_func, inputs = [inputs_0, choose_model], outputs = outputs) | |
button_1.click(fn = unzip_ims_func, inputs = [inputs_1, choose_model], outputs = outputs) | |
demo.launch("0.0.0.0") | |