| from __future__ import annotations |
|
|
| import gradio as gr |
| import torch |
| from gradio_client import Client, file |
|
|
| DESCRIPTION = "# Comparing image captioning models" |
| ORIGINAL_SPACE_INFO = """\ |
| - [GIT-large fine-tuned on COCO](https://huggingface.co/spaces/hysts/image-captioning-with-git) |
| - [BLIP-large](https://huggingface.co/spaces/hysts/image-captioning-with-blip) |
| - [BLIP-2 OPT 6.7B](https://huggingface.co/spaces/merve/BLIP2-with-transformers) |
| - [BLIP-2 T5-XXL](https://huggingface.co/spaces/hysts/BLIP2) |
| - [InstructBLIP](https://huggingface.co/spaces/hysts/InstructBLIP) |
| - [Fuyu-8B](https://huggingface.co/spaces/adept/fuyu-8b-demo) |
| """ |
|
|
| torch.hub.download_url_to_file("http://images.cocodataset.org/val2017/000000039769.jpg", "cats.jpg") |
| torch.hub.download_url_to_file( |
| "https://huggingface.co/datasets/nielsr/textcaps-sample/resolve/main/stop_sign.png", "stop_sign.png" |
| ) |
| torch.hub.download_url_to_file( |
| "https://cdn.openai.com/dall-e-2/demos/text2im/astronaut/horse/photo/0.jpg", "astronaut.jpg" |
| ) |
|
|
|
|
| def generate_caption_git(image_path: str) -> str: |
| try: |
| client = Client("hysts/image-captioning-with-git") |
| return client.predict(file(image_path), api_name="/caption") |
| except Exception: |
| gr.Warning("The GIT-large Space is currently unavailable. Please try again later.") |
| return "" |
|
|
|
|
| def generate_caption_blip(image_path: str) -> str: |
| try: |
| client = Client("hysts/image-captioning-with-blip") |
| return client.predict(file(image_path), "A picture of", api_name="/caption") |
| except Exception: |
| gr.Warning("The BLIP-large Space is currently unavailable. Please try again later.") |
| return "" |
|
|
|
|
| def generate_caption_blip2_opt(image_path: str) -> str: |
| try: |
| client = Client("merve/BLIP2-with-transformers") |
| return client.predict( |
| file(image_path), |
| "Beam search", |
| 1, |
| 1, |
| 1.5, |
| api_name="/caption", |
| ) |
| except Exception: |
| gr.Warning("The BLIP2 OPT6.7B Space is currently unavailable. Please try again later.") |
| return "" |
|
|
|
|
| def generate_caption_blip2_t5xxl(image_path: str) -> str: |
| try: |
| client = Client("hysts/BLIP2") |
| return client.predict( |
| file(image_path), |
| "Beam search", |
| 1, |
| 1, |
| 1.5, |
| 50, |
| 1, |
| 5, |
| 0.9, |
| api_name="/caption", |
| ) |
| except Exception: |
| gr.Warning("The BLIP2 T5-XXL Space is currently unavailable. Please try again later.") |
| return "" |
|
|
|
|
| def generate_caption_instructblip(image_path: str) -> str: |
| try: |
| client = Client("hysts/InstructBLIP") |
| return client.predict( |
| file(image_path), |
| "Describe the image.", |
| "Beam search", |
| 5, |
| 256, |
| 1, |
| 0.9, |
| 1.5, |
| 1.0, |
| 1.0, |
| api_name="/run", |
| ) |
| except Exception: |
| gr.Warning("The InstructBLIP Space is currently unavailable. Please try again later.") |
| return "" |
|
|
|
|
| def generate_caption_fuyu(image_path: str) -> str: |
| try: |
| client = Client("adept/fuyu-8b-demo") |
| return client.predict( |
| image_path, |
| "Generate a coco style caption.\n", |
| fn_index=3, |
| ) |
| except Exception: |
| gr.Warning("The Fuyu-8B Space is currently unavailable. Please try again later.") |
| return "" |
|
|
|
|
| with gr.Blocks(css="style.css") as demo: |
| gr.Markdown(DESCRIPTION) |
| with gr.Row(): |
| with gr.Column(): |
| input_image = gr.Image(type="filepath") |
| run_button = gr.Button("Caption") |
| with gr.Column(): |
| out_git = gr.Textbox(label="GIT-large fine-tuned on COCO") |
| out_blip = gr.Textbox(label="BLIP-large") |
| out_blip2_opt = gr.Textbox(label="BLIP-2 OPT 6.7B") |
| out_blip2_t5xxl = gr.Textbox(label="BLIP-2 T5-XXL") |
| out_instructblip = gr.Textbox(label="InstructBLIP") |
| out_fuyu = gr.Textbox(label="Fuyu-8B") |
|
|
| gr.Examples( |
| examples=[ |
| "cats.jpg", |
| "stop_sign.png", |
| "astronaut.jpg", |
| ], |
| inputs=input_image, |
| ) |
|
|
| with gr.Accordion(label="The original Spaces can be found here:", open=False): |
| gr.Markdown(ORIGINAL_SPACE_INFO) |
|
|
| fn_out_pairs = [ |
| (generate_caption_git, out_git), |
| (generate_caption_blip, out_blip), |
| (generate_caption_blip2_opt, out_blip2_opt), |
| (generate_caption_blip2_t5xxl, out_blip2_t5xxl), |
| (generate_caption_instructblip, out_instructblip), |
| (generate_caption_fuyu, out_fuyu), |
| ] |
| for fn, out in fn_out_pairs: |
| run_button.click( |
| fn=fn, |
| inputs=input_image, |
| outputs=out, |
| api_name=False, |
| ) |
|
|
| if __name__ == "__main__": |
| demo.queue(max_size=20, api_open=False).launch(show_api=False) |
|
|