captionate / app.py
bilgeyucel's picture
Add desc
4d2d71e
raw
history blame
No virus
1.89 kB
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 with [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()