CoolFace
Apppublic

Groq/image-moderation

sourceHugging Faceupdated 2y agoView on Hugging Face
8likes
app.py130 linesDownload Raw Back to root
1import base642import io3import gradio as gr4from groq import Groq5from PIL import Image6import requests7 8def encode_image(image):9    buffered = io.BytesIO()10    image.save(buffered, format="JPEG")11    return base64.b64encode(buffered.getvalue()).decode('utf-8')12 13def analyze_image(image, prompt, api_key, is_url=False):14    client = Groq(api_key=api_key)15 16    if is_url:17        image_content = {"type": "image_url", "image_url": {"url": image}}18    else:19        base64_image = encode_image(image)20        image_content = {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}21 22    try:23        chat_completion = client.chat.completions.create(24            messages=[25                {26                    "role": "user",27                    "content": [28                        {"type": "text", "text": prompt},29                        image_content,30                    ],31                }32            ],33            model="llava-v1.5-7b-4096-preview",34        )35        return chat_completion.choices[0].message.content36    except Exception as e:37        return f"Error: {str(e)}"38 39def check_content_safety(image_description, api_key):40    client = Groq(api_key=api_key)41 42    try:43        chat_completion = client.chat.completions.create(44            messages=[45                {"role": "system", "content": "You are a content safety classifier. Analyze the given text and determine if it contains any unsafe or inappropriate content."},46                {"role": "user", "content": f"Please analyze this image description for any unsafe or inappropriate content: {image_description}"}47            ],48            model="llama-guard-3-8b",49        )50        return chat_completion.choices[0].message.content51    except Exception as e:52        return f"Error: {str(e)}"53 54def process_image(image, url, prompt, api_key):55    if image is not None:56        return analyze_image(image, prompt, api_key), check_content_safety(analyze_image(image, prompt, api_key), api_key)57    elif url:58        try:59            response = requests.get(url)60            image = Image.open(io.BytesIO(response.content))61            return analyze_image(url, prompt, api_key, is_url=True), check_content_safety(analyze_image(url, prompt, api_key, is_url=True), api_key)62        except:63            return "Invalid image URL. Please provide a direct link to an image.", ""64    else:65        return "Please provide an image to analyze.", ""66 67def launch():68    with gr.Blocks(69        theme=gr.themes.Default(primary_hue="orange"),70        css="""71        #app-container { max-width: 1000px; margin: auto; padding: 10px; }72        #title { text-align: center; margin-bottom: 10px; font-size: 24px; }73        #groq-badge { text-align: center; margin-top: 10px; }74        .gr-button { border-radius: 15px; }75        .gr-input, .gr-box { border-radius: 10px; }76        .gr-form { gap: 5px; }77        .gr-block.gr-box { padding: 10px; }78        .gr-paddle { height: auto; }79        """80    ) as demo:81        with gr.Column(elem_id="app-container"):82            gr.Markdown("# šŸ–¼ļø Groq x Gradio Image Analysis and Content Safety Check", elem_id="title")83            84            with gr.Row():85                api_key = gr.Textbox(label="Groq API Key:", type="password", scale=2)86                prompt = gr.Textbox(87                    label="Image Analysis Prompt:",88                    value="Describe the image content.",89                    scale=390                )91            92            with gr.Row():93                with gr.Column(scale=1):94                    image_input = gr.Image(type="pil", label="Upload Image:", height=200, sources=["upload"])95                with gr.Column(scale=1):96                    url_input = gr.Textbox(label="Or Paste Image URL:", lines=1)97                    analyze_button = gr.Button("šŸš€ Analyze Image", variant="primary")98            99            with gr.Row():100                with gr.Column():101                    analysis_output = gr.Textbox(label="Image Analysis with LlaVA 1.5 7B:", lines=6)102                with gr.Column():103                    safety_output = gr.Textbox(label="Safety Check with Llama Guard 3 8B:", lines=6)104            105            analyze_button.click(106                fn=process_image,107                inputs=[image_input, url_input, prompt, api_key],108                outputs=[analysis_output, safety_output]109            )110            111            with gr.Row():112                with gr.Column():113                    gr.HTML("""114                    <div id="groq-badge">115                        <div style="color: #f55036; font-weight: bold; font-size: 1em;">⚔ POWERED BY GROQ ⚔</div>116                    </div>117                    """)118                with gr.Column():119                    gr.Markdown("""120                    **How to use this app:** 121                    1. Enter your [Groq API Key](https://console.groq.com/keys) in the provided field.122                    2. Upload an image file or paste an image URL.123                    3. Use default prompt or enter custom prompt for image analysis.124                    4. Click "Analyze Image" to check for content safety.125                    """)126    127    demo.launch()128 129if __name__ == "__main__":130    launch()