How to create blip vqa chatbot with webcam in gradio?

Im a beginner in gradio but how can i create a blip vqa chatbot in gradio? I would take a image from the webcam and send the question, and get the response? Currently my code needs a file, not a image from webcam and there are still errors such as tuple can not be read? The processor and model are defined by the way.

import gradio as gr
from PIL import Image
import numpy as np

def add_text(history, text):
history = history + [(text, None)]
return history, gr.update(value=β€œβ€, interactive=False)

def add_file(history, file):
history = history + [((file.name,), None)]
return history

def bot(history):
history[-1][0] = question
raw_image = image.open(image)
text = β€œa photography of”
inputs = processor2(raw_image, text, return_tensors=β€œpt”)
out = model2.generate(**inputs)
return (processor2.decode(out[0], skip_special_tokens=True))
#response = β€œThat’s cool!”
#history[-1][1] = response
#return history

with gr.Blocks() as demo:
chatbot = gr.Chatbot(, elem_id=β€œchatbot”).style(height=750)

with gr.Row():
    with gr.Column(scale=0.85):
        txt = gr.Textbox(
            show_label=False,
            placeholder="Enter text and press enter, or upload an image",
        ).style(container=False)
    with gr.Column(scale=0.15, min_width=0):
        btn = gr.UploadButton("πŸ“", file_types=["image", "video", "audio"])

txt_msg = txt.submit(add_text, [chatbot, txt], [chatbot, txt], queue=False).then(
    bot, chatbot, chatbot
)
txt_msg.then(lambda: gr.update(interactive=True), None, [txt], queue=False)
file_msg = btn.upload(add_file, [chatbot, btn], [chatbot], queue=False).then(
    bot, chatbot, chatbot
)

demo.launch()
It would be awesome if someone helped!