Spaces:
Running
Running
import os | |
import gradio as gr | |
from haystack.nodes import TransformersImageToText | |
from haystack.nodes import PromptNode, PromptTemplate | |
from haystack import Pipeline | |
description = """ | |
# Captionate ✨ 📸 | |
## Create Instagram captions for your insta pics! | |
Built by [Bilge Yucel](https://twitter.com/bilgeycl) using [Haystack](https://github.com/deepset-ai/haystack)💙 | |
""" | |
image_to_text = TransformersImageToText( | |
model_name_or_path="nlpconnect/vit-gpt2-image-captioning", | |
progress_bar=True | |
) | |
prompt_template = PromptTemplate(prompt=""" | |
You will receive a describing text of a photo. | |
Try to come up with a nice Instagram caption. | |
Requirements for the caption: | |
* Must rhyme with the describing text | |
* Should be at least 10 words | |
* Needs to include one emoji and suitable hastags | |
Describing text:{documents}; | |
Caption: | |
""") | |
hf_api_key = os.environ["HF_API_KEY"] | |
prompt_node = PromptNode(model_name_or_path="tiiuae/falcon-7b-instruct", api_key=hf_api_key, default_prompt_template=prompt_template, model_kwargs={"trust_remote_code":True}) | |
captioning_pipeline = Pipeline() | |
captioning_pipeline.add_node(component=image_to_text, name="image_to_text", inputs=["File"]) | |
captioning_pipeline.add_node(component=prompt_node, name="prompt_node", inputs=["image_to_text"]) | |
def generate_caption(image_file_paths): | |
caption = captioning_pipeline.run(file_paths=[image_file_paths]) | |
print(caption) | |
return caption["results"][0] | |
with gr.Blocks(theme="soft") as demo: | |
gr.Markdown(value=description) | |
image = gr.Image(type="filepath") | |
submit_btn = gr.Button("✨ Captionate ✨") | |
caption = gr.Textbox(label="Caption") | |
submit_btn.click(fn=generate_caption, inputs=[image], outputs=[caption]) | |
if __name__ == "__main__": | |
demo.launch() |