File size: 4,571 Bytes
bddfb4b
96e76ac
 
 
 
 
 
 
 
 
bddfb4b
 
96e76ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bddfb4b
 
 
 
 
 
 
96e76ac
 
bddfb4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37674bb
bddfb4b
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import gradio as gr
import os
import json
import uuid
from datetime import datetime
import shutil

# Create directories for data storage
os.makedirs("uploaded_images", exist_ok=True)
os.makedirs("submissions", exist_ok=True)

def process_submission(input_img, text_answer, multiple_choice, city, country, se_asia_relevance, culture_knowledge, native_caption, english_caption):
    # Generate unique ID for this submission
    submission_id = str(uuid.uuid4())
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    
    # Save the image if provided
    image_path = None
    if input_img is not None:
        # Create filename with submission ID
        image_filename = f"{timestamp}_{submission_id}.jpg"
        image_path = os.path.join("uploaded_images", image_filename)
        
        # Save the image
        if isinstance(input_img, str):  # If it's a file path
            shutil.copy(input_img, image_path)
        else:  # If it's a PIL Image
            input_img.save(image_path)
    
    # Create a data structure for the submission
    submission_data = {
        "id": submission_id,
        "timestamp": timestamp,
        "image_filename": image_path,
        "cultural_relevance": text_answer,
        "continent": multiple_choice,
        "city": city,
        "country": country,
        "se_asia_relevance": se_asia_relevance,
        "cultural_knowledge_source": culture_knowledge,
        "native_caption": native_caption,
        "english_caption": english_caption
    }
    
    # Save the data as JSON
    json_filename = f"{timestamp}_{submission_id}.json"
    json_path = os.path.join("submissions", json_filename)
    with open(json_path, "w") as f:
        json.dump(submission_data, f, indent=2)
    
    # Return values to display in the interface
    return input_img, f"Your text response: {text_answer}", f"Your selected option: {multiple_choice}", f"Location: {city}, {country}", f"SE Asia relevance: {se_asia_relevance}", f"Cultural knowledge source: {culture_knowledge}", f"Native caption: {native_caption}", f"English caption: {english_caption}"

gradio_app = gr.Interface(
    process_submission,
    inputs=[
        gr.Image(label="Upload an image", sources=['upload', 'webcam'], type="pil"),
        gr.Textbox(label="The image portrays culturally-relevant information in:", placeholder="what culture does this image represent?"),
        gr.Radio(choices=["North America", "South America", "Europe", "Africa", "Asia", "Australia"], 
                 label="Which continent is most represented in this image?"),
        gr.Textbox(label="City where the image was taken:", placeholder="Enter city name"),
        gr.Textbox(label="Country where the image was taken:", placeholder="Enter country name"),
        gr.Radio(
            choices=[
                "Yes. Unique to South East",
                "Yes, people will likely think of South East when seeing the picture, but it may have low degree of similarity to other cultures.",
                "Maybe, this culture did not originate from South East, but it's quite dominant in South East",
                "Not really. It has some affiliation to South East, but actually does not represent South East or has stronger affiliation to cultures outside South East",
                "No. Totally unrelated to South East"
            ],
            label="Is the image culturally relevant in South-East Asia?"
        ),
        gr.Radio(
            choices=[
                "I'm from this country/culture",
                "I checked online resources (e.g., Wikipedia, articles, blogs)"
            ],
            label="How do you know about this culture?",
            info="Please do not consult LLMs (e.g., GPT-4o, Claude, Command-R, etc.)"
        ),
        gr.Textbox(label="Caption in Native Language:", placeholder="Enter caption in the native language of the culture depicted"),
        gr.Textbox(label="English Caption:", placeholder="Enter caption in English")
    ],
    outputs=[
        gr.Image(label="Submitted Image"),
        gr.Text(label="Text Response"),
        gr.Text(label="Multiple Choice Response"),
        gr.Text(label="Location Information"),
        gr.Text(label="South-East Asia Cultural Relevance"),
        gr.Text(label="Cultural Knowledge Source"),
        gr.Text(label="Native Language Caption"),
        gr.Text(label="English Caption")
    ],
    title="SE Image Data Collection",
    description="Upload an image and answer questions about its cultural significance."
)

if __name__ == "__main__":
    gradio_app.launch()