Spaces:
Running
Running
Upload 31 files
Browse files- config/settings.py +8 -0
- data/concepts.json +0 -0
- data/guidelines/USA/English/instructions.md +44 -0
- data/guidelines/USA/English/intro.md +12 -0
- data/guidelines/USA/English/task.md +19 -0
- data/guidelines/_Colombia/Spanish/instructions.md +40 -0
- data/guidelines/_Colombia/Spanish/intro.md +11 -0
- data/guidelines/_Colombia/Spanish/task.md +18 -0
- data/guidelines/_France/French/instructions.md +40 -0
- data/guidelines/_France/French/intro.md +11 -0
- data/guidelines/_France/French/task.md +18 -0
- data/guidelines/_Italy/Italian/instructions.md +40 -0
- data/guidelines/_Italy/Italian/intro.md +11 -0
- data/guidelines/_Italy/Italian/task.md +18 -0
- data/lang2eng_map.py +25 -0
- data/metadata.json +1414 -0
- data/metadata_tmp.json +1434 -0
- data/update_metadata_from_concepts.py +14 -0
- data/words_map.py +9 -0
- logic/__pycache__/data_utils.cpython-310.pyc +0 -0
- logic/__pycache__/handlers.cpython-310.pyc +0 -0
- logic/blur.py +91 -0
- logic/data_utils.py +256 -0
- logic/handlers.py +535 -0
- ui/__pycache__/layout.cpython-310.pyc +0 -0
- ui/__pycache__/layout.cpython-313.pyc +0 -0
- ui/__pycache__/main_page.cpython-310.pyc +0 -0
- ui/__pycache__/selection_page.cpython-310.pyc +0 -0
- ui/layout.py +373 -0
- ui/main_page.py +192 -0
- ui/selection_page.py +56 -0
config/settings.py
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from dotenv import load_dotenv
|
2 |
+
import os
|
3 |
+
|
4 |
+
load_dotenv()
|
5 |
+
|
6 |
+
HF_API_TOKEN = os.getenv("HF_API_TOKEN")
|
7 |
+
HF_DATASET_NAME = os.getenv("HF_DATASET_NAME")
|
8 |
+
LOCAL_DS_DIRECTORY_PATH = os.getenv("LOCAL_DS_DIRECTORY_PATH")
|
data/concepts.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
data/guidelines/USA/English/instructions.md
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Instructions
|
2 |
+
### Images
|
3 |
+
- The main concept should be clearly visible in the image in typical contexts where the chosen object would appear in real life. Other objects should preferably be visible too.
|
4 |
+
- Photos should be representative of your culture and population (eg. people should look like the people from your ethnicity group).
|
5 |
+
- Images should NOT have empty backgrounds NOR watermarks.
|
6 |
+
- The complexity of the image will contribute to the interestingness of the description.
|
7 |
+
- You can blur all/selected faces before submitting your image. Once submitted, faces cannot be deblurred (you can still, however, re-upload the image if you want to).
|
8 |
+
- If you don’t have personal pictures for a concept, please use public images:
|
9 |
+
- [Google images](images.google.com)
|
10 |
+
|
11 |
+
- When searching on images.google.com, you can click on “Tools” → “Usage rights” → “Creative Commons licenses”
|
12 |
+
- When you then click on an image, you can find the license information in the “License details” in the panel on the right, just below the image
|
13 |
+
- Valid licenses are: Public domain, CC0, CC BY, CC BY-SA
|
14 |
+
- [Unsplash](https://unsplash.com/s/photos/sunrise?license=free)
|
15 |
+
|
16 |
+
- After searching for a concept, you can click on “License” → “Free”
|
17 |
+
- Alternatively, you can add the license information in the URL (eg. for “sunrise” concept): [https://unsplash.com/s/photos/sunrise?license=free](https://unsplash.com/s/photos/sunrise?license=free)
|
18 |
+
- [Pexels](https://www.pexels.com/)
|
19 |
+
|
20 |
+
- All content is for free
|
21 |
+
- [Freepik](https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1)
|
22 |
+
|
23 |
+
- You can choose a “Free” license in the left panel after you search
|
24 |
+
- Example search: https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1
|
25 |
+
### Descriptions
|
26 |
+
#### Overall
|
27 |
+
- Avoid using redundant phrases such as “This is an image of.” However, it is okay to specify the medium, such as “A Painting of.”
|
28 |
+
- Check spelling, grammar, and punctuation.
|
29 |
+
- Relevant text within the image should be completely transcribed within “quotation marks.” For example, if the picture features a person holding a sign, the short caption might be: A woman holding a “Stop war” sign
|
30 |
+
- Start the description with the elements that are critical to understanding the image. This is typically the first thing that strikes you about an image.
|
31 |
+
- Do not mention people’s names. For example, “Taylor Swift” → “A blonde, female singer.”
|
32 |
+
#### Steps
|
33 |
+
- Start with high-level context, and then drill down to details that enhance understanding (ie., What makes this image unique or interesting to look at?).
|
34 |
+
- Describe the scale of the elements within the frame (eg., “small”) and use the relational size of objects or persons to one another (eg., “larger than”).
|
35 |
+
- Identify the color of key elements using familiar names of colors: red, blue, yellow, etc.
|
36 |
+
- Describe the orientation and relationships of image elements to one another. For instance, “on the right” or “to the right of the door.”
|
37 |
+
#### Details
|
38 |
+
- The following guidelines support the description of human physicality:
|
39 |
+
- When particular features are immediately noticeable, they should be described (eg., “a person in a wheelchair”).
|
40 |
+
- It can also be helpful to include information about their body type/build.
|
41 |
+
- Describe the age of represented people in an image using terminology such as “baby,” “child,” “young person,” “adult,” “older person,” etc.
|
42 |
+
- When relevant, describe the skin tone of a person using non-ethnic terms such as “light-skinned” or “dark-skinned” when clearly visible.
|
43 |
+
- When it comes to animals, species name or breed name (eg., “capybara” or “husky”) are preferred over generic concepts (eg., “dog”).
|
44 |
+
- You can mention names of places but also include their common name, especially when not popular. For example, “.. in front of the London Eye” → “... in front of the London Eye, a renowned ferris wheel in London.”
|
data/guidelines/USA/English/intro.md
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders: Multicultural Images and Captions for Inclusive AI
|
2 |
+
|
3 |
+
**Help us bridge the gap between generic AI in English and multicultural AI for everyone!**
|
4 |
+
|
5 |
+
We are researchers from TODO universities around the world, and we need your help to collect images and captions of typical aspects from your culture. This data will improve the next generation of AI models for your country and language!
|
6 |
+
|
7 |
+
|
8 |
+
If you enter your your email and a password below, you will be able revise your images and captions (eg. upload the image from your phone and later write the captions from your laptop).
|
9 |
+
|
10 |
+
At the end of our data collection campaign, we will use emails and passwords to create a list of all contributors and provide rewards to the best ones. For details, see our website (TODO).
|
11 |
+
|
12 |
+
If your country/language is missing, please reach out to us at [[email protected]](mailto:[email protected]).
|
data/guidelines/USA/English/task.md
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders: Multicultural Images and Captions for Inclusive AI
|
2 |
+
|
3 |
+
We want to collect images and annotations that are relevant for your culture.
|
4 |
+
- **Main concept:** Choose the main category and concept for which you want to share data. You can type a new concept if it’s culturally relevant and missing from our list.
|
5 |
+
- **Image:** An image where the *main concept is clearly visible*. The image needs to (1) show the concept *in typical contexts* where it can be found in your country, and (2) *include other* objects/people whenever possible. *Pictures taken by yourself* are preferred. Otherwise, please add a URL for publicly-licensed images from the Web (e.g., from pexels.com or freepik.com). For more details, see “Instructions” below.
|
6 |
+
- **Description:** A long description (around 40 words) that provides extensive and detailed visual information. Descriptions must be *objective*: focus on how you would describe the image to someone who can’t see it, without adding your own opinions/speculations. The text needs to *include the main concept* and describes the content of the image in detail by including:
|
7 |
+
- **Who?** The visual *appearance* and observable *emotions* (e.g., “is smiling”) of persons and animals.
|
8 |
+
- **What?** The *actions* performed in the image.
|
9 |
+
- **Where?** The *setting* of the image, including the size, color and relationships between objects.
|
10 |
+
- **(Optional) Other concepts:** Tag any other concept that is visible in the image.
|
11 |
+
|
12 |
+
See some examples of data we want to collect at the bottom of the page.
|
13 |
+
|
14 |
+
For detailed guidelines, click on the “Instructions” button below.
|
15 |
+
|
16 |
+
### Notes
|
17 |
+
- By participating in this task, you agree to donate images and captions under [CC BY license](https://creativecommons.org/licenses/by/4.0/), which will allow us to share the data with others to improve AI.
|
18 |
+
- You will be able to **update or remove** any provided data at any time if you wish so.
|
19 |
+
- Participants that provide more data, across more concepts and of high quality (see "Instructions" button) will be **rewarded** (see TODO).
|
data/guidelines/_Colombia/Spanish/instructions.md
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Instrucciones
|
2 |
+
### Imágenes
|
3 |
+
- El concepto principal debe ser claramente visible en la imagen en contextos típicos donde ese objeto aparecería en la vida real. Se recomienda que haya otros objetos visibles también.
|
4 |
+
- Las fotos deben ser representativas de tu cultura y población (por ejemplo, las personas deben parecerse a las de tu grupo étnico).
|
5 |
+
- Las imágenes NO deben tener fondos vacíos NI marcas de agua.
|
6 |
+
- La complejidad de la imagen contribuye al nivel de interés de la descripción.
|
7 |
+
- Puedes difuminar todas o algunas caras antes de enviar la imagen. Una vez enviada, no se pueden recuperar las caras sin difuminar (sin embargo, puedes volver a subir la imagen si lo deseas).
|
8 |
+
- Si no tienes fotos personales del concepto, puedes usar imágenes públicas:
|
9 |
+
- Google Imágenes
|
10 |
+
- Al buscar en images.google.com, haz clic en “Herramientas” → “Derechos de uso” → “Licencias Creative Commons”
|
11 |
+
- Al hacer clic en una imagen, puedes ver la información de la licencia en “Detalles de la licencia” en el panel derecho, justo debajo de la imagen
|
12 |
+
- Licencias válidas: Dominio público, CC0, CC BY, CC BY-SA
|
13 |
+
- Unsplash
|
14 |
+
- Después de buscar un concepto, haz clic en “Licencia” → “Gratis”
|
15 |
+
- Alternativamente, puedes añadir la información de licencia en la URL (por ejemplo, para el concepto “amanecer”): [https://unsplash.com/s/photos/sunrise?license=free](https://unsplash.com/s/photos/sunrise?license=free)
|
16 |
+
- [https://www.pexels.com/](https://www.pexels.com/)
|
17 |
+
- Todo el contenido es gratuito
|
18 |
+
- [https://www.freepik.com/](https://www.freepik.com/)
|
19 |
+
- Puedes elegir la licencia “Gratis” en el panel izquierdo después de buscar
|
20 |
+
- Ejemplo de búsqueda: [https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1](https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1)
|
21 |
+
### Descripciones
|
22 |
+
#### En general
|
23 |
+
- Evita frases redundantes como “Esta es una imagen de.” Sin embargo, está bien especificar el medio, como “Una pintura de.”
|
24 |
+
- Revisa ortografía, gramática y puntuación.
|
25 |
+
- Todo texto relevante que aparezca en la imagen debe ser transcrito entre “comillas”. Por ejemplo, si la imagen muestra a una persona con un cartel, la descripción corta podría ser: Una mujer sosteniendo un cartel que dice “No a la guerra”.
|
26 |
+
- Comienza la descripción con los elementos que sean clave para entender la imagen. Normalmente es lo primero que llama la atención.
|
27 |
+
- No menciones nombres de personas. Por ejemplo, “Taylor Swift” → “Una cantante rubia”.
|
28 |
+
#### Pasos
|
29 |
+
- Comienza con un contexto general y luego describe detalles que mejoren la comprensión (por ejemplo: ¿Qué hace que esta imagen sea única o interesante?).
|
30 |
+
- Describe la escala de los elementos en la imagen (por ejemplo, “pequeño”) y el tamaño relativo entre objetos o personas (por ejemplo, “más grande que”).
|
31 |
+
- Identifica el color de los elementos clave usando nombres comunes de colores: rojo, azul, amarillo, etc.
|
32 |
+
- Describe la orientación y relaciones entre elementos de la imagen. Por ejemplo, “a la derecha” o “a la derecha de la puerta”.
|
33 |
+
#### Detalles
|
34 |
+
- Las siguientes pautas apoyan la descripción de características humanas:
|
35 |
+
- Cuando ciertos rasgos sean inmediatamente notorios, deben ser descritos (por ejemplo, “una persona en silla de ruedas”).
|
36 |
+
- También es útil incluir información sobre el tipo de cuerpo o contextura.
|
37 |
+
- Describe la edad de las personas en la imagen usando términos como “bebé,” “niño/a,” “persona joven,” “adulto/a,” “persona mayor,” etc.
|
38 |
+
- Cuando sea relevante, describe el tono de piel usando términos no étnicos como “de piel clara” o “de piel oscura” si es claramente visible.
|
39 |
+
- Para animales, es preferible usar el nombre de la especie o raza (por ejemplo, “capibara” o “husky”) en lugar de conceptos genéricos como “perro”.
|
40 |
+
- Puedes mencionar nombres de lugares, pero incluye también su nombre común si no es conocido. Por ejemplo, “... frente al London Eye” → “... frente al London Eye, una famosa rueda de la fortuna en Londres.”
|
data/guidelines/_Colombia/Spanish/intro.md
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders: Imágenes y Descripciones Multiculturales para una IA Inclusiva
|
2 |
+
|
3 |
+
**¡Ayúdanos a cerrar la brecha entre una IA genérica en inglés y una IA multicultural para todos!**
|
4 |
+
|
5 |
+
Somos investigadores de distintas universidades alrededor del mundo, y necesitamos tu ayuda para recolectar imágenes y descripciones de aspectos típicos de tu cultura. ¡Estos datos ayudarán a mejorar la próxima generación de modelos de IA para tu país e idioma!
|
6 |
+
|
7 |
+
Si ingresas tu correo electrónico y una contraseña a continuación, podrás revisar tus imágenes y descripciones (por ejemplo, subir la imagen desde tu celular y luego escribir la descripción desde tu computador portátil).
|
8 |
+
|
9 |
+
Al finalizar nuestra campaña de recolección de datos, utilizaremos los correos electrónicos y contraseñas para crear una lista de todas las personas que contribuyeron y entregar recompensas a las mejores. Para más detalles, visita nuestro sitio web (TODO).
|
10 |
+
|
11 |
+
Si tu país o idioma no aparece en la lista, por favor contáctanos a [[email protected]](mailto:[email protected]).
|
data/guidelines/_Colombia/Spanish/task.md
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders: Imágenes y Descripciones Multiculturales para una IA Inclusiva
|
2 |
+
|
3 |
+
Queremos recolectar imágenes y anotaciones que sean relevantes para tu cultura.
|
4 |
+
- **Concepto principal:** Elige la categoría y el concepto principal sobre los cuales deseas compartir datos. Puedes escribir un nuevo concepto si es culturalmente relevante y no aparece en nuestra lista.
|
5 |
+
- **Imagen:** Una imagen donde el *concepto principal sea claramente visible*. La imagen debe (1) mostrar el concepto *en contextos típicos* en los que se encuentra en tu país, y (2) *incluir otros* objetos/personas siempre que sea posible. *Se prefieren las fotos tomadas por ti*. Si no las tienes, por favor agrega un enlace a imágenes con licencia pública en la web (por ejemplo, de pexels.com o freepik.com). Para más detalles, consulta la sección de “Instrucciones” abajo.
|
6 |
+
- **Otros conceptos:** Etiqueta cualquier otro concepto visible en la imagen.
|
7 |
+
- **Descripción:** Una descripción larga (alrededor de 40 palabras) que brinde información visual extensa y detallada. Las descripciones deben ser *objetivas*: enfócate en cómo describirías la imagen a alguien que no puede verla, sin añadir opiniones o suposiciones personales. El texto debe *incluir el concepto principal* y describir el contenido de la imagen en detalle, incluyendo:
|
8 |
+
- **¿Quién?** La *apariencia visual* y las *emociones observables* (por ejemplo, “está sonriendo”) de personas y animales.
|
9 |
+
- **¿Qué?** Las *acciones* que se realizan en la imagen.
|
10 |
+
- **¿Dónde?** El *entorno* de la imagen, incluyendo tamaño, color y relaciones entre objetos.
|
11 |
+
|
12 |
+
Consulta algunos ejemplos de los datos que queremos recolectar al final de esta página.
|
13 |
+
|
14 |
+
Para ver las directrices detalladas, haz clic en el botón de “Instrucciones” más abajo.
|
15 |
+
|
16 |
+
### Notas
|
17 |
+
- Al participar en esta tarea, aceptas donar imágenes y descripciones bajo la [licencia CC BY](https://creativecommons.org/licenses/by/4.0/), lo cual nos permitirá compartir los datos con otros para mejorar la IA.
|
18 |
+
- Puedes eliminar cualquier dato que hayas proporcionado en cualquier momento si así lo deseas.
|
data/guidelines/_France/French/instructions.md
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Instructions
|
2 |
+
### Images
|
3 |
+
- Le concept principal doit être clairement visible sur l’image dans des contextes typiques où cet objet apparaît dans la vie réelle. D’autres objets peuvent aussi être visibles.
|
4 |
+
- Les photos doivent représenter votre culture et votre population (par exemple, les personnes doivent ressembler à celles de votre groupe ethnique).
|
5 |
+
- Les images ne doivent PAS avoir de fonds vides ni de filigranes.
|
6 |
+
- La complexité de l’image contribue à l’intérêt de la description.
|
7 |
+
- Vous pouvez flouter tout ou partie des visages avant de soumettre l’image. Une fois soumise, l’image ne pourra plus être "dé-floutée" (vous pourrez néanmoins la remplacer).
|
8 |
+
- Si vous ne possédez pas d’images personnelles pour un concept, utilisez des images libres de droit :
|
9 |
+
- Google Images
|
10 |
+
- Sur images.google.com, cliquez sur “Outils” → “Droits d’usage” → “Licences Creative Commons”
|
11 |
+
- Cliquez sur une image pour voir les “Détails de la licence” dans le panneau de droite, sous l’image
|
12 |
+
- Licences valides : Domaine public, CC0, CC BY, CC BY-SA
|
13 |
+
- Unsplash
|
14 |
+
- Après avoir cherché un concept, cliquez sur “Licence” → “Gratuite”
|
15 |
+
- Ou bien ajoutez `?license=free` à l’URL (ex. pour “lever de soleil”) : [https://unsplash.com/s/photos/sunrise?license=free](https://unsplash.com/s/photos/sunrise?license=free)
|
16 |
+
- [https://www.pexels.com/](https://www.pexels.com/)
|
17 |
+
- Tout le contenu est gratuit
|
18 |
+
- [https://www.freepik.com/](https://www.freepik.com/)
|
19 |
+
- Choisissez “Gratuit” dans le panneau gauche après la recherche
|
20 |
+
- Exemple de recherche : [https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1](https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1)
|
21 |
+
### Descriptions
|
22 |
+
#### Généralités
|
23 |
+
- Évitez les phrases redondantes comme “Ceci est une image de”. Cependant, indiquer le support (ex. “Une peinture de…”) est autorisé.
|
24 |
+
- Vérifiez l’orthographe, la grammaire et la ponctuation.
|
25 |
+
- Le texte visible dans l’image doit être retranscrit entre “guillemets”. Exemple : Une femme tenant une pancarte “Stop à la guerre”.
|
26 |
+
- Commencez par les éléments essentiels pour comprendre l’image — ce qui attire d’abord le regard.
|
27 |
+
- Ne mentionnez pas les noms de personnes célèbres. Exemple : “Taylor Swift” → “Une chanteuse blonde”.
|
28 |
+
#### Étapes
|
29 |
+
- Commencez par un contexte global, puis ajoutez des détails qui enrichissent la compréhension (Qu’est-ce qui rend cette image intéressante ?).
|
30 |
+
- Décrivez la taille des éléments (ex. “petit”) et les proportions entre eux (ex. “plus grand que”).
|
31 |
+
- Utilisez des noms de couleurs simples : rouge, bleu, jaune, etc.
|
32 |
+
- Décrivez l’orientation et les relations spatiales entre éléments : “à droite”, “devant la porte”, etc.
|
33 |
+
#### Détails
|
34 |
+
- Pour décrire les personnes :
|
35 |
+
- Si une caractéristique est immédiatement visible, mentionnez-la (ex. “une personne en fauteuil roulant”).
|
36 |
+
- Donnez des informations sur la corpulence si pertinent.
|
37 |
+
- Décrivez l’âge approximatif avec des termes comme “bébé”, “enfant”, “jeune”, “adulte”, “personne âgée”.
|
38 |
+
- Si pertinent, décrivez la carnation de manière neutre : “peau claire”, “peau foncée”.
|
39 |
+
- Pour les animaux, précisez l’espèce ou la race (ex. “capybara” ou “husky”) plutôt que des termes génériques comme “chien”.
|
40 |
+
- Vous pouvez mentionner des lieux, mais précisez-les si peu connus : “... devant le London Eye, une célèbre grande roue à Londres.”
|
data/guidelines/_France/French/intro.md
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders : Images et légendes multiculturelles pour une IA inclusive
|
2 |
+
|
3 |
+
**Aidez-nous à combler le fossé entre une IA générique en anglais et une IA multiculturelle pour tous !**
|
4 |
+
|
5 |
+
Nous sommes des chercheurs d’universités du monde entier et nous avons besoin de votre aide pour collecter des images et des descriptions d’aspects typiques de votre culture. Ces données permettront d’améliorer la prochaine génération de modèles d’IA pour votre pays et votre langue !
|
6 |
+
|
7 |
+
Si vous saisissez votre adresse email et un mot de passe ci-dessous, vous pourrez revoir vos images et légendes (par exemple, télécharger l’image depuis votre téléphone et plus tard écrire les descriptions depuis votre ordinateur).
|
8 |
+
|
9 |
+
À la fin de notre campagne de collecte de données, nous utiliserons les adresses email et mots de passe pour établir une liste de tous les contributeurs et récompenser les meilleurs. Pour plus de détails, consultez notre site web (TODO).
|
10 |
+
|
11 |
+
Si votre pays ou langue est manquant(e), contactez-nous à [[email protected]](mailto:[email protected]).
|
data/guidelines/_France/French/task.md
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders : Images et légendes multiculturelles pour une IA inclusive
|
2 |
+
|
3 |
+
Nous souhaitons collecter des images et des annotations qui sont pertinentes pour votre culture.
|
4 |
+
- **Concept principal :** Choisissez la catégorie et le concept principal que vous souhaitez partager. Vous pouvez également saisir un nouveau concept s’il est culturellement pertinent et absent de notre liste.
|
5 |
+
- **Image :** Une image où le *concept principal est clairement visible*. L’image doit (1) montrer le concept *dans des contextes typiques* de votre pays, et (2) *inclure d’autres* objets ou personnes si possible. *Les photos prises par vous-même sont préférées*. Sinon, veuillez ajouter l’URL d’une image sous licence publique (par exemple, de pexels.com ou freepik.com). Pour plus de détails, voir la section “Instructions” ci-dessous.
|
6 |
+
- **Autres concepts :** Identifiez tout autre concept visible sur l’image.
|
7 |
+
- **Description :** Une description longue (environ 40 mots) qui fournit des informations visuelles détaillées. Les descriptions doivent être *objectives* : décrivez l’image comme si vous la racontiez à une personne non voyante, sans y ajouter d’avis ou de suppositions. Le texte doit *inclure le concept principal* et décrire le contenu de manière précise, en répondant à :
|
8 |
+
- **Qui ?** L’*apparence visuelle* et les *émotions observables* (ex. “sourit”) des personnes et animaux.
|
9 |
+
- **Quoi ?** Les *actions* réalisées dans l’image.
|
10 |
+
- **Où ?** Le *contexte* de l’image, incluant la taille, les couleurs et les relations entre les objets.
|
11 |
+
|
12 |
+
Des exemples de données sont disponibles en bas de page.
|
13 |
+
|
14 |
+
Pour consulter les consignes détaillées, cliquez sur le bouton “Instructions” ci-dessous.
|
15 |
+
|
16 |
+
### Remarques
|
17 |
+
- En participant à cette tâche, vous acceptez de céder les images et descriptions sous [licence CC BY](https://creativecommons.org/licenses/by/4.0/), ce qui nous permettra de partager ces données pour améliorer l’IA.
|
18 |
+
- Vous pourrez supprimer vos données à tout moment si vous le souhaitez.
|
data/guidelines/_Italy/Italian/instructions.md
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Istruzioni
|
2 |
+
### Immagini
|
3 |
+
- Il concetto principale deve essere chiaramente visibile nell’immagine, in contesti tipici in cui l’oggetto apparirebbe nella vita reale. È preferibile che siano presenti anche altri oggetti.
|
4 |
+
- Le foto devono rappresentare la tua cultura e popolazione (es. le persone dovrebbero assomigliare a quelle del tuo gruppo etnico).
|
5 |
+
- Le immagini NON devono avere sfondi vuoti NÉ filigrane.
|
6 |
+
- La complessità dell’immagine contribuirà a rendere la descrizione più interessante.
|
7 |
+
- Puoi sfocare tutti o alcuni volti prima dell’invio. Una volta inviata, l’immagine non può essere de-sfocata (ma puoi comunque ricaricare una nuova versione).
|
8 |
+
- Se non hai immagini personali, puoi usare risorse pubbliche:
|
9 |
+
- Google Immagini
|
10 |
+
- Su images.google.com clicca su “Strumenti” → “Diritti di utilizzo” → “Licenze Creative Commons”
|
11 |
+
- Cliccando sull’immagine trovi le informazioni sulla licenza in “Dettagli licenza” nel pannello a destra
|
12 |
+
- Licenze valide: dominio pubblico, CC0, CC BY, CC BY-SA
|
13 |
+
- Unsplash
|
14 |
+
- Dopo aver cercato un concetto, clicca su “Licenza” → “Gratis”
|
15 |
+
- Oppure aggiungi `?license=free` all’URL (es. per “alba”): [https://unsplash.com/s/photos/sunrise?license=free](https://unsplash.com/s/photos/sunrise?license=free)
|
16 |
+
- [https://www.pexels.com/](https://www.pexels.com/)
|
17 |
+
- Tutti i contenuti sono gratuiti
|
18 |
+
- [https://www.freepik.com/](https://www.freepik.com/)
|
19 |
+
- Seleziona “Free” nel pannello a sinistra dopo la ricerca
|
20 |
+
- Esempio di ricerca: [https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1](https://www.freepik.com/search?format=search&last_filter=selection&last_value=1&query=sunrise&selection=1)
|
21 |
+
### Descrizioni
|
22 |
+
#### Generale
|
23 |
+
- Evita frasi ridondanti come “Questa è un’immagine di...”. Tuttavia, è accettabile specificare il tipo di contenuto, come “Un dipinto di...”
|
24 |
+
- Controlla ortografia, grammatica e punteggiatura.
|
25 |
+
- Ogni testo visibile nell’immagine deve essere trascritto tra “virgolette”. Esempio: Una donna che tiene un cartello con scritto “No alla guerra”.
|
26 |
+
- Inizia la descrizione dagli elementi più importanti per capire l’immagine, ovvero ciò che colpisce per primo.
|
27 |
+
- Non menzionare nomi propri. Esempio: “Taylor Swift” → “Una cantante bionda”.
|
28 |
+
#### Passaggi
|
29 |
+
- Inizia con un contesto generale, poi aggiungi dettagli che rendano l’immagine più comprensibile (es. cosa la rende interessante o unica?).
|
30 |
+
- Descrivi le dimensioni degli elementi presenti (es. “piccolo”) e la loro proporzione rispetto agli altri (es. “più grande di”).
|
31 |
+
- Indica i colori degli elementi principali con nomi comuni: rosso, blu, giallo, ecc.
|
32 |
+
- Descrivi la posizione e le relazioni spaziali tra gli elementi: “a destra”, “di fronte alla porta”, ecc.
|
33 |
+
#### Dettagli
|
34 |
+
- Le seguenti linee guida aiutano nella descrizione delle persone:
|
35 |
+
- Se ci sono caratteristiche evidenti, vanno descritte (es. “una persona in sedia a rotelle”).
|
36 |
+
- È utile indicare il tipo di corporatura.
|
37 |
+
- Descrivi l’età usando termini come “neonato”, “bambino”, “giovane”, “adulto”, “anziano”.
|
38 |
+
- Quando rilevante, indica il tono della pelle usando termini generici e non etnici, come “pelle chiara” o “pelle scura”.
|
39 |
+
- Per gli animali, è preferibile indicare la specie o razza (es. “cavcapibara” o “husky”) piuttosto che termini generici come “cane”.
|
40 |
+
- Puoi nominare i luoghi, ma specifica anche il nome comune se poco conosciuto. Esempio: “... davanti al London Eye” → “... davanti al London Eye, una famosa ruota panoramica a Londra”.
|
data/guidelines/_Italy/Italian/intro.md
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders: Immagini e descrizioni multiculturali per un'IA inclusiva
|
2 |
+
|
3 |
+
**Aiutaci a colmare il divario tra un’IA generica in inglese e un’IA multiculturale per tutti!**
|
4 |
+
|
5 |
+
Siamo ricercatori di diverse università in tutto il mondo e abbiamo bisogno del tuo aiuto per raccogliere immagini e descrizioni di aspetti tipici della tua cultura. Questi dati aiuteranno a migliorare la prossima generazione di modelli di IA per il tuo paese e la tua lingua!
|
6 |
+
|
7 |
+
Se inserisci la tua email e una password qui sotto, potrai rivedere le tue immagini e descrizioni (es. caricare l’immagine dal telefono e scrivere la descrizione più tardi dal computer).
|
8 |
+
|
9 |
+
Alla fine della nostra campagna di raccolta dati, useremo email e password per creare una lista di tutti i partecipanti e premiare i migliori. Per i dettagli, visita il nostro sito web (TODO).
|
10 |
+
|
11 |
+
Se il tuo paese o la tua lingua non sono presenti, contattaci a [[email protected]](mailto:[email protected]).
|
data/guidelines/_Italy/Italian/task.md
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wonders: Immagini e descrizioni multiculturali per un'IA inclusiva
|
2 |
+
|
3 |
+
Vogliamo raccogliere immagini e annotazioni che siano rilevanti per la tua cultura.
|
4 |
+
- **Concetto principale:** Scegli la categoria e il concetto principale che vuoi condividere. Puoi anche scrivere un nuovo concetto se è culturalmente rilevante e non presente nella nostra lista.
|
5 |
+
- **Immagine:** Un’immagine in cui il *concetto principale sia chiaramente visibile*. Deve (1) mostrare il concetto *in contesti tipici* in cui appare nel tuo paese, e (2) *includere altri* oggetti o persone quando possibile. *Le foto scattate personalmente* sono preferite. In alternativa, puoi fornire un link a immagini con licenza libera (ad esempio da pexels.com o freepik.com). Per maggiori dettagli, vedi la sezione “Istruzioni” qui sotto.
|
6 |
+
- **Altri concetti:** Aggiungi qualsiasi altro concetto visibile nell’immagine.
|
7 |
+
- **Descrizione:** Una descrizione lunga (circa 40 parole) che fornisca informazioni visive dettagliate. Le descrizioni devono essere *oggettive*: descrivi l’immagine come se la raccontassi a una persona non vedente, senza aggiungere opinioni o interpretazioni personali. Il testo deve *includere il concetto principale* e descrivere il contenuto dell’immagine in dettaglio, rispondendo a:
|
8 |
+
- **Chi?** Aspetto *visivo* ed *emozioni osservabili* (es. “sta sorridendo”) di persone e animali.
|
9 |
+
- **Cosa?** Le *azioni* mostrate nell’immagine.
|
10 |
+
- **Dove?** L’*ambientazione*, inclusi dimensioni, colori e relazioni tra gli oggetti.
|
11 |
+
|
12 |
+
In fondo alla pagina trovi esempi dei dati che vogliamo raccogliere.
|
13 |
+
|
14 |
+
Per linee guida dettagliate, clicca sul pulsante “Istruzioni” qui sotto.
|
15 |
+
|
16 |
+
### Note
|
17 |
+
- Partecipando a questo compito, accetti di donare immagini e descrizioni con licenza [CC BY](https://creativecommons.org/licenses/by/4.0/), che ci permette di condividerle per migliorare l’IA.
|
18 |
+
- Potrai rimuovere in qualsiasi momento i dati che hai fornito.
|
data/lang2eng_map.py
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
lang2eng_mapping = {
|
2 |
+
"English": "English",
|
3 |
+
"Español": "Spanish",
|
4 |
+
"Français": "French",
|
5 |
+
"Deutsch": "German",
|
6 |
+
"Italiano": "Italian",
|
7 |
+
"Português": "Portuguese",
|
8 |
+
"Nederlands": "Dutch",
|
9 |
+
"Русский": "Russian",
|
10 |
+
"中文": "Chinese",
|
11 |
+
"日本語": "Japanese",
|
12 |
+
"한국어": "Korean",
|
13 |
+
"العربية": "Arabic",
|
14 |
+
"हिन्दी": "Hindi",
|
15 |
+
"বাংলা": "Bengali",
|
16 |
+
"Türkçe": "Turkish",
|
17 |
+
"Polski": "Polish",
|
18 |
+
"Svenska": "Swedish",
|
19 |
+
"Dansk": "Danish",
|
20 |
+
"Suomi": "Finnish",
|
21 |
+
"Norsk": "Norwegian",
|
22 |
+
"Ελληνικά": "Greek",
|
23 |
+
"ภาษาไทย": "Thai"
|
24 |
+
# Add more mappings as needed
|
25 |
+
}
|
data/metadata.json
ADDED
@@ -0,0 +1,1414 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"USA": {
|
3 |
+
"English": {
|
4 |
+
"Country": "Country",
|
5 |
+
"Language": "Language",
|
6 |
+
"Category": "Main Category",
|
7 |
+
"Email": "Email (Optional)",
|
8 |
+
"Password": "Password (Optional)",
|
9 |
+
"Concept": "Main Concept",
|
10 |
+
"Image": "Image",
|
11 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
12 |
+
"Description": "Description",
|
13 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
14 |
+
"Clear_btn": "Clear",
|
15 |
+
"Submit_btn": "Submit",
|
16 |
+
"Exclude_btn": "Delete",
|
17 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
18 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
19 |
+
"Timestamp": "Timestamp",
|
20 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
21 |
+
"Browse_text": "## Browse Data",
|
22 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
23 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
24 |
+
"Task": "data/guidelines/USA/English/task.md",
|
25 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
26 |
+
}
|
27 |
+
},
|
28 |
+
"Italy": {
|
29 |
+
"Italian": {
|
30 |
+
"Country": "Country",
|
31 |
+
"Language": "Language",
|
32 |
+
"Category": "Main Category",
|
33 |
+
"Email": "Email (Optional)",
|
34 |
+
"Password": "Password (Optional)",
|
35 |
+
"Concept": "Main Concept",
|
36 |
+
"Image": "Image",
|
37 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
38 |
+
"Description": "Description",
|
39 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
40 |
+
"Clear_btn": "Clear",
|
41 |
+
"Submit_btn": "Submit",
|
42 |
+
"Exclude_btn": "Delete",
|
43 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
44 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
45 |
+
"Timestamp": "Timestamp",
|
46 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
47 |
+
"Browse_text": "## Browse Data",
|
48 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
49 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
50 |
+
"Task": "data/guidelines/USA/English/task.md",
|
51 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
52 |
+
}
|
53 |
+
},
|
54 |
+
"France": {
|
55 |
+
"French": {
|
56 |
+
"Country": "Country",
|
57 |
+
"Language": "Language",
|
58 |
+
"Category": "Main Category",
|
59 |
+
"Email": "Email (Optional)",
|
60 |
+
"Password": "Password (Optional)",
|
61 |
+
"Concept": "Main Concept",
|
62 |
+
"Image": "Image",
|
63 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
64 |
+
"Description": "Description",
|
65 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
66 |
+
"Clear_btn": "Clear",
|
67 |
+
"Submit_btn": "Submit",
|
68 |
+
"Exclude_btn": "Delete",
|
69 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
70 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
71 |
+
"Timestamp": "Timestamp",
|
72 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
73 |
+
"Browse_text": "## Browse Data",
|
74 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
75 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
76 |
+
"Task": "data/guidelines/USA/English/task.md",
|
77 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
78 |
+
}
|
79 |
+
},
|
80 |
+
"Colombia": {
|
81 |
+
"Spanish": {
|
82 |
+
"Country": "Country",
|
83 |
+
"Language": "Language",
|
84 |
+
"Category": "Main Category",
|
85 |
+
"Email": "Email (Optional)",
|
86 |
+
"Password": "Password (Optional)",
|
87 |
+
"Concept": "Main Concept",
|
88 |
+
"Image": "Image",
|
89 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
90 |
+
"Description": "Description",
|
91 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
92 |
+
"Clear_btn": "Clear",
|
93 |
+
"Submit_btn": "Submit",
|
94 |
+
"Exclude_btn": "Delete",
|
95 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
96 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
97 |
+
"Timestamp": "Timestamp",
|
98 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
99 |
+
"Browse_text": "## Browse Data",
|
100 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
101 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
102 |
+
"Task": "data/guidelines/USA/English/task.md",
|
103 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
104 |
+
}
|
105 |
+
},
|
106 |
+
"Arabian Gulf": {
|
107 |
+
"Arabic": {
|
108 |
+
"Country": "Country",
|
109 |
+
"Language": "Language",
|
110 |
+
"Category": "Main Category",
|
111 |
+
"Email": "Email (Optional)",
|
112 |
+
"Password": "Password (Optional)",
|
113 |
+
"Concept": "Main Concept",
|
114 |
+
"Image": "Image",
|
115 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
116 |
+
"Description": "Description",
|
117 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
118 |
+
"Clear_btn": "Clear",
|
119 |
+
"Submit_btn": "Submit",
|
120 |
+
"Exclude_btn": "Delete",
|
121 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
122 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
123 |
+
"Timestamp": "Timestamp",
|
124 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
125 |
+
"Browse_text": "## Browse Data",
|
126 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
127 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
128 |
+
"Task": "data/guidelines/USA/English/task.md",
|
129 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
130 |
+
}
|
131 |
+
},
|
132 |
+
"Argentina": {
|
133 |
+
"Spanish": {
|
134 |
+
"Country": "Country",
|
135 |
+
"Language": "Language",
|
136 |
+
"Category": "Main Category",
|
137 |
+
"Email": "Email (Optional)",
|
138 |
+
"Password": "Password (Optional)",
|
139 |
+
"Concept": "Main Concept",
|
140 |
+
"Image": "Image",
|
141 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
142 |
+
"Description": "Description",
|
143 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
144 |
+
"Clear_btn": "Clear",
|
145 |
+
"Submit_btn": "Submit",
|
146 |
+
"Exclude_btn": "Delete",
|
147 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
148 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
149 |
+
"Timestamp": "Timestamp",
|
150 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
151 |
+
"Browse_text": "## Browse Data",
|
152 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
153 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
154 |
+
"Task": "data/guidelines/USA/English/task.md",
|
155 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
156 |
+
}
|
157 |
+
},
|
158 |
+
"Australia": {
|
159 |
+
"English": {
|
160 |
+
"Country": "Country",
|
161 |
+
"Language": "Language",
|
162 |
+
"Category": "Main Category",
|
163 |
+
"Email": "Email (Optional)",
|
164 |
+
"Password": "Password (Optional)",
|
165 |
+
"Concept": "Main Concept",
|
166 |
+
"Image": "Image",
|
167 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
168 |
+
"Description": "Description",
|
169 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
170 |
+
"Clear_btn": "Clear",
|
171 |
+
"Submit_btn": "Submit",
|
172 |
+
"Exclude_btn": "Delete",
|
173 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
174 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
175 |
+
"Timestamp": "Timestamp",
|
176 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
177 |
+
"Browse_text": "## Browse Data",
|
178 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
179 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
180 |
+
"Task": "data/guidelines/USA/English/task.md",
|
181 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
182 |
+
}
|
183 |
+
},
|
184 |
+
"Bangladesh": {
|
185 |
+
"Bengali": {
|
186 |
+
"Country": "Country",
|
187 |
+
"Language": "Language",
|
188 |
+
"Category": "Main Category",
|
189 |
+
"Email": "Email (Optional)",
|
190 |
+
"Password": "Password (Optional)",
|
191 |
+
"Concept": "Main Concept",
|
192 |
+
"Image": "Image",
|
193 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
194 |
+
"Description": "Description",
|
195 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
196 |
+
"Clear_btn": "Clear",
|
197 |
+
"Submit_btn": "Submit",
|
198 |
+
"Exclude_btn": "Delete",
|
199 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
200 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
201 |
+
"Timestamp": "Timestamp",
|
202 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
203 |
+
"Browse_text": "## Browse Data",
|
204 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
205 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
206 |
+
"Task": "data/guidelines/USA/English/task.md",
|
207 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
208 |
+
}
|
209 |
+
},
|
210 |
+
"Belgium": {
|
211 |
+
"French": {
|
212 |
+
"Country": "Country",
|
213 |
+
"Language": "Language",
|
214 |
+
"Category": "Main Category",
|
215 |
+
"Email": "Email (Optional)",
|
216 |
+
"Password": "Password (Optional)",
|
217 |
+
"Concept": "Main Concept",
|
218 |
+
"Image": "Image",
|
219 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
220 |
+
"Description": "Description",
|
221 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
222 |
+
"Clear_btn": "Clear",
|
223 |
+
"Submit_btn": "Submit",
|
224 |
+
"Exclude_btn": "Delete",
|
225 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
226 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
227 |
+
"Timestamp": "Timestamp",
|
228 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
229 |
+
"Browse_text": "## Browse Data",
|
230 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
231 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
232 |
+
"Task": "data/guidelines/USA/English/task.md",
|
233 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
234 |
+
}
|
235 |
+
},
|
236 |
+
"Brazil": {
|
237 |
+
"Portuguese": {
|
238 |
+
"Country": "Country",
|
239 |
+
"Language": "Language",
|
240 |
+
"Category": "Main Category",
|
241 |
+
"Email": "Email (Optional)",
|
242 |
+
"Password": "Password (Optional)",
|
243 |
+
"Concept": "Main Concept",
|
244 |
+
"Image": "Image",
|
245 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
246 |
+
"Description": "Description",
|
247 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
248 |
+
"Clear_btn": "Clear",
|
249 |
+
"Submit_btn": "Submit",
|
250 |
+
"Exclude_btn": "Delete",
|
251 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
252 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
253 |
+
"Timestamp": "Timestamp",
|
254 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
255 |
+
"Browse_text": "## Browse Data",
|
256 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
257 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
258 |
+
"Task": "data/guidelines/USA/English/task.md",
|
259 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
260 |
+
}
|
261 |
+
},
|
262 |
+
"Bulgaria": {
|
263 |
+
"Bulgarian": {
|
264 |
+
"Country": "Country",
|
265 |
+
"Language": "Language",
|
266 |
+
"Category": "Main Category",
|
267 |
+
"Email": "Email (Optional)",
|
268 |
+
"Password": "Password (Optional)",
|
269 |
+
"Concept": "Main Concept",
|
270 |
+
"Image": "Image",
|
271 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
272 |
+
"Description": "Description",
|
273 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
274 |
+
"Clear_btn": "Clear",
|
275 |
+
"Submit_btn": "Submit",
|
276 |
+
"Exclude_btn": "Delete",
|
277 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
278 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
279 |
+
"Timestamp": "Timestamp",
|
280 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
281 |
+
"Browse_text": "## Browse Data",
|
282 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
283 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
284 |
+
"Task": "data/guidelines/USA/English/task.md",
|
285 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
286 |
+
}
|
287 |
+
},
|
288 |
+
"Chile": {
|
289 |
+
"Spanish": {
|
290 |
+
"Country": "Country",
|
291 |
+
"Language": "Language",
|
292 |
+
"Category": "Main Category",
|
293 |
+
"Email": "Email (Optional)",
|
294 |
+
"Password": "Password (Optional)",
|
295 |
+
"Concept": "Main Concept",
|
296 |
+
"Image": "Image",
|
297 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
298 |
+
"Description": "Description",
|
299 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
300 |
+
"Clear_btn": "Clear",
|
301 |
+
"Submit_btn": "Submit",
|
302 |
+
"Exclude_btn": "Delete",
|
303 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
304 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
305 |
+
"Timestamp": "Timestamp",
|
306 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
307 |
+
"Browse_text": "## Browse Data",
|
308 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
309 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
310 |
+
"Task": "data/guidelines/USA/English/task.md",
|
311 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
312 |
+
}
|
313 |
+
},
|
314 |
+
"China": {
|
315 |
+
"Mandarin Chinese": {
|
316 |
+
"Country": "Country",
|
317 |
+
"Language": "Language",
|
318 |
+
"Category": "Main Category",
|
319 |
+
"Email": "Email (Optional)",
|
320 |
+
"Password": "Password (Optional)",
|
321 |
+
"Concept": "Main Concept",
|
322 |
+
"Image": "Image",
|
323 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
324 |
+
"Description": "Description",
|
325 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
326 |
+
"Clear_btn": "Clear",
|
327 |
+
"Submit_btn": "Submit",
|
328 |
+
"Exclude_btn": "Delete",
|
329 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
330 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
331 |
+
"Timestamp": "Timestamp",
|
332 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
333 |
+
"Browse_text": "## Browse Data",
|
334 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
335 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
336 |
+
"Task": "data/guidelines/USA/English/task.md",
|
337 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
338 |
+
},
|
339 |
+
"Yue Chinese": {
|
340 |
+
"Country": "Country",
|
341 |
+
"Language": "Language",
|
342 |
+
"Category": "Main Category",
|
343 |
+
"Email": "Email (Optional)",
|
344 |
+
"Password": "Password (Optional)",
|
345 |
+
"Concept": "Main Concept",
|
346 |
+
"Image": "Image",
|
347 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
348 |
+
"Description": "Description",
|
349 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
350 |
+
"Clear_btn": "Clear",
|
351 |
+
"Submit_btn": "Submit",
|
352 |
+
"Exclude_btn": "Delete",
|
353 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
354 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
355 |
+
"Timestamp": "Timestamp",
|
356 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
357 |
+
"Browse_text": "## Browse Data",
|
358 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
359 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
360 |
+
"Task": "data/guidelines/USA/English/task.md",
|
361 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
362 |
+
}
|
363 |
+
},
|
364 |
+
"Czechia": {
|
365 |
+
"Czech": {
|
366 |
+
"Country": "Country",
|
367 |
+
"Language": "Language",
|
368 |
+
"Category": "Main Category",
|
369 |
+
"Email": "Email (Optional)",
|
370 |
+
"Password": "Password (Optional)",
|
371 |
+
"Concept": "Main Concept",
|
372 |
+
"Image": "Image",
|
373 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
374 |
+
"Description": "Description",
|
375 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
376 |
+
"Clear_btn": "Clear",
|
377 |
+
"Submit_btn": "Submit",
|
378 |
+
"Exclude_btn": "Delete",
|
379 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
380 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
381 |
+
"Timestamp": "Timestamp",
|
382 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
383 |
+
"Browse_text": "## Browse Data",
|
384 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
385 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
386 |
+
"Task": "data/guidelines/USA/English/task.md",
|
387 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
388 |
+
}
|
389 |
+
},
|
390 |
+
"Denmark": {
|
391 |
+
"Danish": {
|
392 |
+
"Country": "Country",
|
393 |
+
"Language": "Language",
|
394 |
+
"Category": "Main Category",
|
395 |
+
"Email": "Email (Optional)",
|
396 |
+
"Password": "Password (Optional)",
|
397 |
+
"Concept": "Main Concept",
|
398 |
+
"Image": "Image",
|
399 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
400 |
+
"Description": "Description",
|
401 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
402 |
+
"Clear_btn": "Clear",
|
403 |
+
"Submit_btn": "Submit",
|
404 |
+
"Exclude_btn": "Delete",
|
405 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
406 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
407 |
+
"Timestamp": "Timestamp",
|
408 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
409 |
+
"Browse_text": "## Browse Data",
|
410 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
411 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
412 |
+
"Task": "data/guidelines/USA/English/task.md",
|
413 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
414 |
+
}
|
415 |
+
},
|
416 |
+
"Ecuador": {
|
417 |
+
"Spanish": {
|
418 |
+
"Country": "Country",
|
419 |
+
"Language": "Language",
|
420 |
+
"Category": "Main Category",
|
421 |
+
"Email": "Email (Optional)",
|
422 |
+
"Password": "Password (Optional)",
|
423 |
+
"Concept": "Main Concept",
|
424 |
+
"Image": "Image",
|
425 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
426 |
+
"Description": "Description",
|
427 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
428 |
+
"Clear_btn": "Clear",
|
429 |
+
"Submit_btn": "Submit",
|
430 |
+
"Exclude_btn": "Delete",
|
431 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
432 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
433 |
+
"Timestamp": "Timestamp",
|
434 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
435 |
+
"Browse_text": "## Browse Data",
|
436 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
437 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
438 |
+
"Task": "data/guidelines/USA/English/task.md",
|
439 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
440 |
+
}
|
441 |
+
},
|
442 |
+
"Egypt": {
|
443 |
+
"Egyptian Arabic": {
|
444 |
+
"Country": "Country",
|
445 |
+
"Language": "Language",
|
446 |
+
"Category": "Main Category",
|
447 |
+
"Email": "Email (Optional)",
|
448 |
+
"Password": "Password (Optional)",
|
449 |
+
"Concept": "Main Concept",
|
450 |
+
"Image": "Image",
|
451 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
452 |
+
"Description": "Description",
|
453 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
454 |
+
"Clear_btn": "Clear",
|
455 |
+
"Submit_btn": "Submit",
|
456 |
+
"Exclude_btn": "Delete",
|
457 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
458 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
459 |
+
"Timestamp": "Timestamp",
|
460 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
461 |
+
"Browse_text": "## Browse Data",
|
462 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
463 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
464 |
+
"Task": "data/guidelines/USA/English/task.md",
|
465 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
466 |
+
}
|
467 |
+
},
|
468 |
+
"Ethiopia": {
|
469 |
+
"Oromo": {
|
470 |
+
"Country": "Country",
|
471 |
+
"Language": "Language",
|
472 |
+
"Category": "Main Category",
|
473 |
+
"Email": "Email (Optional)",
|
474 |
+
"Password": "Password (Optional)",
|
475 |
+
"Concept": "Main Concept",
|
476 |
+
"Image": "Image",
|
477 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
478 |
+
"Description": "Description",
|
479 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
480 |
+
"Clear_btn": "Clear",
|
481 |
+
"Submit_btn": "Submit",
|
482 |
+
"Exclude_btn": "Delete",
|
483 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
484 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
485 |
+
"Timestamp": "Timestamp",
|
486 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
487 |
+
"Browse_text": "## Browse Data",
|
488 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
489 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
490 |
+
"Task": "data/guidelines/USA/English/task.md",
|
491 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
492 |
+
}
|
493 |
+
},
|
494 |
+
"Germany": {
|
495 |
+
"German": {
|
496 |
+
"Country": "Country",
|
497 |
+
"Language": "Language",
|
498 |
+
"Category": "Main Category",
|
499 |
+
"Email": "Email (Optional)",
|
500 |
+
"Password": "Password (Optional)",
|
501 |
+
"Concept": "Main Concept",
|
502 |
+
"Image": "Image",
|
503 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
504 |
+
"Description": "Description",
|
505 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
506 |
+
"Clear_btn": "Clear",
|
507 |
+
"Submit_btn": "Submit",
|
508 |
+
"Exclude_btn": "Delete",
|
509 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
510 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
511 |
+
"Timestamp": "Timestamp",
|
512 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
513 |
+
"Browse_text": "## Browse Data",
|
514 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
515 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
516 |
+
"Task": "data/guidelines/USA/English/task.md",
|
517 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
518 |
+
}
|
519 |
+
},
|
520 |
+
"Ghana": {
|
521 |
+
"Twi": {
|
522 |
+
"Country": "Country",
|
523 |
+
"Language": "Language",
|
524 |
+
"Category": "Main Category",
|
525 |
+
"Email": "Email (Optional)",
|
526 |
+
"Password": "Password (Optional)",
|
527 |
+
"Concept": "Main Concept",
|
528 |
+
"Image": "Image",
|
529 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
530 |
+
"Description": "Description",
|
531 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
532 |
+
"Clear_btn": "Clear",
|
533 |
+
"Submit_btn": "Submit",
|
534 |
+
"Exclude_btn": "Delete",
|
535 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
536 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
537 |
+
"Timestamp": "Timestamp",
|
538 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
539 |
+
"Browse_text": "## Browse Data",
|
540 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
541 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
542 |
+
"Task": "data/guidelines/USA/English/task.md",
|
543 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
544 |
+
}
|
545 |
+
},
|
546 |
+
"Greece": {
|
547 |
+
"Greek": {
|
548 |
+
"Country": "Country",
|
549 |
+
"Language": "Language",
|
550 |
+
"Category": "Main Category",
|
551 |
+
"Email": "Email (Optional)",
|
552 |
+
"Password": "Password (Optional)",
|
553 |
+
"Concept": "Main Concept",
|
554 |
+
"Image": "Image",
|
555 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
556 |
+
"Description": "Description",
|
557 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
558 |
+
"Clear_btn": "Clear",
|
559 |
+
"Submit_btn": "Submit",
|
560 |
+
"Exclude_btn": "Delete",
|
561 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
562 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
563 |
+
"Timestamp": "Timestamp",
|
564 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
565 |
+
"Browse_text": "## Browse Data",
|
566 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
567 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
568 |
+
"Task": "data/guidelines/USA/English/task.md",
|
569 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
570 |
+
}
|
571 |
+
},
|
572 |
+
"Hungary": {
|
573 |
+
"Hungarian": {
|
574 |
+
"Country": "Country",
|
575 |
+
"Language": "Language",
|
576 |
+
"Category": "Main Category",
|
577 |
+
"Email": "Email (Optional)",
|
578 |
+
"Password": "Password (Optional)",
|
579 |
+
"Concept": "Main Concept",
|
580 |
+
"Image": "Image",
|
581 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
582 |
+
"Description": "Description",
|
583 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
584 |
+
"Clear_btn": "Clear",
|
585 |
+
"Submit_btn": "Submit",
|
586 |
+
"Exclude_btn": "Delete",
|
587 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
588 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
589 |
+
"Timestamp": "Timestamp",
|
590 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
591 |
+
"Browse_text": "## Browse Data",
|
592 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
593 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
594 |
+
"Task": "data/guidelines/USA/English/task.md",
|
595 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
596 |
+
}
|
597 |
+
},
|
598 |
+
"India": {
|
599 |
+
"Urdu ": {
|
600 |
+
"Country": "Country",
|
601 |
+
"Language": "Language",
|
602 |
+
"Category": "Main Category",
|
603 |
+
"Email": "Email (Optional)",
|
604 |
+
"Password": "Password (Optional)",
|
605 |
+
"Concept": "Main Concept",
|
606 |
+
"Image": "Image",
|
607 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
608 |
+
"Description": "Description",
|
609 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
610 |
+
"Clear_btn": "Clear",
|
611 |
+
"Submit_btn": "Submit",
|
612 |
+
"Exclude_btn": "Delete",
|
613 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
614 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
615 |
+
"Timestamp": "Timestamp",
|
616 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
617 |
+
"Browse_text": "## Browse Data",
|
618 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
619 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
620 |
+
"Task": "data/guidelines/USA/English/task.md",
|
621 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
622 |
+
},
|
623 |
+
"Kannada": {
|
624 |
+
"Country": "Country",
|
625 |
+
"Language": "Language",
|
626 |
+
"Category": "Main Category",
|
627 |
+
"Email": "Email (Optional)",
|
628 |
+
"Password": "Password (Optional)",
|
629 |
+
"Concept": "Main Concept",
|
630 |
+
"Image": "Image",
|
631 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
632 |
+
"Description": "Description",
|
633 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
634 |
+
"Clear_btn": "Clear",
|
635 |
+
"Submit_btn": "Submit",
|
636 |
+
"Exclude_btn": "Delete",
|
637 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
638 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
639 |
+
"Timestamp": "Timestamp",
|
640 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
641 |
+
"Browse_text": "## Browse Data",
|
642 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
643 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
644 |
+
"Task": "data/guidelines/USA/English/task.md",
|
645 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
646 |
+
},
|
647 |
+
"Telugu": {
|
648 |
+
"Country": "Country",
|
649 |
+
"Language": "Language",
|
650 |
+
"Category": "Main Category",
|
651 |
+
"Email": "Email (Optional)",
|
652 |
+
"Password": "Password (Optional)",
|
653 |
+
"Concept": "Main Concept",
|
654 |
+
"Image": "Image",
|
655 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
656 |
+
"Description": "Description",
|
657 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
658 |
+
"Clear_btn": "Clear",
|
659 |
+
"Submit_btn": "Submit",
|
660 |
+
"Exclude_btn": "Delete",
|
661 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
662 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
663 |
+
"Timestamp": "Timestamp",
|
664 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
665 |
+
"Browse_text": "## Browse Data",
|
666 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
667 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
668 |
+
"Task": "data/guidelines/USA/English/task.md",
|
669 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
670 |
+
},
|
671 |
+
"Tamil": {
|
672 |
+
"Country": "Country",
|
673 |
+
"Language": "Language",
|
674 |
+
"Category": "Main Category",
|
675 |
+
"Email": "Email (Optional)",
|
676 |
+
"Password": "Password (Optional)",
|
677 |
+
"Concept": "Main Concept",
|
678 |
+
"Image": "Image",
|
679 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
680 |
+
"Description": "Description",
|
681 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
682 |
+
"Clear_btn": "Clear",
|
683 |
+
"Submit_btn": "Submit",
|
684 |
+
"Exclude_btn": "Delete",
|
685 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
686 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
687 |
+
"Timestamp": "Timestamp",
|
688 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
689 |
+
"Browse_text": "## Browse Data",
|
690 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
691 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
692 |
+
"Task": "data/guidelines/USA/English/task.md",
|
693 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
694 |
+
},
|
695 |
+
"Hindi": {
|
696 |
+
"Country": "Country",
|
697 |
+
"Language": "Language",
|
698 |
+
"Category": "Main Category",
|
699 |
+
"Email": "Email (Optional)",
|
700 |
+
"Password": "Password (Optional)",
|
701 |
+
"Concept": "Main Concept",
|
702 |
+
"Image": "Image",
|
703 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
704 |
+
"Description": "Description",
|
705 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
706 |
+
"Clear_btn": "Clear",
|
707 |
+
"Submit_btn": "Submit",
|
708 |
+
"Exclude_btn": "Delete",
|
709 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
710 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
711 |
+
"Timestamp": "Timestamp",
|
712 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
713 |
+
"Browse_text": "## Browse Data",
|
714 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
715 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
716 |
+
"Task": "data/guidelines/USA/English/task.md",
|
717 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
718 |
+
},
|
719 |
+
"Bengali": {
|
720 |
+
"Country": "Country",
|
721 |
+
"Language": "Language",
|
722 |
+
"Category": "Main Category",
|
723 |
+
"Email": "Email (Optional)",
|
724 |
+
"Password": "Password (Optional)",
|
725 |
+
"Concept": "Main Concept",
|
726 |
+
"Image": "Image",
|
727 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
728 |
+
"Description": "Description",
|
729 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
730 |
+
"Clear_btn": "Clear",
|
731 |
+
"Submit_btn": "Submit",
|
732 |
+
"Exclude_btn": "Delete",
|
733 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
734 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
735 |
+
"Timestamp": "Timestamp",
|
736 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
737 |
+
"Browse_text": "## Browse Data",
|
738 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
739 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
740 |
+
"Task": "data/guidelines/USA/English/task.md",
|
741 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
742 |
+
},
|
743 |
+
"Marathi": {
|
744 |
+
"Country": "Country",
|
745 |
+
"Language": "Language",
|
746 |
+
"Category": "Main Category",
|
747 |
+
"Email": "Email (Optional)",
|
748 |
+
"Password": "Password (Optional)",
|
749 |
+
"Concept": "Main Concept",
|
750 |
+
"Image": "Image",
|
751 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
752 |
+
"Description": "Description",
|
753 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
754 |
+
"Clear_btn": "Clear",
|
755 |
+
"Submit_btn": "Submit",
|
756 |
+
"Exclude_btn": "Delete",
|
757 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
758 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
759 |
+
"Timestamp": "Timestamp",
|
760 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
761 |
+
"Browse_text": "## Browse Data",
|
762 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
763 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
764 |
+
"Task": "data/guidelines/USA/English/task.md",
|
765 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
766 |
+
}
|
767 |
+
},
|
768 |
+
"Indonesia": {
|
769 |
+
"Javanese": {
|
770 |
+
"Country": "Country",
|
771 |
+
"Language": "Language",
|
772 |
+
"Category": "Main Category",
|
773 |
+
"Email": "Email (Optional)",
|
774 |
+
"Password": "Password (Optional)",
|
775 |
+
"Concept": "Main Concept",
|
776 |
+
"Image": "Image",
|
777 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
778 |
+
"Description": "Description",
|
779 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
780 |
+
"Clear_btn": "Clear",
|
781 |
+
"Submit_btn": "Submit",
|
782 |
+
"Exclude_btn": "Delete",
|
783 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
784 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
785 |
+
"Timestamp": "Timestamp",
|
786 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
787 |
+
"Browse_text": "## Browse Data",
|
788 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
789 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
790 |
+
"Task": "data/guidelines/USA/English/task.md",
|
791 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
792 |
+
},
|
793 |
+
"Indonesian": {
|
794 |
+
"Country": "Country",
|
795 |
+
"Language": "Language",
|
796 |
+
"Category": "Main Category",
|
797 |
+
"Email": "Email (Optional)",
|
798 |
+
"Password": "Password (Optional)",
|
799 |
+
"Concept": "Main Concept",
|
800 |
+
"Image": "Image",
|
801 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
802 |
+
"Description": "Description",
|
803 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
804 |
+
"Clear_btn": "Clear",
|
805 |
+
"Submit_btn": "Submit",
|
806 |
+
"Exclude_btn": "Delete",
|
807 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
808 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
809 |
+
"Timestamp": "Timestamp",
|
810 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
811 |
+
"Browse_text": "## Browse Data",
|
812 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
813 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
814 |
+
"Task": "data/guidelines/USA/English/task.md",
|
815 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
816 |
+
}
|
817 |
+
},
|
818 |
+
"Israel": {
|
819 |
+
"Hebrew": {
|
820 |
+
"Country": "Country",
|
821 |
+
"Language": "Language",
|
822 |
+
"Category": "Main Category",
|
823 |
+
"Email": "Email (Optional)",
|
824 |
+
"Password": "Password (Optional)",
|
825 |
+
"Concept": "Main Concept",
|
826 |
+
"Image": "Image",
|
827 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
828 |
+
"Description": "Description",
|
829 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
830 |
+
"Clear_btn": "Clear",
|
831 |
+
"Submit_btn": "Submit",
|
832 |
+
"Exclude_btn": "Delete",
|
833 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
834 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
835 |
+
"Timestamp": "Timestamp",
|
836 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
837 |
+
"Browse_text": "## Browse Data",
|
838 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
839 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
840 |
+
"Task": "data/guidelines/USA/English/task.md",
|
841 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
842 |
+
}
|
843 |
+
},
|
844 |
+
"Japan": {
|
845 |
+
"Japanese": {
|
846 |
+
"Country": "Country",
|
847 |
+
"Language": "Language",
|
848 |
+
"Category": "Main Category",
|
849 |
+
"Email": "Email (Optional)",
|
850 |
+
"Password": "Password (Optional)",
|
851 |
+
"Concept": "Main Concept",
|
852 |
+
"Image": "Image",
|
853 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
854 |
+
"Description": "Description",
|
855 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
856 |
+
"Clear_btn": "Clear",
|
857 |
+
"Submit_btn": "Submit",
|
858 |
+
"Exclude_btn": "Delete",
|
859 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
860 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
861 |
+
"Timestamp": "Timestamp",
|
862 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
863 |
+
"Browse_text": "## Browse Data",
|
864 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
865 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
866 |
+
"Task": "data/guidelines/USA/English/task.md",
|
867 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
868 |
+
}
|
869 |
+
},
|
870 |
+
"Jordan": {
|
871 |
+
"Jordanian": {
|
872 |
+
"Country": "Country",
|
873 |
+
"Language": "Language",
|
874 |
+
"Category": "Main Category",
|
875 |
+
"Email": "Email (Optional)",
|
876 |
+
"Password": "Password (Optional)",
|
877 |
+
"Concept": "Main Concept",
|
878 |
+
"Image": "Image",
|
879 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
880 |
+
"Description": "Description",
|
881 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
882 |
+
"Clear_btn": "Clear",
|
883 |
+
"Submit_btn": "Submit",
|
884 |
+
"Exclude_btn": "Delete",
|
885 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
886 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
887 |
+
"Timestamp": "Timestamp",
|
888 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
889 |
+
"Browse_text": "## Browse Data",
|
890 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
891 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
892 |
+
"Task": "data/guidelines/USA/English/task.md",
|
893 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
894 |
+
}
|
895 |
+
},
|
896 |
+
"Mexico": {
|
897 |
+
"Spanish": {
|
898 |
+
"Country": "Country",
|
899 |
+
"Language": "Language",
|
900 |
+
"Category": "Main Category",
|
901 |
+
"Email": "Email (Optional)",
|
902 |
+
"Password": "Password (Optional)",
|
903 |
+
"Concept": "Main Concept",
|
904 |
+
"Image": "Image",
|
905 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
906 |
+
"Description": "Description",
|
907 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
908 |
+
"Clear_btn": "Clear",
|
909 |
+
"Submit_btn": "Submit",
|
910 |
+
"Exclude_btn": "Delete",
|
911 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
912 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
913 |
+
"Timestamp": "Timestamp",
|
914 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
915 |
+
"Browse_text": "## Browse Data",
|
916 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
917 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
918 |
+
"Task": "data/guidelines/USA/English/task.md",
|
919 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
920 |
+
}
|
921 |
+
},
|
922 |
+
"Morocco": {
|
923 |
+
"Moroccan Arabic": {
|
924 |
+
"Country": "Country",
|
925 |
+
"Language": "Language",
|
926 |
+
"Category": "Main Category",
|
927 |
+
"Email": "Email (Optional)",
|
928 |
+
"Password": "Password (Optional)",
|
929 |
+
"Concept": "Main Concept",
|
930 |
+
"Image": "Image",
|
931 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
932 |
+
"Description": "Description",
|
933 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
934 |
+
"Clear_btn": "Clear",
|
935 |
+
"Submit_btn": "Submit",
|
936 |
+
"Exclude_btn": "Delete",
|
937 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
938 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
939 |
+
"Timestamp": "Timestamp",
|
940 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
941 |
+
"Browse_text": "## Browse Data",
|
942 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
943 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
944 |
+
"Task": "data/guidelines/USA/English/task.md",
|
945 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
946 |
+
}
|
947 |
+
},
|
948 |
+
"Netherlands": {
|
949 |
+
"Dutch": {
|
950 |
+
"Country": "Country",
|
951 |
+
"Language": "Language",
|
952 |
+
"Category": "Main Category",
|
953 |
+
"Email": "Email (Optional)",
|
954 |
+
"Password": "Password (Optional)",
|
955 |
+
"Concept": "Main Concept",
|
956 |
+
"Image": "Image",
|
957 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
958 |
+
"Description": "Description",
|
959 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
960 |
+
"Clear_btn": "Clear",
|
961 |
+
"Submit_btn": "Submit",
|
962 |
+
"Exclude_btn": "Delete",
|
963 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
964 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
965 |
+
"Timestamp": "Timestamp",
|
966 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
967 |
+
"Browse_text": "## Browse Data",
|
968 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
969 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
970 |
+
"Task": "data/guidelines/USA/English/task.md",
|
971 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
972 |
+
}
|
973 |
+
},
|
974 |
+
"Nigeria": {
|
975 |
+
"Yoruba": {
|
976 |
+
"Country": "Country",
|
977 |
+
"Language": "Language",
|
978 |
+
"Category": "Main Category",
|
979 |
+
"Email": "Email (Optional)",
|
980 |
+
"Password": "Password (Optional)",
|
981 |
+
"Concept": "Main Concept",
|
982 |
+
"Image": "Image",
|
983 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
984 |
+
"Description": "Description",
|
985 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
986 |
+
"Clear_btn": "Clear",
|
987 |
+
"Submit_btn": "Submit",
|
988 |
+
"Exclude_btn": "Delete",
|
989 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
990 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
991 |
+
"Timestamp": "Timestamp",
|
992 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
993 |
+
"Browse_text": "## Browse Data",
|
994 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
995 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
996 |
+
"Task": "data/guidelines/USA/English/task.md",
|
997 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
998 |
+
},
|
999 |
+
"Hausa": {
|
1000 |
+
"Country": "Country",
|
1001 |
+
"Language": "Language",
|
1002 |
+
"Category": "Main Category",
|
1003 |
+
"Email": "Email (Optional)",
|
1004 |
+
"Password": "Password (Optional)",
|
1005 |
+
"Concept": "Main Concept",
|
1006 |
+
"Image": "Image",
|
1007 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1008 |
+
"Description": "Description",
|
1009 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1010 |
+
"Clear_btn": "Clear",
|
1011 |
+
"Submit_btn": "Submit",
|
1012 |
+
"Exclude_btn": "Delete",
|
1013 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1014 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1015 |
+
"Timestamp": "Timestamp",
|
1016 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1017 |
+
"Browse_text": "## Browse Data",
|
1018 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1019 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1020 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1021 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1022 |
+
}
|
1023 |
+
},
|
1024 |
+
"Philippines": {
|
1025 |
+
"Tagalog": {
|
1026 |
+
"Country": "Country",
|
1027 |
+
"Language": "Language",
|
1028 |
+
"Category": "Main Category",
|
1029 |
+
"Email": "Email (Optional)",
|
1030 |
+
"Password": "Password (Optional)",
|
1031 |
+
"Concept": "Main Concept",
|
1032 |
+
"Image": "Image",
|
1033 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1034 |
+
"Description": "Description",
|
1035 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1036 |
+
"Clear_btn": "Clear",
|
1037 |
+
"Submit_btn": "Submit",
|
1038 |
+
"Exclude_btn": "Delete",
|
1039 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1040 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1041 |
+
"Timestamp": "Timestamp",
|
1042 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1043 |
+
"Browse_text": "## Browse Data",
|
1044 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1045 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1046 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1047 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1048 |
+
}
|
1049 |
+
},
|
1050 |
+
"Poland": {
|
1051 |
+
"Polish": {
|
1052 |
+
"Country": "Country",
|
1053 |
+
"Language": "Language",
|
1054 |
+
"Category": "Main Category",
|
1055 |
+
"Email": "Email (Optional)",
|
1056 |
+
"Password": "Password (Optional)",
|
1057 |
+
"Concept": "Main Concept",
|
1058 |
+
"Image": "Image",
|
1059 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1060 |
+
"Description": "Description",
|
1061 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1062 |
+
"Clear_btn": "Clear",
|
1063 |
+
"Submit_btn": "Submit",
|
1064 |
+
"Exclude_btn": "Delete",
|
1065 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1066 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1067 |
+
"Timestamp": "Timestamp",
|
1068 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1069 |
+
"Browse_text": "## Browse Data",
|
1070 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1071 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1072 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1073 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1074 |
+
}
|
1075 |
+
},
|
1076 |
+
"Portugal": {
|
1077 |
+
"Portuguese": {
|
1078 |
+
"Country": "Country",
|
1079 |
+
"Language": "Language",
|
1080 |
+
"Category": "Main Category",
|
1081 |
+
"Email": "Email (Optional)",
|
1082 |
+
"Password": "Password (Optional)",
|
1083 |
+
"Concept": "Main Concept",
|
1084 |
+
"Image": "Image",
|
1085 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1086 |
+
"Description": "Description",
|
1087 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1088 |
+
"Clear_btn": "Clear",
|
1089 |
+
"Submit_btn": "Submit",
|
1090 |
+
"Exclude_btn": "Delete",
|
1091 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1092 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1093 |
+
"Timestamp": "Timestamp",
|
1094 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1095 |
+
"Browse_text": "## Browse Data",
|
1096 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1097 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1098 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1099 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1100 |
+
}
|
1101 |
+
},
|
1102 |
+
"Romania": {
|
1103 |
+
"Romanian": {
|
1104 |
+
"Country": "Country",
|
1105 |
+
"Language": "Language",
|
1106 |
+
"Category": "Main Category",
|
1107 |
+
"Email": "Email (Optional)",
|
1108 |
+
"Password": "Password (Optional)",
|
1109 |
+
"Concept": "Main Concept",
|
1110 |
+
"Image": "Image",
|
1111 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1112 |
+
"Description": "Description",
|
1113 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1114 |
+
"Clear_btn": "Clear",
|
1115 |
+
"Submit_btn": "Submit",
|
1116 |
+
"Exclude_btn": "Delete",
|
1117 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1118 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1119 |
+
"Timestamp": "Timestamp",
|
1120 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1121 |
+
"Browse_text": "## Browse Data",
|
1122 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1123 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1124 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1125 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1126 |
+
}
|
1127 |
+
},
|
1128 |
+
"Russia": {
|
1129 |
+
"Russian": {
|
1130 |
+
"Country": "Country",
|
1131 |
+
"Language": "Language",
|
1132 |
+
"Category": "Main Category",
|
1133 |
+
"Email": "Email (Optional)",
|
1134 |
+
"Password": "Password (Optional)",
|
1135 |
+
"Concept": "Main Concept",
|
1136 |
+
"Image": "Image",
|
1137 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1138 |
+
"Description": "Description",
|
1139 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1140 |
+
"Clear_btn": "Clear",
|
1141 |
+
"Submit_btn": "Submit",
|
1142 |
+
"Exclude_btn": "Delete",
|
1143 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1144 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1145 |
+
"Timestamp": "Timestamp",
|
1146 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1147 |
+
"Browse_text": "## Browse Data",
|
1148 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1149 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1150 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1151 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1152 |
+
}
|
1153 |
+
},
|
1154 |
+
"Rwanda": {
|
1155 |
+
"Kinyarwanda": {
|
1156 |
+
"Country": "Country",
|
1157 |
+
"Language": "Language",
|
1158 |
+
"Category": "Main Category",
|
1159 |
+
"Email": "Email (Optional)",
|
1160 |
+
"Password": "Password (Optional)",
|
1161 |
+
"Concept": "Main Concept",
|
1162 |
+
"Image": "Image",
|
1163 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1164 |
+
"Description": "Description",
|
1165 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1166 |
+
"Clear_btn": "Clear",
|
1167 |
+
"Submit_btn": "Submit",
|
1168 |
+
"Exclude_btn": "Delete",
|
1169 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1170 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1171 |
+
"Timestamp": "Timestamp",
|
1172 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1173 |
+
"Browse_text": "## Browse Data",
|
1174 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1175 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1176 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1177 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1178 |
+
}
|
1179 |
+
},
|
1180 |
+
"Singapore": {
|
1181 |
+
"Mandarin Chinese": {
|
1182 |
+
"Country": "Country",
|
1183 |
+
"Language": "Language",
|
1184 |
+
"Category": "Main Category",
|
1185 |
+
"Email": "Email (Optional)",
|
1186 |
+
"Password": "Password (Optional)",
|
1187 |
+
"Concept": "Main Concept",
|
1188 |
+
"Image": "Image",
|
1189 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1190 |
+
"Description": "Description",
|
1191 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1192 |
+
"Clear_btn": "Clear",
|
1193 |
+
"Submit_btn": "Submit",
|
1194 |
+
"Exclude_btn": "Delete",
|
1195 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1196 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1197 |
+
"Timestamp": "Timestamp",
|
1198 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1199 |
+
"Browse_text": "## Browse Data",
|
1200 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1201 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1202 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1203 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1204 |
+
}
|
1205 |
+
},
|
1206 |
+
"South Korea": {
|
1207 |
+
"Korean": {
|
1208 |
+
"Country": "Country",
|
1209 |
+
"Language": "Language",
|
1210 |
+
"Category": "Main Category",
|
1211 |
+
"Email": "Email (Optional)",
|
1212 |
+
"Password": "Password (Optional)",
|
1213 |
+
"Concept": "Main Concept",
|
1214 |
+
"Image": "Image",
|
1215 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1216 |
+
"Description": "Description",
|
1217 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1218 |
+
"Clear_btn": "Clear",
|
1219 |
+
"Submit_btn": "Submit",
|
1220 |
+
"Exclude_btn": "Delete",
|
1221 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1222 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1223 |
+
"Timestamp": "Timestamp",
|
1224 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1225 |
+
"Browse_text": "## Browse Data",
|
1226 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1227 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1228 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1229 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1230 |
+
}
|
1231 |
+
},
|
1232 |
+
"Spain": {
|
1233 |
+
"Spanish": {
|
1234 |
+
"Country": "Country",
|
1235 |
+
"Language": "Language",
|
1236 |
+
"Category": "Main Category",
|
1237 |
+
"Email": "Email (Optional)",
|
1238 |
+
"Password": "Password (Optional)",
|
1239 |
+
"Concept": "Main Concept",
|
1240 |
+
"Image": "Image",
|
1241 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1242 |
+
"Description": "Description",
|
1243 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1244 |
+
"Clear_btn": "Clear",
|
1245 |
+
"Submit_btn": "Submit",
|
1246 |
+
"Exclude_btn": "Delete",
|
1247 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1248 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1249 |
+
"Timestamp": "Timestamp",
|
1250 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1251 |
+
"Browse_text": "## Browse Data",
|
1252 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1253 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1254 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1255 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1256 |
+
}
|
1257 |
+
},
|
1258 |
+
"Switzerland": {
|
1259 |
+
"German": {
|
1260 |
+
"Country": "Country",
|
1261 |
+
"Language": "Language",
|
1262 |
+
"Category": "Main Category",
|
1263 |
+
"Email": "Email (Optional)",
|
1264 |
+
"Password": "Password (Optional)",
|
1265 |
+
"Concept": "Main Concept",
|
1266 |
+
"Image": "Image",
|
1267 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1268 |
+
"Description": "Description",
|
1269 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1270 |
+
"Clear_btn": "Clear",
|
1271 |
+
"Submit_btn": "Submit",
|
1272 |
+
"Exclude_btn": "Delete",
|
1273 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1274 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1275 |
+
"Timestamp": "Timestamp",
|
1276 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1277 |
+
"Browse_text": "## Browse Data",
|
1278 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1279 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1280 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1281 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1282 |
+
}
|
1283 |
+
},
|
1284 |
+
"Tanzania": {
|
1285 |
+
"Swahili": {
|
1286 |
+
"Country": "Country",
|
1287 |
+
"Language": "Language",
|
1288 |
+
"Category": "Main Category",
|
1289 |
+
"Email": "Email (Optional)",
|
1290 |
+
"Password": "Password (Optional)",
|
1291 |
+
"Concept": "Main Concept",
|
1292 |
+
"Image": "Image",
|
1293 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1294 |
+
"Description": "Description",
|
1295 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1296 |
+
"Clear_btn": "Clear",
|
1297 |
+
"Submit_btn": "Submit",
|
1298 |
+
"Exclude_btn": "Delete",
|
1299 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1300 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1301 |
+
"Timestamp": "Timestamp",
|
1302 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1303 |
+
"Browse_text": "## Browse Data",
|
1304 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1305 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1306 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1307 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1308 |
+
}
|
1309 |
+
},
|
1310 |
+
"Turkey": {
|
1311 |
+
"Turkish": {
|
1312 |
+
"Country": "Country",
|
1313 |
+
"Language": "Language",
|
1314 |
+
"Category": "Main Category",
|
1315 |
+
"Email": "Email (Optional)",
|
1316 |
+
"Password": "Password (Optional)",
|
1317 |
+
"Concept": "Main Concept",
|
1318 |
+
"Image": "Image",
|
1319 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1320 |
+
"Description": "Description",
|
1321 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1322 |
+
"Clear_btn": "Clear",
|
1323 |
+
"Submit_btn": "Submit",
|
1324 |
+
"Exclude_btn": "Delete",
|
1325 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1326 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1327 |
+
"Timestamp": "Timestamp",
|
1328 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1329 |
+
"Browse_text": "## Browse Data",
|
1330 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1331 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1332 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1333 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1334 |
+
}
|
1335 |
+
},
|
1336 |
+
"Ukraine": {
|
1337 |
+
"Ukranian": {
|
1338 |
+
"Country": "Country",
|
1339 |
+
"Language": "Language",
|
1340 |
+
"Category": "Main Category",
|
1341 |
+
"Email": "Email (Optional)",
|
1342 |
+
"Password": "Password (Optional)",
|
1343 |
+
"Concept": "Main Concept",
|
1344 |
+
"Image": "Image",
|
1345 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1346 |
+
"Description": "Description",
|
1347 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1348 |
+
"Clear_btn": "Clear",
|
1349 |
+
"Submit_btn": "Submit",
|
1350 |
+
"Exclude_btn": "Delete",
|
1351 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1352 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1353 |
+
"Timestamp": "Timestamp",
|
1354 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1355 |
+
"Browse_text": "## Browse Data",
|
1356 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1357 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1358 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1359 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1360 |
+
}
|
1361 |
+
},
|
1362 |
+
"Uzbekistan": {
|
1363 |
+
"Uzbek": {
|
1364 |
+
"Country": "Country",
|
1365 |
+
"Language": "Language",
|
1366 |
+
"Category": "Main Category",
|
1367 |
+
"Email": "Email (Optional)",
|
1368 |
+
"Password": "Password (Optional)",
|
1369 |
+
"Concept": "Main Concept",
|
1370 |
+
"Image": "Image",
|
1371 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1372 |
+
"Description": "Description",
|
1373 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1374 |
+
"Clear_btn": "Clear",
|
1375 |
+
"Submit_btn": "Submit",
|
1376 |
+
"Exclude_btn": "Delete",
|
1377 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1378 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1379 |
+
"Timestamp": "Timestamp",
|
1380 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1381 |
+
"Browse_text": "## Browse Data",
|
1382 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1383 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1384 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1385 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1386 |
+
}
|
1387 |
+
},
|
1388 |
+
"Vietnam": {
|
1389 |
+
"Vietnamese": {
|
1390 |
+
"Country": "Country",
|
1391 |
+
"Language": "Language",
|
1392 |
+
"Category": "Main Category",
|
1393 |
+
"Email": "Email (Optional)",
|
1394 |
+
"Password": "Password (Optional)",
|
1395 |
+
"Concept": "Main Concept",
|
1396 |
+
"Image": "Image",
|
1397 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1398 |
+
"Description": "Description",
|
1399 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1400 |
+
"Clear_btn": "Clear",
|
1401 |
+
"Submit_btn": "Submit",
|
1402 |
+
"Exclude_btn": "Delete",
|
1403 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1404 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1405 |
+
"Timestamp": "Timestamp",
|
1406 |
+
"Exit_btn": "\u2b05\ufe0f Change Information",
|
1407 |
+
"Browse_text": "## Browse Data",
|
1408 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1409 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1410 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1411 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1412 |
+
}
|
1413 |
+
}
|
1414 |
+
}
|
data/metadata_tmp.json
ADDED
@@ -0,0 +1,1434 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"USA": {
|
3 |
+
"English": {
|
4 |
+
"Country": "Country",
|
5 |
+
"Language": "Language",
|
6 |
+
"Category": "Category",
|
7 |
+
"Email": "Email (Optional)",
|
8 |
+
"Password": "Password (Optional)",
|
9 |
+
"Concept": "Concept",
|
10 |
+
"Image": "Image",
|
11 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
12 |
+
"Description": "Description",
|
13 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
14 |
+
"Clear_btn": "Clear",
|
15 |
+
"Submit_btn": "Submit",
|
16 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
17 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
18 |
+
"Timestamp": "Timestamp",
|
19 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
20 |
+
"Browse_text": "## Browse Data",
|
21 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
22 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
23 |
+
"Task": "data/guidelines/USA/English/task.md",
|
24 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
25 |
+
}
|
26 |
+
},
|
27 |
+
"Italy": {
|
28 |
+
"Italiano": {
|
29 |
+
"Country": "Paese",
|
30 |
+
"Language": "Lingua",
|
31 |
+
"Category": "Categoria",
|
32 |
+
"Email": "Email (Opzionale)",
|
33 |
+
"Password": "Password (Opzionale)",
|
34 |
+
"Concept": "Concetto",
|
35 |
+
"Image": "Immagine",
|
36 |
+
"Image_URL": "URL dell'immagine (opzionale, se non viene caricata un'immagine)",
|
37 |
+
"Description": "Descrizione",
|
38 |
+
"Instructs_btn": "\ud83d\udcd8 Mostra istruzioni",
|
39 |
+
"Clear_btn": "Cancella",
|
40 |
+
"Submit_btn": "Invia",
|
41 |
+
"Saving_text": "\u23f3 Attendere prego mentre i dati vengono salvati.",
|
42 |
+
"Saved_text": "I tuoi dati sono stati salvati correttamente. La tabella dei dati si aggiorner\u00e0 a breve. Puoi chiudere questa finestra.",
|
43 |
+
"Timestamp": "Marca temporale",
|
44 |
+
"Exit_btn": "\u2b05\ufe0f Cambia lingua",
|
45 |
+
"Browse_text": "## Esplora dati",
|
46 |
+
"Loading_msg": "**Caricamento dei dati, attendere prego...**",
|
47 |
+
"Intro": "data/guidelines/Italy/Italian/intro.md",
|
48 |
+
"Task": "data/guidelines/Italy/Italian/task.md",
|
49 |
+
"Instructions": "data/guidelines/Italy/Italian/instructions.md"
|
50 |
+
},
|
51 |
+
"Italian": {
|
52 |
+
"Country": "Country",
|
53 |
+
"Language": "Language",
|
54 |
+
"Category": "Category",
|
55 |
+
"Email": "Email (Optional)",
|
56 |
+
"Password": "Password (Optional)",
|
57 |
+
"Concept": "Concept",
|
58 |
+
"Image": "Image",
|
59 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
60 |
+
"Description": "Description",
|
61 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
62 |
+
"Clear_btn": "Clear",
|
63 |
+
"Submit_btn": "Submit",
|
64 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
65 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
66 |
+
"Timestamp": "Timestamp",
|
67 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
68 |
+
"Browse_text": "## Browse Data",
|
69 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
70 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
71 |
+
"Task": "data/guidelines/USA/English/task.md",
|
72 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
73 |
+
}
|
74 |
+
},
|
75 |
+
"France": {
|
76 |
+
"Fran\u00e7ais": {
|
77 |
+
"Country": "Pays",
|
78 |
+
"Language": "Langue",
|
79 |
+
"Category": "Cat\u00e9gorie",
|
80 |
+
"Email": "Email (Facultatif)",
|
81 |
+
"Password": "Mot de passe (Facultatif)",
|
82 |
+
"Concept": "Concept",
|
83 |
+
"Image": "Image",
|
84 |
+
"Image_URL": "URL de l'image (facultatif, si aucune image n'est charg\u00e9e)",
|
85 |
+
"Description": "Description",
|
86 |
+
"Instructs_btn": "\ud83d\udcd8 Afficher les instructions",
|
87 |
+
"Clear_btn": "Effacer",
|
88 |
+
"Submit_btn": "Envoyer",
|
89 |
+
"Saving_text": "\u23f3 Veuillez patienter pendant l'enregistrement de vos donn\u00e9es.",
|
90 |
+
"Saved_text": "Vos donn\u00e9es ont \u00e9t\u00e9 enregistr\u00e9es avec succ\u00e8s. Le tableau des donn\u00e9es sera mis \u00e0 jour sous peu. Vous pouvez fermer cette fen\u00eatre.",
|
91 |
+
"Timestamp": "Horodatage",
|
92 |
+
"Exit_btn": "\u2b05\ufe0f Changer de langue",
|
93 |
+
"Browse_text": "## Parcourir les donn\u00e9es",
|
94 |
+
"Loading_msg": "**Chargement de vos donn\u00e9es, veuillez patienter...**",
|
95 |
+
"Intro": "data/guidelines/France/French/intro.md",
|
96 |
+
"Task": "data/guidelines/France/French/task.md",
|
97 |
+
"Instructions": "data/guidelines/France/French/instructions.md"
|
98 |
+
},
|
99 |
+
"French": {
|
100 |
+
"Country": "Country",
|
101 |
+
"Language": "Language",
|
102 |
+
"Category": "Category",
|
103 |
+
"Email": "Email (Optional)",
|
104 |
+
"Password": "Password (Optional)",
|
105 |
+
"Concept": "Concept",
|
106 |
+
"Image": "Image",
|
107 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
108 |
+
"Description": "Description",
|
109 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
110 |
+
"Clear_btn": "Clear",
|
111 |
+
"Submit_btn": "Submit",
|
112 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
113 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
114 |
+
"Timestamp": "Timestamp",
|
115 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
116 |
+
"Browse_text": "## Browse Data",
|
117 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
118 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
119 |
+
"Task": "data/guidelines/USA/English/task.md",
|
120 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
121 |
+
}
|
122 |
+
},
|
123 |
+
"Colombia": {
|
124 |
+
"Espa\u00f1ol": {
|
125 |
+
"Country": "Pa\u00eds",
|
126 |
+
"Language": "Idioma",
|
127 |
+
"Category": "Categor\u00eda",
|
128 |
+
"Add_Category": "Categor\u00edas Adicionales (Opcional)",
|
129 |
+
"Email": "email (Opcional)",
|
130 |
+
"Password": "contrase\u00f1a (Opcional)",
|
131 |
+
"Concept": "Concepto",
|
132 |
+
"Add_Concept": "Conceptos Adicionales (Opcional)",
|
133 |
+
"Image": "Imagen",
|
134 |
+
"Image_URL": "URL de la imagen (opcional, si no se carga una imagen)",
|
135 |
+
"Description": "Descripci\u00f3n",
|
136 |
+
"Instructs_btn": "\ud83d\udcd8 Mostrar instrucciones",
|
137 |
+
"Clear_btn": "Borrar",
|
138 |
+
"Submit_btn": "Enviar",
|
139 |
+
"Saving_text": "\u23f3 Por favor espere mientras se guardan sus datos.",
|
140 |
+
"Saved_text": "Sus datos se han guardado correctamente. La tabla de datos se actualizar\u00e1 en breve. Puede cerrar esta ventana.",
|
141 |
+
"Timestamp": "Marca de tiempo",
|
142 |
+
"Exit_btn": "\u2b05\ufe0f Cambiar Idioma",
|
143 |
+
"Browse_text": "## Explorar Datos",
|
144 |
+
"Loading_msg": "**Cargando sus datos, por favor espere...**",
|
145 |
+
"Intro": "data/guidelines/Colombia/Spanish/intro.md",
|
146 |
+
"Task": "data/guidelines/Colombia/Spanish/task.md",
|
147 |
+
"Instructions": "data/guidelines/Colombia/Spanish/instructions.md",
|
148 |
+
"Hide_btn": "👤 Ocultar rostros específicas",
|
149 |
+
"Hide_all_btn": "👤 Ocultar todos los rostros",
|
150 |
+
"Unhide_btn": "👀 Mostrar rostros",
|
151 |
+
"Exclude_btn": "Excluir ejemplo seleccionado"
|
152 |
+
},
|
153 |
+
"Spanish": {
|
154 |
+
"Country": "Country",
|
155 |
+
"Language": "Language",
|
156 |
+
"Category": "Category",
|
157 |
+
"Email": "Email (Optional)",
|
158 |
+
"Password": "Password (Optional)",
|
159 |
+
"Concept": "Concept",
|
160 |
+
"Image": "Image",
|
161 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
162 |
+
"Description": "Description",
|
163 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
164 |
+
"Clear_btn": "Clear",
|
165 |
+
"Submit_btn": "Submit",
|
166 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
167 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
168 |
+
"Timestamp": "Timestamp",
|
169 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
170 |
+
"Browse_text": "## Browse Data",
|
171 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
172 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
173 |
+
"Task": "data/guidelines/USA/English/task.md",
|
174 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
175 |
+
}
|
176 |
+
},
|
177 |
+
"Arabian Gulf": {
|
178 |
+
"Arabic": {
|
179 |
+
"Country": "Country",
|
180 |
+
"Language": "Language",
|
181 |
+
"Category": "Category",
|
182 |
+
"Email": "Email (Optional)",
|
183 |
+
"Password": "Password (Optional)",
|
184 |
+
"Concept": "Concept",
|
185 |
+
"Image": "Image",
|
186 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
187 |
+
"Description": "Description",
|
188 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
189 |
+
"Clear_btn": "Clear",
|
190 |
+
"Submit_btn": "Submit",
|
191 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
192 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
193 |
+
"Timestamp": "Timestamp",
|
194 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
195 |
+
"Browse_text": "## Browse Data",
|
196 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
197 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
198 |
+
"Task": "data/guidelines/USA/English/task.md",
|
199 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
200 |
+
}
|
201 |
+
},
|
202 |
+
"Argentina": {
|
203 |
+
"Spanish": {
|
204 |
+
"Country": "Country",
|
205 |
+
"Language": "Language",
|
206 |
+
"Category": "Category",
|
207 |
+
"Email": "Email (Optional)",
|
208 |
+
"Password": "Password (Optional)",
|
209 |
+
"Concept": "Concept",
|
210 |
+
"Image": "Image",
|
211 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
212 |
+
"Description": "Description",
|
213 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
214 |
+
"Clear_btn": "Clear",
|
215 |
+
"Submit_btn": "Submit",
|
216 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
217 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
218 |
+
"Timestamp": "Timestamp",
|
219 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
220 |
+
"Browse_text": "## Browse Data",
|
221 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
222 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
223 |
+
"Task": "data/guidelines/USA/English/task.md",
|
224 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
225 |
+
}
|
226 |
+
},
|
227 |
+
"Australia": {
|
228 |
+
"English": {
|
229 |
+
"Country": "Country",
|
230 |
+
"Language": "Language",
|
231 |
+
"Category": "Category",
|
232 |
+
"Email": "Email (Optional)",
|
233 |
+
"Password": "Password (Optional)",
|
234 |
+
"Concept": "Concept",
|
235 |
+
"Image": "Image",
|
236 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
237 |
+
"Description": "Description",
|
238 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
239 |
+
"Clear_btn": "Clear",
|
240 |
+
"Submit_btn": "Submit",
|
241 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
242 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
243 |
+
"Timestamp": "Timestamp",
|
244 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
245 |
+
"Browse_text": "## Browse Data",
|
246 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
247 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
248 |
+
"Task": "data/guidelines/USA/English/task.md",
|
249 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
250 |
+
}
|
251 |
+
},
|
252 |
+
"Bangladesh": {
|
253 |
+
"Bengali": {
|
254 |
+
"Country": "Country",
|
255 |
+
"Language": "Language",
|
256 |
+
"Category": "Category",
|
257 |
+
"Email": "Email (Optional)",
|
258 |
+
"Password": "Password (Optional)",
|
259 |
+
"Concept": "Concept",
|
260 |
+
"Image": "Image",
|
261 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
262 |
+
"Description": "Description",
|
263 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
264 |
+
"Clear_btn": "Clear",
|
265 |
+
"Submit_btn": "Submit",
|
266 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
267 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
268 |
+
"Timestamp": "Timestamp",
|
269 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
270 |
+
"Browse_text": "## Browse Data",
|
271 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
272 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
273 |
+
"Task": "data/guidelines/USA/English/task.md",
|
274 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
275 |
+
}
|
276 |
+
},
|
277 |
+
"Belgium": {
|
278 |
+
"French": {
|
279 |
+
"Country": "Country",
|
280 |
+
"Language": "Language",
|
281 |
+
"Category": "Category",
|
282 |
+
"Email": "Email (Optional)",
|
283 |
+
"Password": "Password (Optional)",
|
284 |
+
"Concept": "Concept",
|
285 |
+
"Image": "Image",
|
286 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
287 |
+
"Description": "Description",
|
288 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
289 |
+
"Clear_btn": "Clear",
|
290 |
+
"Submit_btn": "Submit",
|
291 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
292 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
293 |
+
"Timestamp": "Timestamp",
|
294 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
295 |
+
"Browse_text": "## Browse Data",
|
296 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
297 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
298 |
+
"Task": "data/guidelines/USA/English/task.md",
|
299 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
300 |
+
}
|
301 |
+
},
|
302 |
+
"Brazil": {
|
303 |
+
"Portuguese": {
|
304 |
+
"Country": "Country",
|
305 |
+
"Language": "Language",
|
306 |
+
"Category": "Category",
|
307 |
+
"Email": "Email (Optional)",
|
308 |
+
"Password": "Password (Optional)",
|
309 |
+
"Concept": "Concept",
|
310 |
+
"Image": "Image",
|
311 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
312 |
+
"Description": "Description",
|
313 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
314 |
+
"Clear_btn": "Clear",
|
315 |
+
"Submit_btn": "Submit",
|
316 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
317 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
318 |
+
"Timestamp": "Timestamp",
|
319 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
320 |
+
"Browse_text": "## Browse Data",
|
321 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
322 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
323 |
+
"Task": "data/guidelines/USA/English/task.md",
|
324 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
325 |
+
}
|
326 |
+
},
|
327 |
+
"Bulgaria": {
|
328 |
+
"Bulgarian": {
|
329 |
+
"Country": "Country",
|
330 |
+
"Language": "Language",
|
331 |
+
"Category": "Category",
|
332 |
+
"Email": "Email (Optional)",
|
333 |
+
"Password": "Password (Optional)",
|
334 |
+
"Concept": "Concept",
|
335 |
+
"Image": "Image",
|
336 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
337 |
+
"Description": "Description",
|
338 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
339 |
+
"Clear_btn": "Clear",
|
340 |
+
"Submit_btn": "Submit",
|
341 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
342 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
343 |
+
"Timestamp": "Timestamp",
|
344 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
345 |
+
"Browse_text": "## Browse Data",
|
346 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
347 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
348 |
+
"Task": "data/guidelines/USA/English/task.md",
|
349 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
350 |
+
}
|
351 |
+
},
|
352 |
+
"Chile": {
|
353 |
+
"Spanish": {
|
354 |
+
"Country": "Country",
|
355 |
+
"Language": "Language",
|
356 |
+
"Category": "Category",
|
357 |
+
"Email": "Email (Optional)",
|
358 |
+
"Password": "Password (Optional)",
|
359 |
+
"Concept": "Concept",
|
360 |
+
"Image": "Image",
|
361 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
362 |
+
"Description": "Description",
|
363 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
364 |
+
"Clear_btn": "Clear",
|
365 |
+
"Submit_btn": "Submit",
|
366 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
367 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
368 |
+
"Timestamp": "Timestamp",
|
369 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
370 |
+
"Browse_text": "## Browse Data",
|
371 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
372 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
373 |
+
"Task": "data/guidelines/USA/English/task.md",
|
374 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
375 |
+
}
|
376 |
+
},
|
377 |
+
"China": {
|
378 |
+
"Mandarin Chinese": {
|
379 |
+
"Country": "Country",
|
380 |
+
"Language": "Language",
|
381 |
+
"Category": "Category",
|
382 |
+
"Email": "Email (Optional)",
|
383 |
+
"Password": "Password (Optional)",
|
384 |
+
"Concept": "Concept",
|
385 |
+
"Image": "Image",
|
386 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
387 |
+
"Description": "Description",
|
388 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
389 |
+
"Clear_btn": "Clear",
|
390 |
+
"Submit_btn": "Submit",
|
391 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
392 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
393 |
+
"Timestamp": "Timestamp",
|
394 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
395 |
+
"Browse_text": "## Browse Data",
|
396 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
397 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
398 |
+
"Task": "data/guidelines/USA/English/task.md",
|
399 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
400 |
+
},
|
401 |
+
"Yue Chinese": {
|
402 |
+
"Country": "Country",
|
403 |
+
"Language": "Language",
|
404 |
+
"Category": "Category",
|
405 |
+
"Email": "Email (Optional)",
|
406 |
+
"Password": "Password (Optional)",
|
407 |
+
"Concept": "Concept",
|
408 |
+
"Image": "Image",
|
409 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
410 |
+
"Description": "Description",
|
411 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
412 |
+
"Clear_btn": "Clear",
|
413 |
+
"Submit_btn": "Submit",
|
414 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
415 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
416 |
+
"Timestamp": "Timestamp",
|
417 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
418 |
+
"Browse_text": "## Browse Data",
|
419 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
420 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
421 |
+
"Task": "data/guidelines/USA/English/task.md",
|
422 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
423 |
+
}
|
424 |
+
},
|
425 |
+
"Czechia": {
|
426 |
+
"Czech": {
|
427 |
+
"Country": "Country",
|
428 |
+
"Language": "Language",
|
429 |
+
"Category": "Category",
|
430 |
+
"Email": "Email (Optional)",
|
431 |
+
"Password": "Password (Optional)",
|
432 |
+
"Concept": "Concept",
|
433 |
+
"Image": "Image",
|
434 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
435 |
+
"Description": "Description",
|
436 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
437 |
+
"Clear_btn": "Clear",
|
438 |
+
"Submit_btn": "Submit",
|
439 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
440 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
441 |
+
"Timestamp": "Timestamp",
|
442 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
443 |
+
"Browse_text": "## Browse Data",
|
444 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
445 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
446 |
+
"Task": "data/guidelines/USA/English/task.md",
|
447 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
448 |
+
}
|
449 |
+
},
|
450 |
+
"Denmark": {
|
451 |
+
"Danish": {
|
452 |
+
"Country": "Country",
|
453 |
+
"Language": "Language",
|
454 |
+
"Category": "Category",
|
455 |
+
"Email": "Email (Optional)",
|
456 |
+
"Password": "Password (Optional)",
|
457 |
+
"Concept": "Concept",
|
458 |
+
"Image": "Image",
|
459 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
460 |
+
"Description": "Description",
|
461 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
462 |
+
"Clear_btn": "Clear",
|
463 |
+
"Submit_btn": "Submit",
|
464 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
465 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
466 |
+
"Timestamp": "Timestamp",
|
467 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
468 |
+
"Browse_text": "## Browse Data",
|
469 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
470 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
471 |
+
"Task": "data/guidelines/USA/English/task.md",
|
472 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
473 |
+
}
|
474 |
+
},
|
475 |
+
"Ecuador": {
|
476 |
+
"Spanish": {
|
477 |
+
"Country": "Country",
|
478 |
+
"Language": "Language",
|
479 |
+
"Category": "Category",
|
480 |
+
"Email": "Email (Optional)",
|
481 |
+
"Password": "Password (Optional)",
|
482 |
+
"Concept": "Concept",
|
483 |
+
"Image": "Image",
|
484 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
485 |
+
"Description": "Description",
|
486 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
487 |
+
"Clear_btn": "Clear",
|
488 |
+
"Submit_btn": "Submit",
|
489 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
490 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
491 |
+
"Timestamp": "Timestamp",
|
492 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
493 |
+
"Browse_text": "## Browse Data",
|
494 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
495 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
496 |
+
"Task": "data/guidelines/USA/English/task.md",
|
497 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
498 |
+
}
|
499 |
+
},
|
500 |
+
"Egypt": {
|
501 |
+
"Egyptian Arabic": {
|
502 |
+
"Country": "Country",
|
503 |
+
"Language": "Language",
|
504 |
+
"Category": "Category",
|
505 |
+
"Email": "Email (Optional)",
|
506 |
+
"Password": "Password (Optional)",
|
507 |
+
"Concept": "Concept",
|
508 |
+
"Image": "Image",
|
509 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
510 |
+
"Description": "Description",
|
511 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
512 |
+
"Clear_btn": "Clear",
|
513 |
+
"Submit_btn": "Submit",
|
514 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
515 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
516 |
+
"Timestamp": "Timestamp",
|
517 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
518 |
+
"Browse_text": "## Browse Data",
|
519 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
520 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
521 |
+
"Task": "data/guidelines/USA/English/task.md",
|
522 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
523 |
+
}
|
524 |
+
},
|
525 |
+
"Ethiopia": {
|
526 |
+
"Oromo": {
|
527 |
+
"Country": "Country",
|
528 |
+
"Language": "Language",
|
529 |
+
"Category": "Category",
|
530 |
+
"Email": "Email (Optional)",
|
531 |
+
"Password": "Password (Optional)",
|
532 |
+
"Concept": "Concept",
|
533 |
+
"Image": "Image",
|
534 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
535 |
+
"Description": "Description",
|
536 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
537 |
+
"Clear_btn": "Clear",
|
538 |
+
"Submit_btn": "Submit",
|
539 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
540 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
541 |
+
"Timestamp": "Timestamp",
|
542 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
543 |
+
"Browse_text": "## Browse Data",
|
544 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
545 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
546 |
+
"Task": "data/guidelines/USA/English/task.md",
|
547 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
548 |
+
}
|
549 |
+
},
|
550 |
+
"Germany": {
|
551 |
+
"German": {
|
552 |
+
"Country": "Country",
|
553 |
+
"Language": "Language",
|
554 |
+
"Category": "Category",
|
555 |
+
"Email": "Email (Optional)",
|
556 |
+
"Password": "Password (Optional)",
|
557 |
+
"Concept": "Concept",
|
558 |
+
"Image": "Image",
|
559 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
560 |
+
"Description": "Description",
|
561 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
562 |
+
"Clear_btn": "Clear",
|
563 |
+
"Submit_btn": "Submit",
|
564 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
565 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
566 |
+
"Timestamp": "Timestamp",
|
567 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
568 |
+
"Browse_text": "## Browse Data",
|
569 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
570 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
571 |
+
"Task": "data/guidelines/USA/English/task.md",
|
572 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
573 |
+
}
|
574 |
+
},
|
575 |
+
"Ghana": {
|
576 |
+
"Twi": {
|
577 |
+
"Country": "Country",
|
578 |
+
"Language": "Language",
|
579 |
+
"Category": "Category",
|
580 |
+
"Email": "Email (Optional)",
|
581 |
+
"Password": "Password (Optional)",
|
582 |
+
"Concept": "Concept",
|
583 |
+
"Image": "Image",
|
584 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
585 |
+
"Description": "Description",
|
586 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
587 |
+
"Clear_btn": "Clear",
|
588 |
+
"Submit_btn": "Submit",
|
589 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
590 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
591 |
+
"Timestamp": "Timestamp",
|
592 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
593 |
+
"Browse_text": "## Browse Data",
|
594 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
595 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
596 |
+
"Task": "data/guidelines/USA/English/task.md",
|
597 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
598 |
+
}
|
599 |
+
},
|
600 |
+
"Greece": {
|
601 |
+
"Greek": {
|
602 |
+
"Country": "Country",
|
603 |
+
"Language": "Language",
|
604 |
+
"Category": "Category",
|
605 |
+
"Email": "Email (Optional)",
|
606 |
+
"Password": "Password (Optional)",
|
607 |
+
"Concept": "Concept",
|
608 |
+
"Image": "Image",
|
609 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
610 |
+
"Description": "Description",
|
611 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
612 |
+
"Clear_btn": "Clear",
|
613 |
+
"Submit_btn": "Submit",
|
614 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
615 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
616 |
+
"Timestamp": "Timestamp",
|
617 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
618 |
+
"Browse_text": "## Browse Data",
|
619 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
620 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
621 |
+
"Task": "data/guidelines/USA/English/task.md",
|
622 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
623 |
+
}
|
624 |
+
},
|
625 |
+
"Hungary": {
|
626 |
+
"Hungarian": {
|
627 |
+
"Country": "Country",
|
628 |
+
"Language": "Language",
|
629 |
+
"Category": "Category",
|
630 |
+
"Email": "Email (Optional)",
|
631 |
+
"Password": "Password (Optional)",
|
632 |
+
"Concept": "Concept",
|
633 |
+
"Image": "Image",
|
634 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
635 |
+
"Description": "Description",
|
636 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
637 |
+
"Clear_btn": "Clear",
|
638 |
+
"Submit_btn": "Submit",
|
639 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
640 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
641 |
+
"Timestamp": "Timestamp",
|
642 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
643 |
+
"Browse_text": "## Browse Data",
|
644 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
645 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
646 |
+
"Task": "data/guidelines/USA/English/task.md",
|
647 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
648 |
+
}
|
649 |
+
},
|
650 |
+
"India": {
|
651 |
+
"Urdu ": {
|
652 |
+
"Country": "Country",
|
653 |
+
"Language": "Language",
|
654 |
+
"Category": "Category",
|
655 |
+
"Email": "Email (Optional)",
|
656 |
+
"Password": "Password (Optional)",
|
657 |
+
"Concept": "Concept",
|
658 |
+
"Image": "Image",
|
659 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
660 |
+
"Description": "Description",
|
661 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
662 |
+
"Clear_btn": "Clear",
|
663 |
+
"Submit_btn": "Submit",
|
664 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
665 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
666 |
+
"Timestamp": "Timestamp",
|
667 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
668 |
+
"Browse_text": "## Browse Data",
|
669 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
670 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
671 |
+
"Task": "data/guidelines/USA/English/task.md",
|
672 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
673 |
+
},
|
674 |
+
"Kannada": {
|
675 |
+
"Country": "Country",
|
676 |
+
"Language": "Language",
|
677 |
+
"Category": "Category",
|
678 |
+
"Email": "Email (Optional)",
|
679 |
+
"Password": "Password (Optional)",
|
680 |
+
"Concept": "Concept",
|
681 |
+
"Image": "Image",
|
682 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
683 |
+
"Description": "Description",
|
684 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
685 |
+
"Clear_btn": "Clear",
|
686 |
+
"Submit_btn": "Submit",
|
687 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
688 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
689 |
+
"Timestamp": "Timestamp",
|
690 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
691 |
+
"Browse_text": "## Browse Data",
|
692 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
693 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
694 |
+
"Task": "data/guidelines/USA/English/task.md",
|
695 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
696 |
+
},
|
697 |
+
"Telugu": {
|
698 |
+
"Country": "Country",
|
699 |
+
"Language": "Language",
|
700 |
+
"Category": "Category",
|
701 |
+
"Email": "Email (Optional)",
|
702 |
+
"Password": "Password (Optional)",
|
703 |
+
"Concept": "Concept",
|
704 |
+
"Image": "Image",
|
705 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
706 |
+
"Description": "Description",
|
707 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
708 |
+
"Clear_btn": "Clear",
|
709 |
+
"Submit_btn": "Submit",
|
710 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
711 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
712 |
+
"Timestamp": "Timestamp",
|
713 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
714 |
+
"Browse_text": "## Browse Data",
|
715 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
716 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
717 |
+
"Task": "data/guidelines/USA/English/task.md",
|
718 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
719 |
+
},
|
720 |
+
"Tamil": {
|
721 |
+
"Country": "Country",
|
722 |
+
"Language": "Language",
|
723 |
+
"Category": "Category",
|
724 |
+
"Email": "Email (Optional)",
|
725 |
+
"Password": "Password (Optional)",
|
726 |
+
"Concept": "Concept",
|
727 |
+
"Image": "Image",
|
728 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
729 |
+
"Description": "Description",
|
730 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
731 |
+
"Clear_btn": "Clear",
|
732 |
+
"Submit_btn": "Submit",
|
733 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
734 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
735 |
+
"Timestamp": "Timestamp",
|
736 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
737 |
+
"Browse_text": "## Browse Data",
|
738 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
739 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
740 |
+
"Task": "data/guidelines/USA/English/task.md",
|
741 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
742 |
+
},
|
743 |
+
"Hindi": {
|
744 |
+
"Country": "Country",
|
745 |
+
"Language": "Language",
|
746 |
+
"Category": "Category",
|
747 |
+
"Email": "Email (Optional)",
|
748 |
+
"Password": "Password (Optional)",
|
749 |
+
"Concept": "Concept",
|
750 |
+
"Image": "Image",
|
751 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
752 |
+
"Description": "Description",
|
753 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
754 |
+
"Clear_btn": "Clear",
|
755 |
+
"Submit_btn": "Submit",
|
756 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
757 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
758 |
+
"Timestamp": "Timestamp",
|
759 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
760 |
+
"Browse_text": "## Browse Data",
|
761 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
762 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
763 |
+
"Task": "data/guidelines/USA/English/task.md",
|
764 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
765 |
+
},
|
766 |
+
"Bengali": {
|
767 |
+
"Country": "Country",
|
768 |
+
"Language": "Language",
|
769 |
+
"Category": "Category",
|
770 |
+
"Email": "Email (Optional)",
|
771 |
+
"Password": "Password (Optional)",
|
772 |
+
"Concept": "Concept",
|
773 |
+
"Image": "Image",
|
774 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
775 |
+
"Description": "Description",
|
776 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
777 |
+
"Clear_btn": "Clear",
|
778 |
+
"Submit_btn": "Submit",
|
779 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
780 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
781 |
+
"Timestamp": "Timestamp",
|
782 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
783 |
+
"Browse_text": "## Browse Data",
|
784 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
785 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
786 |
+
"Task": "data/guidelines/USA/English/task.md",
|
787 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
788 |
+
},
|
789 |
+
"Marathi": {
|
790 |
+
"Country": "Country",
|
791 |
+
"Language": "Language",
|
792 |
+
"Category": "Category",
|
793 |
+
"Email": "Email (Optional)",
|
794 |
+
"Password": "Password (Optional)",
|
795 |
+
"Concept": "Concept",
|
796 |
+
"Image": "Image",
|
797 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
798 |
+
"Description": "Description",
|
799 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
800 |
+
"Clear_btn": "Clear",
|
801 |
+
"Submit_btn": "Submit",
|
802 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
803 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
804 |
+
"Timestamp": "Timestamp",
|
805 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
806 |
+
"Browse_text": "## Browse Data",
|
807 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
808 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
809 |
+
"Task": "data/guidelines/USA/English/task.md",
|
810 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
811 |
+
}
|
812 |
+
},
|
813 |
+
"Indonesia": {
|
814 |
+
"Javanese": {
|
815 |
+
"Country": "Country",
|
816 |
+
"Language": "Language",
|
817 |
+
"Category": "Category",
|
818 |
+
"Email": "Email (Optional)",
|
819 |
+
"Password": "Password (Optional)",
|
820 |
+
"Concept": "Concept",
|
821 |
+
"Image": "Image",
|
822 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
823 |
+
"Description": "Description",
|
824 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
825 |
+
"Clear_btn": "Clear",
|
826 |
+
"Submit_btn": "Submit",
|
827 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
828 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
829 |
+
"Timestamp": "Timestamp",
|
830 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
831 |
+
"Browse_text": "## Browse Data",
|
832 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
833 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
834 |
+
"Task": "data/guidelines/USA/English/task.md",
|
835 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
836 |
+
},
|
837 |
+
"Indonesian": {
|
838 |
+
"Country": "Country",
|
839 |
+
"Language": "Language",
|
840 |
+
"Category": "Category",
|
841 |
+
"Email": "Email (Optional)",
|
842 |
+
"Password": "Password (Optional)",
|
843 |
+
"Concept": "Concept",
|
844 |
+
"Image": "Image",
|
845 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
846 |
+
"Description": "Description",
|
847 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
848 |
+
"Clear_btn": "Clear",
|
849 |
+
"Submit_btn": "Submit",
|
850 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
851 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
852 |
+
"Timestamp": "Timestamp",
|
853 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
854 |
+
"Browse_text": "## Browse Data",
|
855 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
856 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
857 |
+
"Task": "data/guidelines/USA/English/task.md",
|
858 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
859 |
+
}
|
860 |
+
},
|
861 |
+
"Israel": {
|
862 |
+
"Hebrew": {
|
863 |
+
"Country": "Country",
|
864 |
+
"Language": "Language",
|
865 |
+
"Category": "Category",
|
866 |
+
"Email": "Email (Optional)",
|
867 |
+
"Password": "Password (Optional)",
|
868 |
+
"Concept": "Concept",
|
869 |
+
"Image": "Image",
|
870 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
871 |
+
"Description": "Description",
|
872 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
873 |
+
"Clear_btn": "Clear",
|
874 |
+
"Submit_btn": "Submit",
|
875 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
876 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
877 |
+
"Timestamp": "Timestamp",
|
878 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
879 |
+
"Browse_text": "## Browse Data",
|
880 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
881 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
882 |
+
"Task": "data/guidelines/USA/English/task.md",
|
883 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
884 |
+
}
|
885 |
+
},
|
886 |
+
"Japan": {
|
887 |
+
"Japanese": {
|
888 |
+
"Country": "Country",
|
889 |
+
"Language": "Language",
|
890 |
+
"Category": "Category",
|
891 |
+
"Email": "Email (Optional)",
|
892 |
+
"Password": "Password (Optional)",
|
893 |
+
"Concept": "Concept",
|
894 |
+
"Image": "Image",
|
895 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
896 |
+
"Description": "Description",
|
897 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
898 |
+
"Clear_btn": "Clear",
|
899 |
+
"Submit_btn": "Submit",
|
900 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
901 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
902 |
+
"Timestamp": "Timestamp",
|
903 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
904 |
+
"Browse_text": "## Browse Data",
|
905 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
906 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
907 |
+
"Task": "data/guidelines/USA/English/task.md",
|
908 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
909 |
+
}
|
910 |
+
},
|
911 |
+
"Jordan": {
|
912 |
+
"Jordanian": {
|
913 |
+
"Country": "Country",
|
914 |
+
"Language": "Language",
|
915 |
+
"Category": "Category",
|
916 |
+
"Email": "Email (Optional)",
|
917 |
+
"Password": "Password (Optional)",
|
918 |
+
"Concept": "Concept",
|
919 |
+
"Image": "Image",
|
920 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
921 |
+
"Description": "Description",
|
922 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
923 |
+
"Clear_btn": "Clear",
|
924 |
+
"Submit_btn": "Submit",
|
925 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
926 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
927 |
+
"Timestamp": "Timestamp",
|
928 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
929 |
+
"Browse_text": "## Browse Data",
|
930 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
931 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
932 |
+
"Task": "data/guidelines/USA/English/task.md",
|
933 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
934 |
+
}
|
935 |
+
},
|
936 |
+
"Mexico": {
|
937 |
+
"Spanish": {
|
938 |
+
"Country": "Country",
|
939 |
+
"Language": "Language",
|
940 |
+
"Category": "Category",
|
941 |
+
"Email": "Email (Optional)",
|
942 |
+
"Password": "Password (Optional)",
|
943 |
+
"Concept": "Concept",
|
944 |
+
"Image": "Image",
|
945 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
946 |
+
"Description": "Description",
|
947 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
948 |
+
"Clear_btn": "Clear",
|
949 |
+
"Submit_btn": "Submit",
|
950 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
951 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
952 |
+
"Timestamp": "Timestamp",
|
953 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
954 |
+
"Browse_text": "## Browse Data",
|
955 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
956 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
957 |
+
"Task": "data/guidelines/USA/English/task.md",
|
958 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
959 |
+
}
|
960 |
+
},
|
961 |
+
"Morocco": {
|
962 |
+
"Moroccan Arabic": {
|
963 |
+
"Country": "Country",
|
964 |
+
"Language": "Language",
|
965 |
+
"Category": "Category",
|
966 |
+
"Email": "Email (Optional)",
|
967 |
+
"Password": "Password (Optional)",
|
968 |
+
"Concept": "Concept",
|
969 |
+
"Image": "Image",
|
970 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
971 |
+
"Description": "Description",
|
972 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
973 |
+
"Clear_btn": "Clear",
|
974 |
+
"Submit_btn": "Submit",
|
975 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
976 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
977 |
+
"Timestamp": "Timestamp",
|
978 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
979 |
+
"Browse_text": "## Browse Data",
|
980 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
981 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
982 |
+
"Task": "data/guidelines/USA/English/task.md",
|
983 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
984 |
+
}
|
985 |
+
},
|
986 |
+
"Netherlands": {
|
987 |
+
"Dutch": {
|
988 |
+
"Country": "Country",
|
989 |
+
"Language": "Language",
|
990 |
+
"Category": "Category",
|
991 |
+
"Email": "Email (Optional)",
|
992 |
+
"Password": "Password (Optional)",
|
993 |
+
"Concept": "Concept",
|
994 |
+
"Image": "Image",
|
995 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
996 |
+
"Description": "Description",
|
997 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
998 |
+
"Clear_btn": "Clear",
|
999 |
+
"Submit_btn": "Submit",
|
1000 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1001 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1002 |
+
"Timestamp": "Timestamp",
|
1003 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1004 |
+
"Browse_text": "## Browse Data",
|
1005 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1006 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1007 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1008 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1009 |
+
}
|
1010 |
+
},
|
1011 |
+
"Nigeria": {
|
1012 |
+
"Yoruba": {
|
1013 |
+
"Country": "Country",
|
1014 |
+
"Language": "Language",
|
1015 |
+
"Category": "Category",
|
1016 |
+
"Email": "Email (Optional)",
|
1017 |
+
"Password": "Password (Optional)",
|
1018 |
+
"Concept": "Concept",
|
1019 |
+
"Image": "Image",
|
1020 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1021 |
+
"Description": "Description",
|
1022 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1023 |
+
"Clear_btn": "Clear",
|
1024 |
+
"Submit_btn": "Submit",
|
1025 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1026 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1027 |
+
"Timestamp": "Timestamp",
|
1028 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1029 |
+
"Browse_text": "## Browse Data",
|
1030 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1031 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1032 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1033 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1034 |
+
},
|
1035 |
+
"Hausa": {
|
1036 |
+
"Country": "Country",
|
1037 |
+
"Language": "Language",
|
1038 |
+
"Category": "Category",
|
1039 |
+
"Email": "Email (Optional)",
|
1040 |
+
"Password": "Password (Optional)",
|
1041 |
+
"Concept": "Concept",
|
1042 |
+
"Image": "Image",
|
1043 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1044 |
+
"Description": "Description",
|
1045 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1046 |
+
"Clear_btn": "Clear",
|
1047 |
+
"Submit_btn": "Submit",
|
1048 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1049 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1050 |
+
"Timestamp": "Timestamp",
|
1051 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1052 |
+
"Browse_text": "## Browse Data",
|
1053 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1054 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1055 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1056 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1057 |
+
}
|
1058 |
+
},
|
1059 |
+
"Philippines": {
|
1060 |
+
"Tagalog": {
|
1061 |
+
"Country": "Country",
|
1062 |
+
"Language": "Language",
|
1063 |
+
"Category": "Category",
|
1064 |
+
"Email": "Email (Optional)",
|
1065 |
+
"Password": "Password (Optional)",
|
1066 |
+
"Concept": "Concept",
|
1067 |
+
"Image": "Image",
|
1068 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1069 |
+
"Description": "Description",
|
1070 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1071 |
+
"Clear_btn": "Clear",
|
1072 |
+
"Submit_btn": "Submit",
|
1073 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1074 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1075 |
+
"Timestamp": "Timestamp",
|
1076 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1077 |
+
"Browse_text": "## Browse Data",
|
1078 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1079 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1080 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1081 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1082 |
+
}
|
1083 |
+
},
|
1084 |
+
"Poland": {
|
1085 |
+
"Polish": {
|
1086 |
+
"Country": "Country",
|
1087 |
+
"Language": "Language",
|
1088 |
+
"Category": "Category",
|
1089 |
+
"Email": "Email (Optional)",
|
1090 |
+
"Password": "Password (Optional)",
|
1091 |
+
"Concept": "Concept",
|
1092 |
+
"Image": "Image",
|
1093 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1094 |
+
"Description": "Description",
|
1095 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1096 |
+
"Clear_btn": "Clear",
|
1097 |
+
"Submit_btn": "Submit",
|
1098 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1099 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1100 |
+
"Timestamp": "Timestamp",
|
1101 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1102 |
+
"Browse_text": "## Browse Data",
|
1103 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1104 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1105 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1106 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1107 |
+
}
|
1108 |
+
},
|
1109 |
+
"Portugal": {
|
1110 |
+
"Portuguese": {
|
1111 |
+
"Country": "Country",
|
1112 |
+
"Language": "Language",
|
1113 |
+
"Category": "Category",
|
1114 |
+
"Email": "Email (Optional)",
|
1115 |
+
"Password": "Password (Optional)",
|
1116 |
+
"Concept": "Concept",
|
1117 |
+
"Image": "Image",
|
1118 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1119 |
+
"Description": "Description",
|
1120 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1121 |
+
"Clear_btn": "Clear",
|
1122 |
+
"Submit_btn": "Submit",
|
1123 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1124 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1125 |
+
"Timestamp": "Timestamp",
|
1126 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1127 |
+
"Browse_text": "## Browse Data",
|
1128 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1129 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1130 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1131 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1132 |
+
}
|
1133 |
+
},
|
1134 |
+
"Romania": {
|
1135 |
+
"Romanian": {
|
1136 |
+
"Country": "Country",
|
1137 |
+
"Language": "Language",
|
1138 |
+
"Category": "Category",
|
1139 |
+
"Email": "Email (Optional)",
|
1140 |
+
"Password": "Password (Optional)",
|
1141 |
+
"Concept": "Concept",
|
1142 |
+
"Image": "Image",
|
1143 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1144 |
+
"Description": "Description",
|
1145 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1146 |
+
"Clear_btn": "Clear",
|
1147 |
+
"Submit_btn": "Submit",
|
1148 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1149 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1150 |
+
"Timestamp": "Timestamp",
|
1151 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1152 |
+
"Browse_text": "## Browse Data",
|
1153 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1154 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1155 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1156 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1157 |
+
}
|
1158 |
+
},
|
1159 |
+
"Russia": {
|
1160 |
+
"Russian": {
|
1161 |
+
"Country": "Country",
|
1162 |
+
"Language": "Language",
|
1163 |
+
"Category": "Category",
|
1164 |
+
"Email": "Email (Optional)",
|
1165 |
+
"Password": "Password (Optional)",
|
1166 |
+
"Concept": "Concept",
|
1167 |
+
"Image": "Image",
|
1168 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1169 |
+
"Description": "Description",
|
1170 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1171 |
+
"Clear_btn": "Clear",
|
1172 |
+
"Submit_btn": "Submit",
|
1173 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1174 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1175 |
+
"Timestamp": "Timestamp",
|
1176 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1177 |
+
"Browse_text": "## Browse Data",
|
1178 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1179 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1180 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1181 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1182 |
+
}
|
1183 |
+
},
|
1184 |
+
"Rwanda": {
|
1185 |
+
"Kinyarwanda": {
|
1186 |
+
"Country": "Country",
|
1187 |
+
"Language": "Language",
|
1188 |
+
"Category": "Category",
|
1189 |
+
"Email": "Email (Optional)",
|
1190 |
+
"Password": "Password (Optional)",
|
1191 |
+
"Concept": "Concept",
|
1192 |
+
"Image": "Image",
|
1193 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1194 |
+
"Description": "Description",
|
1195 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1196 |
+
"Clear_btn": "Clear",
|
1197 |
+
"Submit_btn": "Submit",
|
1198 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1199 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1200 |
+
"Timestamp": "Timestamp",
|
1201 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1202 |
+
"Browse_text": "## Browse Data",
|
1203 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1204 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1205 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1206 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1207 |
+
}
|
1208 |
+
},
|
1209 |
+
"Singapore": {
|
1210 |
+
"Mandarin Chinese": {
|
1211 |
+
"Country": "Country",
|
1212 |
+
"Language": "Language",
|
1213 |
+
"Category": "Category",
|
1214 |
+
"Email": "Email (Optional)",
|
1215 |
+
"Password": "Password (Optional)",
|
1216 |
+
"Concept": "Concept",
|
1217 |
+
"Image": "Image",
|
1218 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1219 |
+
"Description": "Description",
|
1220 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1221 |
+
"Clear_btn": "Clear",
|
1222 |
+
"Submit_btn": "Submit",
|
1223 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1224 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1225 |
+
"Timestamp": "Timestamp",
|
1226 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1227 |
+
"Browse_text": "## Browse Data",
|
1228 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1229 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1230 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1231 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1232 |
+
}
|
1233 |
+
},
|
1234 |
+
"South Korea": {
|
1235 |
+
"Korean": {
|
1236 |
+
"Country": "Country",
|
1237 |
+
"Language": "Language",
|
1238 |
+
"Category": "Category",
|
1239 |
+
"Email": "Email (Optional)",
|
1240 |
+
"Password": "Password (Optional)",
|
1241 |
+
"Concept": "Concept",
|
1242 |
+
"Image": "Image",
|
1243 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1244 |
+
"Description": "Description",
|
1245 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1246 |
+
"Clear_btn": "Clear",
|
1247 |
+
"Submit_btn": "Submit",
|
1248 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1249 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1250 |
+
"Timestamp": "Timestamp",
|
1251 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1252 |
+
"Browse_text": "## Browse Data",
|
1253 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1254 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1255 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1256 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1257 |
+
}
|
1258 |
+
},
|
1259 |
+
"Spain": {
|
1260 |
+
"Spanish": {
|
1261 |
+
"Country": "Country",
|
1262 |
+
"Language": "Language",
|
1263 |
+
"Category": "Category",
|
1264 |
+
"Email": "Email (Optional)",
|
1265 |
+
"Password": "Password (Optional)",
|
1266 |
+
"Concept": "Concept",
|
1267 |
+
"Image": "Image",
|
1268 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1269 |
+
"Description": "Description",
|
1270 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1271 |
+
"Clear_btn": "Clear",
|
1272 |
+
"Submit_btn": "Submit",
|
1273 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1274 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1275 |
+
"Timestamp": "Timestamp",
|
1276 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1277 |
+
"Browse_text": "## Browse Data",
|
1278 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1279 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1280 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1281 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1282 |
+
}
|
1283 |
+
},
|
1284 |
+
"Switzerland": {
|
1285 |
+
"German": {
|
1286 |
+
"Country": "Country",
|
1287 |
+
"Language": "Language",
|
1288 |
+
"Category": "Category",
|
1289 |
+
"Email": "Email (Optional)",
|
1290 |
+
"Password": "Password (Optional)",
|
1291 |
+
"Concept": "Concept",
|
1292 |
+
"Image": "Image",
|
1293 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1294 |
+
"Description": "Description",
|
1295 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1296 |
+
"Clear_btn": "Clear",
|
1297 |
+
"Submit_btn": "Submit",
|
1298 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1299 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1300 |
+
"Timestamp": "Timestamp",
|
1301 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1302 |
+
"Browse_text": "## Browse Data",
|
1303 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1304 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1305 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1306 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1307 |
+
}
|
1308 |
+
},
|
1309 |
+
"Tanzania": {
|
1310 |
+
"Swahili": {
|
1311 |
+
"Country": "Country",
|
1312 |
+
"Language": "Language",
|
1313 |
+
"Category": "Category",
|
1314 |
+
"Email": "Email (Optional)",
|
1315 |
+
"Password": "Password (Optional)",
|
1316 |
+
"Concept": "Concept",
|
1317 |
+
"Image": "Image",
|
1318 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1319 |
+
"Description": "Description",
|
1320 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1321 |
+
"Clear_btn": "Clear",
|
1322 |
+
"Submit_btn": "Submit",
|
1323 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1324 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1325 |
+
"Timestamp": "Timestamp",
|
1326 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1327 |
+
"Browse_text": "## Browse Data",
|
1328 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1329 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1330 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1331 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1332 |
+
}
|
1333 |
+
},
|
1334 |
+
"Turkey": {
|
1335 |
+
"Turkish": {
|
1336 |
+
"Country": "Country",
|
1337 |
+
"Language": "Language",
|
1338 |
+
"Category": "Category",
|
1339 |
+
"Email": "Email (Optional)",
|
1340 |
+
"Password": "Password (Optional)",
|
1341 |
+
"Concept": "Concept",
|
1342 |
+
"Image": "Image",
|
1343 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1344 |
+
"Description": "Description",
|
1345 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1346 |
+
"Clear_btn": "Clear",
|
1347 |
+
"Submit_btn": "Submit",
|
1348 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1349 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1350 |
+
"Timestamp": "Timestamp",
|
1351 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1352 |
+
"Browse_text": "## Browse Data",
|
1353 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1354 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1355 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1356 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1357 |
+
}
|
1358 |
+
},
|
1359 |
+
"Ukraine": {
|
1360 |
+
"Ukranian": {
|
1361 |
+
"Country": "Country",
|
1362 |
+
"Language": "Language",
|
1363 |
+
"Category": "Category",
|
1364 |
+
"Email": "Email (Optional)",
|
1365 |
+
"Password": "Password (Optional)",
|
1366 |
+
"Concept": "Concept",
|
1367 |
+
"Image": "Image",
|
1368 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1369 |
+
"Description": "Description",
|
1370 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1371 |
+
"Clear_btn": "Clear",
|
1372 |
+
"Submit_btn": "Submit",
|
1373 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1374 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1375 |
+
"Timestamp": "Timestamp",
|
1376 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1377 |
+
"Browse_text": "## Browse Data",
|
1378 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1379 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1380 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1381 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1382 |
+
}
|
1383 |
+
},
|
1384 |
+
"Uzbekistan": {
|
1385 |
+
"Uzbek": {
|
1386 |
+
"Country": "Country",
|
1387 |
+
"Language": "Language",
|
1388 |
+
"Category": "Category",
|
1389 |
+
"Email": "Email (Optional)",
|
1390 |
+
"Password": "Password (Optional)",
|
1391 |
+
"Concept": "Concept",
|
1392 |
+
"Image": "Image",
|
1393 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1394 |
+
"Description": "Description",
|
1395 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1396 |
+
"Clear_btn": "Clear",
|
1397 |
+
"Submit_btn": "Submit",
|
1398 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1399 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1400 |
+
"Timestamp": "Timestamp",
|
1401 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1402 |
+
"Browse_text": "## Browse Data",
|
1403 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1404 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1405 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1406 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1407 |
+
}
|
1408 |
+
},
|
1409 |
+
"Vietnam": {
|
1410 |
+
"Vietnamese": {
|
1411 |
+
"Country": "Country",
|
1412 |
+
"Language": "Language",
|
1413 |
+
"Category": "Category",
|
1414 |
+
"Email": "Email (Optional)",
|
1415 |
+
"Password": "Password (Optional)",
|
1416 |
+
"Concept": "Concept",
|
1417 |
+
"Image": "Image",
|
1418 |
+
"Image_URL": "Image URL (optional, if no image is loaded)",
|
1419 |
+
"Description": "Description",
|
1420 |
+
"Instructs_btn": "\ud83d\udcd8 Show instructions",
|
1421 |
+
"Clear_btn": "Clear",
|
1422 |
+
"Submit_btn": "Submit",
|
1423 |
+
"Saving_text": "\u23f3 Please wait while your data is being saved.",
|
1424 |
+
"Saved_text": "Your data has been saved successfully. The data table will update shortly. You may close this window.",
|
1425 |
+
"Timestamp": "Timestamp",
|
1426 |
+
"Exit_btn": "\u2b05\ufe0f Change Language",
|
1427 |
+
"Browse_text": "## Browse Data",
|
1428 |
+
"Loading_msg": "**Loading your data, please wait...**",
|
1429 |
+
"Intro": "data/guidelines/USA/English/intro.md",
|
1430 |
+
"Task": "data/guidelines/USA/English/task.md",
|
1431 |
+
"Instructions": "data/guidelines/USA/English/instructions.md"
|
1432 |
+
}
|
1433 |
+
}
|
1434 |
+
}
|
data/update_metadata_from_concepts.py
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
|
3 |
+
meta = json.load(open("metadata.json", "r", encoding="utf-8"))
|
4 |
+
concepts = json.load(open("concepts.json", "r", encoding="utf-8"))
|
5 |
+
|
6 |
+
for country in concepts:
|
7 |
+
if not country in meta:
|
8 |
+
meta[country] = dict()
|
9 |
+
for language in concepts[country]:
|
10 |
+
if language not in meta[country]:
|
11 |
+
meta[country][language] = meta["USA"]["English"]
|
12 |
+
|
13 |
+
with open("metadata.json", "w", encoding="utf-8") as f:
|
14 |
+
json.dump(meta, f, indent=2)
|
data/words_map.py
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
words_mapping = {
|
2 |
+
"Español": {
|
3 |
+
"Food and Beverages": "Comida y Bebidas",
|
4 |
+
"Clothing": "Ropa",
|
5 |
+
"Buildings (interior and exterior)": "Edificios (interior y exterior)",
|
6 |
+
"Instruments, Tools and Utensils": "Instrumentos, Herramientas y Utensilios",
|
7 |
+
"Celebrations, Sports and Events": "Celebraciones, Deportes y Eventos"
|
8 |
+
}
|
9 |
+
}
|
logic/__pycache__/data_utils.cpython-310.pyc
ADDED
Binary file (5.74 kB). View file
|
|
logic/__pycache__/handlers.cpython-310.pyc
ADDED
Binary file (12.9 kB). View file
|
|
logic/blur.py
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import cv2
|
2 |
+
import numpy as np
|
3 |
+
import time
|
4 |
+
import os
|
5 |
+
from retinaface import RetinaFace
|
6 |
+
|
7 |
+
|
8 |
+
def blur_faces(image, blur_amount=30, verbose=False):
|
9 |
+
# Start timer
|
10 |
+
start_time = time.time()
|
11 |
+
|
12 |
+
# Convert image from BGR to RGB (if using OpenCV's imread)
|
13 |
+
# image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
|
14 |
+
|
15 |
+
# Detect faces using RetinaFace
|
16 |
+
detection_start = time.time()
|
17 |
+
faces = RetinaFace.detect_faces(image)
|
18 |
+
detection_time = time.time() - detection_start
|
19 |
+
|
20 |
+
# Create a copy of the image
|
21 |
+
output_image = image.copy()
|
22 |
+
|
23 |
+
face_count = 0
|
24 |
+
blurring_start = time.time()
|
25 |
+
# import pdb; pdb.set_trace()
|
26 |
+
# Process each face
|
27 |
+
if faces and isinstance(faces, dict):
|
28 |
+
for face_key in faces:
|
29 |
+
face_count += 1
|
30 |
+
face_data = faces[face_key]
|
31 |
+
|
32 |
+
# Get bounding box coordinates
|
33 |
+
x1, y1, x2, y2 = face_data['facial_area']
|
34 |
+
|
35 |
+
# Ensure the coordinates are within the image boundaries
|
36 |
+
ih, iw = image.shape[:2]
|
37 |
+
x1, y1 = max(0, x1), max(0, y1)
|
38 |
+
x2, y2 = min(iw, x2), min(ih, y2)
|
39 |
+
|
40 |
+
# Extract face region
|
41 |
+
face_region = output_image[y1:y2, x1:x2]
|
42 |
+
|
43 |
+
# Apply blur
|
44 |
+
blurred_face = cv2.GaussianBlur(face_region, (blur_amount, blur_amount), 0)
|
45 |
+
|
46 |
+
# Replace face region with blurred version
|
47 |
+
output_image[y1:y2, x1:x2] = blurred_face
|
48 |
+
|
49 |
+
blurring_time = time.time() - blurring_start
|
50 |
+
total_time = time.time() - start_time
|
51 |
+
|
52 |
+
if verbose:
|
53 |
+
# Print timing information
|
54 |
+
print(f"Face blurring performance metrics:")
|
55 |
+
print(f"Total faces detected: {face_count}")
|
56 |
+
print(f"Face detection time: {detection_time:.4f} seconds")
|
57 |
+
print(f"Face blurring time: {blurring_time:.4f} seconds")
|
58 |
+
print(f"Total processing time: {total_time:.4f} seconds")
|
59 |
+
print(f"Average time per face: {(total_time/max(1, face_count)):.4f} seconds")
|
60 |
+
|
61 |
+
return output_image, {
|
62 |
+
"face_count": face_count,
|
63 |
+
"detection_time": detection_time,
|
64 |
+
"blurring_time": blurring_time,
|
65 |
+
"total_time": total_time,
|
66 |
+
"avg_time_per_face": total_time/max(1, face_count)
|
67 |
+
}
|
68 |
+
|
69 |
+
# Example usage
|
70 |
+
if __name__ == "__main__":
|
71 |
+
# Read an image from file
|
72 |
+
image_path = "multiple_people2.jpeg" # Replace with your image path
|
73 |
+
output_path = "blurred_output.jpg" # Output path for the blurred image
|
74 |
+
|
75 |
+
image = cv2.imread(image_path)
|
76 |
+
|
77 |
+
if image is None:
|
78 |
+
print(f"Could not read image from {image_path}")
|
79 |
+
else:
|
80 |
+
# Process the image with timing
|
81 |
+
result_image, timing_info = blur_faces(image, blur_amount=31)
|
82 |
+
|
83 |
+
# Save the result
|
84 |
+
cv2.imwrite(output_path, result_image)
|
85 |
+
print(f"Blurred image saved to {output_path}")
|
86 |
+
|
87 |
+
|
88 |
+
|
89 |
+
## requirements and cv2
|
90 |
+
# pip install retina-face
|
91 |
+
# pip install opencv-python
|
logic/data_utils.py
ADDED
@@ -0,0 +1,256 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import json
|
3 |
+
import time
|
4 |
+
from huggingface_hub import HfApi, create_repo, CommitScheduler
|
5 |
+
import bcrypt
|
6 |
+
import shutil
|
7 |
+
import uuid
|
8 |
+
import gradio as gr
|
9 |
+
from PIL import Image
|
10 |
+
import numpy as np
|
11 |
+
|
12 |
+
|
13 |
+
def load_concepts(path="data/concepts.json"):
|
14 |
+
with open(path, encoding='utf-8') as f:
|
15 |
+
data = json.load(f)
|
16 |
+
sorted_data = dict()
|
17 |
+
for country in sorted(data):
|
18 |
+
sorted_data[country] = dict()
|
19 |
+
for lang in sorted(data[country]):
|
20 |
+
sorted_data[country][lang] = data[country][lang]
|
21 |
+
return sorted_data
|
22 |
+
|
23 |
+
|
24 |
+
def load_metadata(path="data/metadata.json"):
|
25 |
+
with open(path, "r", encoding="utf-8") as f:
|
26 |
+
data = json.load(f)
|
27 |
+
sorted_data = dict()
|
28 |
+
for country in sorted(data):
|
29 |
+
sorted_data[country] = dict()
|
30 |
+
for lang in sorted(data[country]):
|
31 |
+
sorted_data[country][lang] = data[country][lang]
|
32 |
+
return sorted_data
|
33 |
+
|
34 |
+
|
35 |
+
class CustomHFDatasetSaver:
|
36 |
+
def __init__(self, api_token, dataset_name, private=False):
|
37 |
+
self.api_token = api_token
|
38 |
+
self.dataset_name = dataset_name
|
39 |
+
self.private = private
|
40 |
+
self.api = HfApi()
|
41 |
+
|
42 |
+
def setup(self, data_outputs, local_ds_folder):
|
43 |
+
# create repo is not exist
|
44 |
+
self.dataset_name = create_repo(
|
45 |
+
repo_id=self.dataset_name,
|
46 |
+
token=self.api_token,
|
47 |
+
private=self.private,
|
48 |
+
repo_type="dataset",
|
49 |
+
exist_ok=True,
|
50 |
+
).repo_id
|
51 |
+
|
52 |
+
# Create the local data folder if not exist
|
53 |
+
self.local_ds_folder = local_ds_folder
|
54 |
+
os.makedirs(self.local_ds_folder, exist_ok=True)
|
55 |
+
|
56 |
+
self.data_outputs = data_outputs # list of components to read values from
|
57 |
+
|
58 |
+
# create scheduler to commit the data to the hub every x minutes
|
59 |
+
self.scheduler = CommitScheduler(
|
60 |
+
repo_id=self.dataset_name,
|
61 |
+
repo_type="dataset",
|
62 |
+
folder_path=self.local_ds_folder,
|
63 |
+
every=1,
|
64 |
+
token=self.api_token,
|
65 |
+
)
|
66 |
+
|
67 |
+
def validate_data(self, values_dic):
|
68 |
+
"""
|
69 |
+
Validates the data before saving to ensure no required fields are empty.
|
70 |
+
Returns (bool, str) tuple where first value indicates if validation passed
|
71 |
+
and second value contains error message if validation failed.
|
72 |
+
"""
|
73 |
+
# Remove 'image' from required fields since we handle it separately
|
74 |
+
required_fields = ['country', 'language', 'category', 'concept', 'caption']
|
75 |
+
|
76 |
+
# Check if image is provided (either uploaded or via URL)
|
77 |
+
image = values_dic.get('image')
|
78 |
+
image_url = values_dic.get('image_url')
|
79 |
+
|
80 |
+
# Check if image exists and is not None
|
81 |
+
has_image = image is not None and (isinstance(image, dict) or (hasattr(image, 'shape') and image.shape[0] > 0))
|
82 |
+
has_url = image_url is not None and image_url.strip() != ""
|
83 |
+
|
84 |
+
if not has_image and not has_url:
|
85 |
+
return False, "Either an image or image URL must be provided"
|
86 |
+
|
87 |
+
# Check required fields
|
88 |
+
for field in required_fields:
|
89 |
+
value = values_dic.get(field)
|
90 |
+
if value is None or (isinstance(value, str) and value.strip() == ""):
|
91 |
+
return False, f"Required field '{field}' cannot be empty"
|
92 |
+
|
93 |
+
# Check if image file exists if image path is provided
|
94 |
+
if has_image and isinstance(image, dict):
|
95 |
+
if not os.path.exists(image.get('path', '')):
|
96 |
+
return False, "Image file not found"
|
97 |
+
|
98 |
+
return True, ""
|
99 |
+
|
100 |
+
#TODO: add a function to check if the user is logged in
|
101 |
+
def is_logged_in(self):
|
102 |
+
pass
|
103 |
+
|
104 |
+
#TODO: check if the user is logged in (add a decorator to the save function)
|
105 |
+
def save(self, *values):
|
106 |
+
# 'values' are the outputs from your data collection components,
|
107 |
+
# you can map these to field names as needed
|
108 |
+
values_dic = dict(zip(self.data_outputs, values))
|
109 |
+
|
110 |
+
# print(f"Values received: {values_dic}")
|
111 |
+
|
112 |
+
# Validate data before proceeding
|
113 |
+
is_valid, error_msg = self.validate_data(values_dic)
|
114 |
+
if not is_valid:
|
115 |
+
raise gr.Error(error_msg)
|
116 |
+
# raise ValueError(error_msg)
|
117 |
+
|
118 |
+
values_dic['password'] = self.hash_password(values_dic['password'])
|
119 |
+
|
120 |
+
# # Process main category and concept
|
121 |
+
# main_category = values_dic.get('category', '')
|
122 |
+
# main_concept = values_dic.get('concept', '')
|
123 |
+
|
124 |
+
# # Process category-specific concept dropdowns
|
125 |
+
# additional_concepts_by_category = {}
|
126 |
+
# # Extract predefined categories and their corresponding dropdowns from values_dic
|
127 |
+
# predefined_categories = sorted(list(values_dic.get('concepts_dict', {})
|
128 |
+
# .get(values_dic.get('country', 'USA'), {})
|
129 |
+
# .get(values_dic.get('language', 'English'), {}).keys()))[:5]
|
130 |
+
# # Process each category dropdown
|
131 |
+
# for i, category in enumerate(predefined_categories):
|
132 |
+
# dropdown_key = f'category{i+1}_concepts'
|
133 |
+
# if dropdown_key in values_dic and values_dic[dropdown_key]:
|
134 |
+
# # Only add non-empty concept selections
|
135 |
+
# if values_dic[dropdown_key]:
|
136 |
+
# additional_concepts_by_category[category] = values_dic[dropdown_key]
|
137 |
+
|
138 |
+
### TODO: fix saving additional concepts if not displayed in English
|
139 |
+
# # Process category-specific concept dropdowns
|
140 |
+
# additional_concepts_by_category = {}
|
141 |
+
|
142 |
+
# # Extract the country and language
|
143 |
+
# country = values_dic.get('country', 'USA')
|
144 |
+
# language = values_dic.get('language', 'English')
|
145 |
+
# concepts_dict = values_dic.get('concepts_dict', {})
|
146 |
+
# lang2eng_mapping = values_dic.get('country_lang_map', {})
|
147 |
+
|
148 |
+
# # Get the English version of the language for dictionary lookup
|
149 |
+
# eng_lang = lang2eng_mapping.get(language, language)
|
150 |
+
|
151 |
+
# # Get the predefined categories in English
|
152 |
+
# predefined_categories = sorted(list(concepts_dict.get(country, {}).get(eng_lang, {}).keys()))[:5]
|
153 |
+
|
154 |
+
# # Process each category dropdown
|
155 |
+
# for i, category in enumerate(predefined_categories):
|
156 |
+
# dropdown_key = f'category_{i+1}_concepts'
|
157 |
+
# if dropdown_key in values_dic and values_dic[dropdown_key]:
|
158 |
+
# # Only add non-empty concept selections
|
159 |
+
# additional_concepts_by_category[category] = values_dic[dropdown_key]
|
160 |
+
|
161 |
+
current_timestamp = int(time.time() * 1000)
|
162 |
+
# Create a unique ID for the sample is not provided
|
163 |
+
if not values_dic.get("id"):
|
164 |
+
# Missing ID
|
165 |
+
country, language, category, concept = values_dic.get("country"), values_dic.get("language"), values_dic.get("category"), values_dic.get("concept")
|
166 |
+
values_dic["id"] = f'{country}_{language}_{category}_{concept}_{current_timestamp}'
|
167 |
+
|
168 |
+
#prepare the main directory of the sample
|
169 |
+
if values_dic.get("username"):
|
170 |
+
sample_dir = os.path.join("logged_in_users", values_dic["country"], values_dic["language"], values_dic["username"], str(current_timestamp))
|
171 |
+
else:
|
172 |
+
sample_dir = os.path.join("anonymous_users", values_dic["country"], values_dic["language"], str(uuid.uuid4()))
|
173 |
+
|
174 |
+
os.makedirs(os.path.join(self.local_ds_folder, sample_dir), exist_ok=True)
|
175 |
+
|
176 |
+
# Destination path
|
177 |
+
dest_image_path = os.path.join(sample_dir, "image.png")
|
178 |
+
# Source path (to be used for copying the file in the with lock block)
|
179 |
+
# This is the path of the image file that was uploaded by the user
|
180 |
+
# I want to save the values_dic['image'] in the dest_image_path
|
181 |
+
# Convert numpy array to PIL Image and save it
|
182 |
+
# ===
|
183 |
+
# uploaded_image_path = os.path.join(self.local_ds_folder, dest_image_path)
|
184 |
+
# img = Image.fromarray(values_dic['image'])
|
185 |
+
# img.save(uploaded_image_path)
|
186 |
+
full_dest_path = os.path.join(self.local_ds_folder, dest_image_path)
|
187 |
+
|
188 |
+
# Handle different image types
|
189 |
+
image_data = values_dic['image']
|
190 |
+
|
191 |
+
if isinstance(image_data, dict) and 'path' in image_data:
|
192 |
+
# New upload case - copy from the uploaded path
|
193 |
+
uploaded_image_path = image_data['path']
|
194 |
+
with self.scheduler.lock:
|
195 |
+
shutil.copy(uploaded_image_path, full_dest_path)
|
196 |
+
elif isinstance(image_data, np.ndarray): # not values_dic.get('excluded', False) and
|
197 |
+
# Exclude case with numpy array - save the array as an image
|
198 |
+
with self.scheduler.lock:
|
199 |
+
# Convert numpy array to PIL image and save
|
200 |
+
img = Image.fromarray(image_data)
|
201 |
+
img.save(full_dest_path)
|
202 |
+
elif isinstance(image_data, Image.Image):
|
203 |
+
# PIL image case
|
204 |
+
with self.scheduler.lock:
|
205 |
+
image_data.save(full_dest_path)
|
206 |
+
|
207 |
+
values_dic['image'] = dest_image_path
|
208 |
+
image_file_path_on_hub = f"https://huggingface.co/datasets/{self.dataset_name}/resolve/main/{dest_image_path}"
|
209 |
+
|
210 |
+
# print(f"Saving sample: {values}")
|
211 |
+
# Build the metadata dictionary.
|
212 |
+
data_dict = {
|
213 |
+
# in case using windows
|
214 |
+
"image": values_dic['image'].replace("\\", "/"),
|
215 |
+
"image_file": image_file_path_on_hub.replace("\\", "/"),
|
216 |
+
# "image": values_dic['image'],
|
217 |
+
# "image_file": image_file_path_on_hub,
|
218 |
+
"image_url": values_dic['image_url'] or "",
|
219 |
+
"caption": values_dic['caption'] or "",
|
220 |
+
"country": values_dic['country'] or "",
|
221 |
+
"language": values_dic['language'] or "",
|
222 |
+
"category": values_dic['category'] or "",
|
223 |
+
"concept": values_dic['concept'] or "",
|
224 |
+
"category_1_concepts": [""] if values_dic.get('category_1_concepts', [""])==[] else values_dic.get('category_1_concepts', [""]),
|
225 |
+
"category_2_concepts": [""] if values_dic.get('category_2_concepts', [""])==[] else values_dic.get('category_2_concepts', [""]),
|
226 |
+
"category_3_concepts": [""] if values_dic.get('category_3_concepts', [""])==[] else values_dic.get('category_3_concepts', [""]),
|
227 |
+
"category_4_concepts": [""] if values_dic.get('category_4_concepts', [""])==[] else values_dic.get('category_4_concepts', [""]),
|
228 |
+
"category_5_concepts": [""] if values_dic.get('category_5_concepts', [""])==[] else values_dic.get('category_5_concepts', [""]),
|
229 |
+
"timestamp": current_timestamp,
|
230 |
+
"username": values_dic['username'] or "",
|
231 |
+
"password": values_dic['password'] or "",
|
232 |
+
"id": values_dic['id'],
|
233 |
+
"excluded": False if values_dic.get('excluded') is None else bool(values_dic.get('excluded')),
|
234 |
+
# "is_blurred": str(values_dic.get('is_blurred'))
|
235 |
+
}
|
236 |
+
|
237 |
+
print(f"Data dictionary: {data_dict}")
|
238 |
+
# Define a unique filename for the JSON metadata file (stored in self.folder).
|
239 |
+
json_filename = f"sample_{current_timestamp}.json"
|
240 |
+
json_file_path = os.path.join(self.local_ds_folder, sample_dir, json_filename)
|
241 |
+
|
242 |
+
with self.scheduler.lock:
|
243 |
+
# Save the metadata to the sample file in the local dataset folder
|
244 |
+
with open(json_file_path, "w", encoding="utf-8") as f:
|
245 |
+
json.dump(data_dict, f, indent=2)
|
246 |
+
|
247 |
+
print("Data saved successfully")
|
248 |
+
|
249 |
+
def hash_password(self, raw_password):
|
250 |
+
"""
|
251 |
+
Hashes a raw password using bcrypt and returns the hashed password.
|
252 |
+
raw_password (str): The plain text password to be hashed.
|
253 |
+
str: The hashed password as a string.
|
254 |
+
"""
|
255 |
+
hashed_password = bcrypt.hashpw(raw_password.encode(), bcrypt.gensalt()).decode()
|
256 |
+
return hashed_password
|
logic/handlers.py
ADDED
@@ -0,0 +1,535 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os.path
|
2 |
+
import datetime
|
3 |
+
import io
|
4 |
+
import PIL
|
5 |
+
import requests
|
6 |
+
from datasets import load_dataset, concatenate_datasets, Image
|
7 |
+
from data.lang2eng_map import lang2eng_mapping
|
8 |
+
from data.words_map import words_mapping
|
9 |
+
import gradio as gr
|
10 |
+
import bcrypt
|
11 |
+
from config.settings import HF_API_TOKEN
|
12 |
+
from huggingface_hub import snapshot_download
|
13 |
+
# from .blur import blur_faces, detect_faces
|
14 |
+
from retinaface import RetinaFace
|
15 |
+
from gradio_modal import Modal
|
16 |
+
import numpy as np
|
17 |
+
import cv2
|
18 |
+
import time
|
19 |
+
import re
|
20 |
+
import os
|
21 |
+
import glob
|
22 |
+
|
23 |
+
def update_image(image_url):
|
24 |
+
try:
|
25 |
+
headers = {"User-Agent": "Mozilla/5.0"}
|
26 |
+
response = requests.get(image_url, headers=headers, timeout=10)
|
27 |
+
response.raise_for_status()
|
28 |
+
content_type = response.headers.get("Content-Type", "")
|
29 |
+
if "image" not in content_type:
|
30 |
+
gr.Error(f"⚠️ URL does not point to a valid image.", duration=5)
|
31 |
+
return "Error: URL does not point to a valid image."
|
32 |
+
|
33 |
+
img = PIL.Image.open(io.BytesIO(response.content))
|
34 |
+
img = img.convert("RGB")
|
35 |
+
return img, Modal(visible=False)
|
36 |
+
except Exception as e:
|
37 |
+
# print(f"Error: {str(e)}")
|
38 |
+
if image_url is None or image_url == "":
|
39 |
+
return gr.Image(label="Image", elem_id="image_inp"), Modal(visible=False)
|
40 |
+
else:
|
41 |
+
return gr.Image(label="Image", value=None, elem_id="image_inp"), Modal(visible=True)
|
42 |
+
|
43 |
+
|
44 |
+
def update_timestamp():
|
45 |
+
return gr.Textbox(datetime.datetime.now().timestamp(), label="Timestamp", visible=False) # FIXME visible=False)
|
46 |
+
|
47 |
+
|
48 |
+
def clear_data():
|
49 |
+
return (None, None, None, None, None, gr.update(value=None),
|
50 |
+
gr.update(value=[]), gr.update(value=[]), gr.update(value=[]),
|
51 |
+
gr.update(value=[]), gr.update(value=[]))
|
52 |
+
|
53 |
+
|
54 |
+
def exit():
|
55 |
+
return (None, None, None, gr.Dataset(samples=[]), gr.Markdown("**Loading your data, please wait ...**"),
|
56 |
+
gr.update(value=None), gr.update(value=None), [None, None, "", ""], gr.update(value=None),
|
57 |
+
gr.update(value=None), gr.update(value=None),
|
58 |
+
gr.update(value=None), gr.update(value=None), gr.update(value=None),
|
59 |
+
gr.update(value=None), gr.update(value=None))
|
60 |
+
|
61 |
+
|
62 |
+
def validate_inputs(image, ori_img): # is_blurred
|
63 |
+
# Perform your validation logic here
|
64 |
+
if image is None:
|
65 |
+
return gr.Button("Submit", variant="primary", interactive=False), None, None, False
|
66 |
+
|
67 |
+
# Define maximum dimensions
|
68 |
+
MAX_WIDTH = 1024
|
69 |
+
MAX_HEIGHT = 1024
|
70 |
+
|
71 |
+
# Get current dimensions
|
72 |
+
height, width = image.shape[:2]
|
73 |
+
|
74 |
+
# # Check if resizing is needed
|
75 |
+
# NOTE: for now, let's keep the full image resolution
|
76 |
+
# if width > MAX_WIDTH or height > MAX_HEIGHT:
|
77 |
+
# # Calculate scaling factor
|
78 |
+
# scale = min(MAX_WIDTH/width, MAX_HEIGHT/height)
|
79 |
+
|
80 |
+
# # Calculate new dimensions
|
81 |
+
# new_width = int(width * scale)
|
82 |
+
# new_height = int(height * scale)
|
83 |
+
|
84 |
+
# # Resize image while maintaining aspect ratio
|
85 |
+
# result_image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)
|
86 |
+
# else:
|
87 |
+
# result_image = image
|
88 |
+
result_image = image
|
89 |
+
if ori_img is None:
|
90 |
+
# If the original image is None, set it to the resized image
|
91 |
+
ori_img = gr.State(result_image.copy())
|
92 |
+
|
93 |
+
return gr.Button("Submit", variant="primary", interactive=True), result_image, ori_img # is_blurred
|
94 |
+
|
95 |
+
|
96 |
+
def add_prefix(example, column_name, prefix):
|
97 |
+
example[column_name] = (f"{prefix}/" + example[column_name])
|
98 |
+
return example
|
99 |
+
|
100 |
+
def update_user_data(username, password, country, language_choice, HF_DATASET_NAME, local_ds_directory_path):
|
101 |
+
|
102 |
+
datasets_list = []
|
103 |
+
# Try loading local dataset
|
104 |
+
try:
|
105 |
+
snapshot_download(
|
106 |
+
repo_id=HF_DATASET_NAME,
|
107 |
+
repo_type="dataset",
|
108 |
+
local_dir=local_ds_directory_path, # Your target local directory
|
109 |
+
allow_patterns=f"{country}/{language_choice}/{username}/*", # f"**/{username}/*"
|
110 |
+
token=HF_API_TOKEN
|
111 |
+
)
|
112 |
+
except Exception as e:
|
113 |
+
print(f"Snapshot download error: {e}")
|
114 |
+
# import pdb; pdb.set_trace()
|
115 |
+
if has_user_json(username, country, language_choice, local_ds_directory_path):
|
116 |
+
try:
|
117 |
+
# ds_local = load_dataset(local_ds_directory_path, data_files=f'logged_in_users/**/{username}/**/*.json') # This does not filter by country and language
|
118 |
+
ds_local = load_dataset(local_ds_directory_path, data_files=f'logged_in_users/{country}/{language_choice}/{username}/**/*.json')
|
119 |
+
ds_local = ds_local.remove_columns("image_file")
|
120 |
+
ds_local = ds_local.rename_column("image", "image_file")
|
121 |
+
ds_local = ds_local.map(add_prefix, fn_kwargs={"column_name": "image_file", "prefix": local_ds_directory_path})
|
122 |
+
ds_local = ds_local.cast_column("image_file", Image())
|
123 |
+
|
124 |
+
datasets_list.append(list(ds_local.values())[0])
|
125 |
+
except Exception as e:
|
126 |
+
print(f"Local dataset load error: {e}")
|
127 |
+
|
128 |
+
# # Try loading hub dataset
|
129 |
+
# try:
|
130 |
+
# ds_hub = load_dataset(HF_DATASET_NAME, data_files=f'**/{username}/**/*.json', token=HF_API_TOKEN)
|
131 |
+
# ds_hub = ds_hub.cast_column("image_file", Image())
|
132 |
+
# datasets_list.append(list(ds_hub.values())[0])
|
133 |
+
# except Exception as e:
|
134 |
+
# print(f"Hub dataset load error: {e}")
|
135 |
+
|
136 |
+
# Handle all empty
|
137 |
+
if not datasets_list:
|
138 |
+
return gr.Dataset(samples=[]), gr.Markdown("<p style='color: red;'>No data available for this user. Please upload an image.</p>")
|
139 |
+
|
140 |
+
dataset = concatenate_datasets(datasets_list)
|
141 |
+
# TODO: we should link username with password and language and country, otherwise there will be an error when loading with different language and clicking on the example
|
142 |
+
if username and password:
|
143 |
+
user_dataset = dataset.filter(lambda x: x['username'] == username and is_password_correct(x['password'], password))
|
144 |
+
user_dataset = user_dataset.sort('timestamp', reverse=True)
|
145 |
+
# Show only unique entries (most recent)
|
146 |
+
user_ids = set()
|
147 |
+
samples = []
|
148 |
+
for d in user_dataset:
|
149 |
+
if d['id'] in user_ids:
|
150 |
+
continue
|
151 |
+
user_ids.add(d['id'])
|
152 |
+
if d['excluded']:
|
153 |
+
continue
|
154 |
+
# Get additional concepts by category or empty dict if not present
|
155 |
+
# additional_concepts_by_category = {
|
156 |
+
# "category1": d.get("category_1_concepts", []),
|
157 |
+
# "category2": d.get("category_2_concepts", []),
|
158 |
+
# "category3": d.get("category_3_concepts", []),
|
159 |
+
# "category4": d.get("category_4_concepts", []),
|
160 |
+
# "category5": d.get("category_5_concepts", [])
|
161 |
+
# }
|
162 |
+
additional_concepts_by_category = [
|
163 |
+
d.get("category_1_concepts", [""]),
|
164 |
+
d.get("category_2_concepts", [""]),
|
165 |
+
d.get("category_3_concepts", [""]),
|
166 |
+
d.get("category_4_concepts", [""]),
|
167 |
+
d.get("category_5_concepts", [""])
|
168 |
+
]
|
169 |
+
samples.append(
|
170 |
+
[
|
171 |
+
d['image_file'], d['image_url'], d['caption'] or "", d['country'],
|
172 |
+
d['language'], d['category'], d['concept'], additional_concepts_by_category, d['id']] # d['is_blurred']
|
173 |
+
)
|
174 |
+
return gr.Dataset(samples=samples), None
|
175 |
+
else:
|
176 |
+
# TODO: should we show the entire dataset instead? What about "other data" tab?
|
177 |
+
return gr.Dataset(samples=[]), None
|
178 |
+
|
179 |
+
|
180 |
+
def update_language(country, language, email, password, metadata_dict, concepts_dict):
|
181 |
+
# my_translator = GoogleTranslator(source='english', target=metadata_dict[country][language])
|
182 |
+
categories = concepts_dict[country][lang2eng_mapping.get(language, language)]
|
183 |
+
if language in words_mapping:
|
184 |
+
categories_keys_translated = [words_mapping[language].get(cat, cat) for cat in categories.keys()]
|
185 |
+
else:
|
186 |
+
categories_keys_translated = list(categories.keys())
|
187 |
+
|
188 |
+
# Get the 5 categories in alphabetical order
|
189 |
+
categories_list = sorted(list(categories.keys()))[:5]
|
190 |
+
|
191 |
+
# Create translated labels for the 5 categories
|
192 |
+
translated_categories = []
|
193 |
+
for cat in categories_list:
|
194 |
+
if language in words_mapping:
|
195 |
+
translated_cat = words_mapping[language].get(cat, cat)
|
196 |
+
else:
|
197 |
+
translated_cat = cat
|
198 |
+
translated_categories.append(translated_cat)
|
199 |
+
|
200 |
+
fn = metadata_dict[country][language]["Task"]
|
201 |
+
if os.path.exists(fn):
|
202 |
+
with open(fn, "r", encoding="utf-8") as f:
|
203 |
+
TASK_TEXT = f.read()
|
204 |
+
else:
|
205 |
+
fn = metadata_dict["USA"]["English"]["Task"]
|
206 |
+
with open(fn, "r", encoding="utf-8") as f:
|
207 |
+
TASK_TEXT = f.read()
|
208 |
+
|
209 |
+
fn = metadata_dict[country][language]["Instructions"]
|
210 |
+
if os.path.exists(fn):
|
211 |
+
with open(metadata_dict[country][language]["Instructions"], "r", encoding="utf-8") as f:
|
212 |
+
INST_TEXT = f.read()
|
213 |
+
else:
|
214 |
+
fn = metadata_dict["USA"]["English"]["Instructions"]
|
215 |
+
with open(fn, "r", encoding="utf-8") as f:
|
216 |
+
INST_TEXT = f.read()
|
217 |
+
|
218 |
+
return (
|
219 |
+
gr.update(label=metadata_dict[country][language]["Country"], value=country),
|
220 |
+
gr.update(label=metadata_dict[country][language]["Language"], value=language),
|
221 |
+
gr.update(label=metadata_dict[country][language]["Email"], value=email),
|
222 |
+
gr.update(label=metadata_dict[country][language]["Password"], value=password),
|
223 |
+
gr.update(choices=categories_keys_translated, interactive=True, label=metadata_dict[country][language]["Category"], allow_custom_value=False, elem_id="category_btn"),
|
224 |
+
gr.update(choices=[], interactive=True, label=metadata_dict[country][language]["Concept"], allow_custom_value=True, elem_id="concept_btn"),
|
225 |
+
gr.update(label=metadata_dict[country][language]["Image"]),
|
226 |
+
gr.update(label=metadata_dict[country][language]["Image_URL"]),
|
227 |
+
gr.update(label=metadata_dict[country][language]["Description"]),
|
228 |
+
gr.Markdown(TASK_TEXT),
|
229 |
+
gr.Markdown(INST_TEXT),
|
230 |
+
gr.update(value=metadata_dict[country][language]["Instructs_btn"]),
|
231 |
+
gr.update(value=metadata_dict[country][language]["Clear_btn"]),
|
232 |
+
gr.update(value=metadata_dict[country][language]["Submit_btn"]),
|
233 |
+
gr.Markdown(metadata_dict[country][language]["Saving_text"]),
|
234 |
+
gr.Markdown(metadata_dict[country][language]["Saved_text"]),
|
235 |
+
gr.update(label=metadata_dict[country][language]["Timestamp"]),
|
236 |
+
gr.update(value=metadata_dict[country][language]["Exit_btn"]),
|
237 |
+
gr.Markdown(metadata_dict[country][language]["Browse_text"]),
|
238 |
+
gr.Markdown(metadata_dict[country][language]["Loading_msg"]),
|
239 |
+
# gr.update(choices=categories_keys_translated, interactive=True, label=metadata_dict[country][language].get("Add_Category","Additional Categories (Optional)"), allow_custom_value=False, elem_id="additional_category_btn"),
|
240 |
+
# gr.update(choices=[], interactive=True, label=metadata_dict[country][language].get("Add_Concept","Additional Concepts (Optional)"), allow_custom_value=True, elem_id="additional_concept_btn"),
|
241 |
+
gr.update(value=metadata_dict[country][language].get("Hide_all_btn","👤 Hide All Faces")),
|
242 |
+
gr.update(value=metadata_dict[country][language].get("Hide_btn","👤 Hide Specific Faces")),
|
243 |
+
gr.update(value=metadata_dict[country][language].get("Unhide_btn","👀 Unhide Faces")),
|
244 |
+
gr.update(value=metadata_dict[country][language].get("Exclude_btn","Exclude Selected Example")),
|
245 |
+
gr.update(label=translated_categories[0], choices=sorted(concepts_dict[country][lang2eng_mapping.get(language, language)][categories_list[0]])),
|
246 |
+
gr.update(label=translated_categories[1], choices=sorted(concepts_dict[country][lang2eng_mapping.get(language, language)][categories_list[1]])),
|
247 |
+
gr.update(label=translated_categories[2], choices=sorted(concepts_dict[country][lang2eng_mapping.get(language, language)][categories_list[2]])),
|
248 |
+
gr.update(label=translated_categories[3], choices=sorted(concepts_dict[country][lang2eng_mapping.get(language, language)][categories_list[3]])),
|
249 |
+
gr.update(label=translated_categories[4], choices=sorted(concepts_dict[country][lang2eng_mapping.get(language, language)][categories_list[4]])),
|
250 |
+
)
|
251 |
+
|
252 |
+
|
253 |
+
def update_intro_language(selected_country, selected_language, intro_markdown, metadata):
|
254 |
+
if selected_language is None:
|
255 |
+
return intro_markdown
|
256 |
+
|
257 |
+
fn = metadata[selected_country][selected_language]["Intro"]
|
258 |
+
if not os.path.exists(fn):
|
259 |
+
return intro_markdown
|
260 |
+
|
261 |
+
with open(metadata[selected_country][selected_language]["Intro"], "r", encoding="utf-8") as f:
|
262 |
+
INTRO_TEXT = f.read()
|
263 |
+
return gr.Markdown(INTRO_TEXT)
|
264 |
+
|
265 |
+
|
266 |
+
def handle_click_example(user_examples, concepts_dict):
|
267 |
+
print("handle_click_example")
|
268 |
+
print(user_examples)
|
269 |
+
ex = [item for item in user_examples]
|
270 |
+
# print(ex)
|
271 |
+
image_inp = ex[0]
|
272 |
+
image_url_inp = ex[1]
|
273 |
+
long_caption_inp = ex[2]
|
274 |
+
country_btn = ex[3]
|
275 |
+
language_btn = ex[4]
|
276 |
+
category_btn = ex[5]
|
277 |
+
concept_btn = ex[6]
|
278 |
+
additional_concepts_by_category = ex[7]
|
279 |
+
exampleid_btn = ex[8]
|
280 |
+
additional_concepts_by_category = [[] if (len(cat_concept)==1 and cat_concept[0]=='') else cat_concept for cat_concept in additional_concepts_by_category]
|
281 |
+
|
282 |
+
# import pdb; pdb.set_trace()
|
283 |
+
# # excluded_btn = ex[10] # TODO: add functionality that if True "exclude" button changes to "excluded"
|
284 |
+
# # is_blurred = ex[11]
|
285 |
+
# # Get predefined categories in the correct order
|
286 |
+
# predefined_categories = sorted(list(concepts_dict[country_btn][lang2eng_mapping.get(language_btn, language_btn)].keys()))[:5]
|
287 |
+
|
288 |
+
# # Create dropdown values for each category
|
289 |
+
# dropdown_values = []
|
290 |
+
# for category in predefined_categories:
|
291 |
+
# if additional_concepts_by_category and category in additional_concepts_by_category:
|
292 |
+
# dropdown_values.append(additional_concepts_by_category[category])
|
293 |
+
# else:
|
294 |
+
# dropdown_values.append(None)
|
295 |
+
|
296 |
+
### TODO: fix additional concepts not saving if categories in other language than English
|
297 |
+
# # Get the English version of the language
|
298 |
+
# eng_lang = lang2eng_mapping.get(language_btn, language_btn)
|
299 |
+
|
300 |
+
# # Get predefined categories in the correct order
|
301 |
+
# predefined_categories = sorted(list(concepts_dict[country_btn][eng_lang].keys()))[:5]
|
302 |
+
|
303 |
+
# # Create dropdown values for each category
|
304 |
+
# dropdown_values = []
|
305 |
+
# for category in predefined_categories:
|
306 |
+
# if additional_concepts_by_category and category in additional_concepts_by_category:
|
307 |
+
# dropdown_values.append(additional_concepts_by_category[category])
|
308 |
+
# else:
|
309 |
+
# dropdown_values.append(None)
|
310 |
+
|
311 |
+
# Need to return values for each category dropdown
|
312 |
+
return [image_inp, image_url_inp, long_caption_inp, exampleid_btn, category_btn, concept_btn] + additional_concepts_by_category #, is_blurred
|
313 |
+
|
314 |
+
|
315 |
+
def is_password_correct(hashed_password, entered_password):
|
316 |
+
is_valid = bcrypt.checkpw(entered_password.encode(), hashed_password.encode())
|
317 |
+
# print("password_check: ", entered_password," ", hashed_password," ", is_valid)
|
318 |
+
return is_valid
|
319 |
+
|
320 |
+
|
321 |
+
## Face blurring functions
|
322 |
+
|
323 |
+
def detect_faces(image):
|
324 |
+
"""
|
325 |
+
Detect faces in an image using RetinaFace.
|
326 |
+
|
327 |
+
Args:
|
328 |
+
image (numpy.ndarray): Input image in BGR
|
329 |
+
|
330 |
+
"""
|
331 |
+
# Start timer
|
332 |
+
start_time = time.time()
|
333 |
+
|
334 |
+
# Detect faces using RetinaFace
|
335 |
+
detection_start = time.time()
|
336 |
+
faces = RetinaFace.detect_faces(image, threshold=0.8)
|
337 |
+
detection_time = time.time() - detection_start
|
338 |
+
|
339 |
+
return faces, detection_time
|
340 |
+
|
341 |
+
# Hide Faces Button
|
342 |
+
def select_faces_to_hide(image, blur_faces_ids):
|
343 |
+
if image is None:
|
344 |
+
return None, Modal(visible=False), Modal(visible=False), None , "", None, gr.update(value=[])
|
345 |
+
else:
|
346 |
+
# Detect faces
|
347 |
+
# import pdb; pdb.set_trace()
|
348 |
+
face_images = image.copy()
|
349 |
+
faces, detection_time = detect_faces(face_images)
|
350 |
+
print(f"Detection time: {detection_time:.2f} seconds")
|
351 |
+
# pdb.set_trace()
|
352 |
+
# Draw detections with IDs
|
353 |
+
for face_id, face_data in enumerate(faces.values(), start=1):
|
354 |
+
# Get face coordinates
|
355 |
+
facial_area = face_data['facial_area']
|
356 |
+
x1, y1, x2, y2 = facial_area
|
357 |
+
|
358 |
+
# Draw rectangle around face
|
359 |
+
cv2.rectangle(face_images, (x1, y1), (x2, y2), (0, 0, 255), 2)
|
360 |
+
|
361 |
+
# Add ID text
|
362 |
+
cv2.putText(face_images, f"ID: {face_id}", (x1, y1 - 10),
|
363 |
+
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
|
364 |
+
# Update face count
|
365 |
+
face_count = len(faces)
|
366 |
+
blur_faces_ids = gr.update(choices=[f"Face ID: {i}" for i in range(1, face_count + 1)])
|
367 |
+
current_faces_info = gr.State(faces)
|
368 |
+
if face_count == 0:
|
369 |
+
return image, Modal(visible=False), Modal(visible=True), None, "", None, gr.update(value=[])
|
370 |
+
else:
|
371 |
+
return image, Modal(visible=True), Modal(visible=False), face_images, str(face_count), current_faces_info, blur_faces_ids #
|
372 |
+
|
373 |
+
def blur_selected_faces(image, blur_faces_ids, faces_info, face_img, faces_count): # is_blurred
|
374 |
+
if not blur_faces_ids:
|
375 |
+
return image, Modal(visible=True), face_img, faces_count, blur_faces_ids # is_blurred
|
376 |
+
|
377 |
+
faces = faces_info.value
|
378 |
+
parsed_faces_ids = blur_faces_ids
|
379 |
+
parsed_faces_ids = [f"face_{val.split(':')[-1].strip()}" for val in parsed_faces_ids]
|
380 |
+
|
381 |
+
# Base blur amount and bounds
|
382 |
+
MIN_BLUR = 31 # Minimum blur amount (must be odd)
|
383 |
+
MAX_BLUR = 131 # Maximum blur amount (must be odd)
|
384 |
+
|
385 |
+
blurring_start = time.time()
|
386 |
+
# Process each face
|
387 |
+
face_count = 0
|
388 |
+
if faces and isinstance(faces, dict):
|
389 |
+
|
390 |
+
# blur by id
|
391 |
+
for face_key in parsed_faces_ids:
|
392 |
+
face_count += 1
|
393 |
+
try:
|
394 |
+
face_data = faces[face_key]
|
395 |
+
except KeyError:
|
396 |
+
gr.Warning(f"⚠️ Face ID {face_key.split('_')[-1]} not found in detected faces.", duration=5)
|
397 |
+
return image, Modal(visible=True), face_img, faces_count, blur_faces_ids # is_blurred
|
398 |
+
|
399 |
+
# Get bounding box coordinates
|
400 |
+
x1, y1, x2, y2 = face_data['facial_area']
|
401 |
+
|
402 |
+
# Calculate face region size
|
403 |
+
face_width = x2 - x1
|
404 |
+
face_height = y2 - y1
|
405 |
+
face_size = max(face_width, face_height)
|
406 |
+
|
407 |
+
# Calculate adaptive blur amount based on face size
|
408 |
+
# Scale blur amount between MIN_BLUR and MAX_BLUR based on face size
|
409 |
+
# Using image width as reference for scaling
|
410 |
+
img_width = image.shape[1]
|
411 |
+
blur_amount = int(MIN_BLUR + (MAX_BLUR - MIN_BLUR) * (face_size / img_width))
|
412 |
+
|
413 |
+
# Ensure blur amount is odd
|
414 |
+
blur_amount = blur_amount if blur_amount % 2 == 1 else blur_amount + 1
|
415 |
+
# Ensure within bounds
|
416 |
+
blur_amount = max(MIN_BLUR, min(MAX_BLUR, blur_amount))
|
417 |
+
|
418 |
+
# Ensure the coordinates are within the image boundaries
|
419 |
+
ih, iw = image.shape[:2]
|
420 |
+
x1, y1 = max(0, x1), max(0, y1)
|
421 |
+
x2, y2 = min(iw, x2), min(ih, y2)
|
422 |
+
|
423 |
+
# Extract face region
|
424 |
+
face_region = image[y1:y2, x1:x2]
|
425 |
+
|
426 |
+
# Apply blur
|
427 |
+
blurred_face = cv2.GaussianBlur(face_region, (blur_amount, blur_amount), 0)
|
428 |
+
|
429 |
+
# Replace face region with blurred version
|
430 |
+
image[y1:y2, x1:x2] = blurred_face
|
431 |
+
|
432 |
+
blurring_time = time.time() - blurring_start
|
433 |
+
# Print timing information
|
434 |
+
print(f"Face blurring performance metrics:")
|
435 |
+
print(f"Face blurring time: {blurring_time:.4f} seconds")
|
436 |
+
|
437 |
+
if face_count == 0:
|
438 |
+
return image, Modal(visible=True), face_img, faces_count, blur_faces_ids, False
|
439 |
+
else:
|
440 |
+
return image, Modal(visible=False), None, None, gr.update(value=[]), True
|
441 |
+
|
442 |
+
def blur_all_faces(image):
|
443 |
+
if image is None:
|
444 |
+
return None, Modal(visible=False), False
|
445 |
+
else:
|
446 |
+
# Base blur amount and bounds
|
447 |
+
MIN_BLUR = 31 # Minimum blur amount (must be odd)
|
448 |
+
MAX_BLUR = 131 # Maximum blur amount (must be odd)
|
449 |
+
|
450 |
+
# Start timer
|
451 |
+
start_time = time.time()
|
452 |
+
|
453 |
+
# Detect faces using RetinaFace
|
454 |
+
detection_start = time.time()
|
455 |
+
faces = RetinaFace.detect_faces(image)
|
456 |
+
detection_time = time.time() - detection_start
|
457 |
+
|
458 |
+
# Create a copy of the image
|
459 |
+
output_image = image.copy()
|
460 |
+
|
461 |
+
face_count = 0
|
462 |
+
blurring_start = time.time()
|
463 |
+
|
464 |
+
# Process each face
|
465 |
+
if faces and isinstance(faces, dict):
|
466 |
+
for face_key in faces:
|
467 |
+
face_count += 1
|
468 |
+
face_data = faces[face_key]
|
469 |
+
|
470 |
+
# Get bounding box coordinates
|
471 |
+
x1, y1, x2, y2 = face_data['facial_area']
|
472 |
+
|
473 |
+
# Calculate face region size
|
474 |
+
face_width = x2 - x1
|
475 |
+
face_height = y2 - y1
|
476 |
+
face_size = max(face_width, face_height)
|
477 |
+
|
478 |
+
# Calculate adaptive blur amount based on face size
|
479 |
+
# Scale blur amount between MIN_BLUR and MAX_BLUR based on face size
|
480 |
+
# Using image width as reference for scaling
|
481 |
+
img_width = image.shape[1]
|
482 |
+
blur_amount = int(MIN_BLUR + (MAX_BLUR - MIN_BLUR) * (face_size / img_width))
|
483 |
+
|
484 |
+
# Ensure blur amount is odd
|
485 |
+
blur_amount = blur_amount if blur_amount % 2 == 1 else blur_amount + 1
|
486 |
+
# Ensure within bounds
|
487 |
+
blur_amount = max(MIN_BLUR, min(MAX_BLUR, blur_amount))
|
488 |
+
|
489 |
+
# Ensure the coordinates are within the image boundaries
|
490 |
+
ih, iw = image.shape[:2]
|
491 |
+
x1, y1 = max(0, x1), max(0, y1)
|
492 |
+
x2, y2 = min(iw, x2), min(ih, y2)
|
493 |
+
|
494 |
+
# Extract face region
|
495 |
+
face_region = output_image[y1:y2, x1:x2]
|
496 |
+
|
497 |
+
# Apply blur
|
498 |
+
blurred_face = cv2.GaussianBlur(face_region, (blur_amount, blur_amount), 0)
|
499 |
+
|
500 |
+
# Replace face region with blurred version
|
501 |
+
output_image[y1:y2, x1:x2] = blurred_face
|
502 |
+
|
503 |
+
blurring_time = time.time() - blurring_start
|
504 |
+
total_time = time.time() - start_time
|
505 |
+
# Print timing information
|
506 |
+
print(f"Face blurring performance metrics:")
|
507 |
+
print(f"Total faces detected: {face_count}")
|
508 |
+
print(f"Face detection time: {detection_time:.4f} seconds")
|
509 |
+
print(f"Face blurring time: {blurring_time:.4f} seconds")
|
510 |
+
print(f"Total processing time: {total_time:.4f} seconds")
|
511 |
+
print(f"Average time per face: {(total_time/max(1, face_count)):.4f} seconds")
|
512 |
+
|
513 |
+
if face_count == 0:
|
514 |
+
return image, Modal(visible=True), False
|
515 |
+
else:
|
516 |
+
return output_image, Modal(visible=False), True
|
517 |
+
|
518 |
+
def unhide_faces(img, ori_img): # is_blurred
|
519 |
+
if img is None:
|
520 |
+
return None, False
|
521 |
+
elif np.array_equal(img, ori_img.value):
|
522 |
+
return img # is_blurred
|
523 |
+
else:
|
524 |
+
return ori_img.value, False
|
525 |
+
|
526 |
+
def check_exclude_fn(image):
|
527 |
+
if image is None:
|
528 |
+
gr.Warning("⚠️ No image to exclude.")
|
529 |
+
return gr.update(visible=False)
|
530 |
+
else:
|
531 |
+
return gr.update(visible=True)
|
532 |
+
|
533 |
+
def has_user_json(username, country,language_choice, local_ds_directory_path):
|
534 |
+
"""Check if JSON files exist for username pattern."""
|
535 |
+
return bool(glob.glob(os.path.join(local_ds_directory_path, "logged_in_users", country, language_choice, username, "**", "*.json"), recursive=True))
|
ui/__pycache__/layout.cpython-310.pyc
ADDED
Binary file (7.66 kB). View file
|
|
ui/__pycache__/layout.cpython-313.pyc
ADDED
Binary file (12.4 kB). View file
|
|
ui/__pycache__/main_page.cpython-310.pyc
ADDED
Binary file (5.96 kB). View file
|
|
ui/__pycache__/selection_page.cpython-310.pyc
ADDED
Binary file (2 kB). View file
|
|
ui/layout.py
ADDED
@@ -0,0 +1,373 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
|
3 |
+
from logic.data_utils import CustomHFDatasetSaver
|
4 |
+
from data.lang2eng_map import lang2eng_mapping
|
5 |
+
from gradio_modal import Modal
|
6 |
+
from logic.handlers import *
|
7 |
+
from config.settings import *
|
8 |
+
from functools import partial
|
9 |
+
|
10 |
+
from .selection_page import build_selection_page
|
11 |
+
from .main_page import build_main_page
|
12 |
+
|
13 |
+
def switch_ui(country, language, username, password, flag=False, metadata_dict=None):
|
14 |
+
print(f"Language: {language}, Country: {country}")
|
15 |
+
|
16 |
+
# Hide the selection page and show the main UI.
|
17 |
+
if flag:
|
18 |
+
local_storage = [None, None, "", ""]
|
19 |
+
return (local_storage, gr.update(visible=flag), gr.update(visible=not flag),
|
20 |
+
gr.update(visible=not flag),
|
21 |
+
gr.update(choices=list(metadata_dict.keys()), label="Country", value=None),
|
22 |
+
gr.update(value=None, choices=[], label="Language", allow_custom_value=False, interactive=False))
|
23 |
+
|
24 |
+
else:
|
25 |
+
local_storage = [country, language, username, password]
|
26 |
+
return local_storage, gr.update(visible=flag), gr.update(visible=not flag), gr.update(visible=not flag)
|
27 |
+
|
28 |
+
def build_ui(concepts_dict, metadata_dict, HF_API_TOKEN, HF_DATASET_NAME):
|
29 |
+
hf_writer = CustomHFDatasetSaver(HF_API_TOKEN, HF_DATASET_NAME, private=True)
|
30 |
+
custom_css = """
|
31 |
+
.compact-container {
|
32 |
+
max-width: 600px;
|
33 |
+
margin: auto;
|
34 |
+
padding: 20px;
|
35 |
+
}
|
36 |
+
.compact-btn {
|
37 |
+
}
|
38 |
+
"""
|
39 |
+
with gr.Blocks(css=custom_css) as ui:
|
40 |
+
local_storage = gr.BrowserState([None, None, "", ""])
|
41 |
+
# First page: selection
|
42 |
+
|
43 |
+
selection_page, country_choice, language_choice, proceed_btn, username, password, intro_markdown = build_selection_page(metadata_dict)
|
44 |
+
|
45 |
+
# Second page
|
46 |
+
cmp_main_ui = build_main_page(concepts_dict, metadata_dict, local_storage)
|
47 |
+
|
48 |
+
main_ui_placeholder = cmp_main_ui["main_ui_placeholder"]
|
49 |
+
country_inp = cmp_main_ui["country_inp"]
|
50 |
+
language_inp = cmp_main_ui["language_inp"]
|
51 |
+
image_inp = cmp_main_ui["image_inp"]
|
52 |
+
image_url_inp = cmp_main_ui["image_url_inp"]
|
53 |
+
long_caption_inp = cmp_main_ui["long_caption_inp"]
|
54 |
+
category_btn = cmp_main_ui["category_btn"]
|
55 |
+
concept_btn = cmp_main_ui["concept_btn"]
|
56 |
+
category_concept_dropdowns = cmp_main_ui["category_concept_dropdowns"]
|
57 |
+
instruct_btn = cmp_main_ui["instruct_btn"]
|
58 |
+
clear_btn = cmp_main_ui["clear_btn"]
|
59 |
+
hide_faces_btn = cmp_main_ui["hide_faces_btn"]
|
60 |
+
hide_all_faces_btn = cmp_main_ui["hide_all_faces_btn"]
|
61 |
+
unhide_faces_btn = cmp_main_ui["unhide_faces_btn"]
|
62 |
+
submit_btn = cmp_main_ui["submit_btn"]
|
63 |
+
timestamp_btn = cmp_main_ui["timestamp_btn"]
|
64 |
+
exampleid_btn = cmp_main_ui["exampleid_btn"]
|
65 |
+
username_inp = cmp_main_ui["username_inp"]
|
66 |
+
password_inp = cmp_main_ui["password_inp"]
|
67 |
+
modal_saving = cmp_main_ui["modal_saving"]
|
68 |
+
modal_data_saved = cmp_main_ui["modal_data_saved"]
|
69 |
+
modal = cmp_main_ui["modal"]
|
70 |
+
exit_btn = cmp_main_ui["exit_btn"]
|
71 |
+
intro_text_inp = cmp_main_ui["intro_text_inp"] # Note intro_text is actually the "Task" text from metadata
|
72 |
+
intro_text_inst_inp = cmp_main_ui["intro_text_inst_inp"] # This is the "Instructions" text from metadata
|
73 |
+
modal_saving_text = cmp_main_ui["modal_saving_text"]
|
74 |
+
modal_data_saved_text = cmp_main_ui["modal_data_saved_text"]
|
75 |
+
exclude_btn = cmp_main_ui["exclude_btn"]
|
76 |
+
modal_exclude_confirm = cmp_main_ui["modal_exclude_confirm"]
|
77 |
+
cancel_exclude_btn = cmp_main_ui["cancel_exclude_btn"]
|
78 |
+
confirm_exclude_btn = cmp_main_ui["confirm_exclude_btn"]
|
79 |
+
|
80 |
+
# is_blurred = gr.State(False) # Initialize as False
|
81 |
+
|
82 |
+
# Notification image is false
|
83 |
+
with Modal(visible=False) as modal_img_url:
|
84 |
+
gr.Markdown("The image URL is not valid. Please provide a valid image URL.")
|
85 |
+
# gr.Warning(f"⚠️ The image URL is not valid. Please provide a valid image URL.")
|
86 |
+
|
87 |
+
# Event listeners
|
88 |
+
gr.on(
|
89 |
+
triggers=[image_url_inp.change],
|
90 |
+
fn=update_image,
|
91 |
+
inputs=[image_url_inp],
|
92 |
+
outputs=[image_inp, modal_img_url]
|
93 |
+
)
|
94 |
+
gr.on(
|
95 |
+
triggers=[language_choice.change],
|
96 |
+
fn=partial(update_intro_language, metadata=metadata_dict),
|
97 |
+
inputs=[country_choice, language_choice, intro_markdown],
|
98 |
+
outputs=[intro_markdown]
|
99 |
+
)
|
100 |
+
|
101 |
+
gr.on(
|
102 |
+
triggers=[image_inp.change, long_caption_inp.change],
|
103 |
+
fn=update_timestamp,
|
104 |
+
outputs=[timestamp_btn]
|
105 |
+
)
|
106 |
+
ori_img = gr.State(None)
|
107 |
+
gr.on(
|
108 |
+
triggers=[image_inp.change],
|
109 |
+
fn=validate_inputs,
|
110 |
+
inputs=[image_inp, ori_img], # is_blurred
|
111 |
+
outputs=[submit_btn, image_inp, ori_img], # is_blurred
|
112 |
+
)
|
113 |
+
|
114 |
+
# Clear Button
|
115 |
+
clear_btn.click(
|
116 |
+
fn=clear_data,
|
117 |
+
outputs=[
|
118 |
+
image_inp, image_url_inp, long_caption_inp, exampleid_btn,
|
119 |
+
category_btn, concept_btn,
|
120 |
+
category_concept_dropdowns[0], category_concept_dropdowns[1], category_concept_dropdowns[2],
|
121 |
+
category_concept_dropdowns[3], category_concept_dropdowns[4]
|
122 |
+
],
|
123 |
+
)
|
124 |
+
|
125 |
+
#============= Face Blurring ============= #
|
126 |
+
with Modal(visible=False) as modal_faces:
|
127 |
+
with gr.Column():
|
128 |
+
face_img = gr.Image(label="Image Faces", elem_id="image_faces", format="png", height=512, width=768)
|
129 |
+
with gr.Row():
|
130 |
+
faces_count = gr.Textbox(label="Face Counts", elem_id="face_counts", interactive=False)
|
131 |
+
blur_faces_ids = gr.Dropdown(
|
132 |
+
[], value=[], multiselect=True, label="Please select the faces IDs you want to blur.", elem_id="blur_faces_ids")
|
133 |
+
# blur_faces_ids = gr.Textbox(label="Specify faces ids to blur by comma", elem_id="blur_faces_ids", interactive=True)
|
134 |
+
submit_btn_face = gr.Button("Submit", variant="primary", interactive=True, elem_id="submit_btn_face")
|
135 |
+
|
136 |
+
with Modal(visible=False) as modal_faces_2:
|
137 |
+
gr.Markdown("The current image does not have any faces to hide.")
|
138 |
+
|
139 |
+
faces_info = gr.State(None)
|
140 |
+
hide_faces_btn.click(
|
141 |
+
fn=select_faces_to_hide,
|
142 |
+
inputs=[image_inp, blur_faces_ids],
|
143 |
+
outputs=[image_inp, modal_faces, modal_faces_2, face_img, faces_count, faces_info, blur_faces_ids]
|
144 |
+
)
|
145 |
+
|
146 |
+
submit_btn_face.click(
|
147 |
+
fn=blur_selected_faces,
|
148 |
+
inputs=[image_inp, blur_faces_ids, faces_info, face_img, faces_count], # is_blurred
|
149 |
+
outputs=[image_inp, modal_faces, face_img, faces_count, blur_faces_ids] # is_blurred
|
150 |
+
)
|
151 |
+
|
152 |
+
hide_all_faces_btn.click(
|
153 |
+
fn=blur_all_faces,
|
154 |
+
inputs=[image_inp],
|
155 |
+
outputs=[image_inp, modal_faces_2] # is_blurred
|
156 |
+
)
|
157 |
+
|
158 |
+
unhide_faces_btn.click(
|
159 |
+
fn=unhide_faces,
|
160 |
+
inputs=[image_inp, ori_img], # is_blurred
|
161 |
+
outputs=[image_inp] # is_blurred
|
162 |
+
)
|
163 |
+
|
164 |
+
# ===============================
|
165 |
+
with gr.Column(visible=False, elem_id="browse_data") as browse_data_placeholder:
|
166 |
+
# Browse Data
|
167 |
+
browse_data_text = gr.Markdown("## Browse Data")
|
168 |
+
|
169 |
+
loading_msg = gr.Markdown("**Loading your data, please wait ...**")
|
170 |
+
for contrib_type in ["Your data", "Other data"]:
|
171 |
+
with gr.Tab(contrib_type):
|
172 |
+
if contrib_type == "Your data":
|
173 |
+
# Show user's past data points
|
174 |
+
user_examples = gr.Dataset(
|
175 |
+
samples=[],
|
176 |
+
components=['image','textbox','textbox','textbox','textbox',
|
177 |
+
'textbox','textbox','textbox', 'textbox'],
|
178 |
+
headers=['Image', 'Image URL (Optional, if not uploading an image)', 'Description', 'Country', 'Language',
|
179 |
+
'Category', 'Concept', 'Additional Concepts', 'ID'],
|
180 |
+
)
|
181 |
+
# Handle clicking on an example
|
182 |
+
user_examples.click(
|
183 |
+
fn=partial(handle_click_example, concepts_dict=concepts_dict),
|
184 |
+
inputs=[user_examples],
|
185 |
+
outputs=[
|
186 |
+
image_inp, image_url_inp, long_caption_inp, exampleid_btn,
|
187 |
+
category_btn, concept_btn,
|
188 |
+
category_concept_dropdowns[0], category_concept_dropdowns[1], category_concept_dropdowns[2],
|
189 |
+
category_concept_dropdowns[3], category_concept_dropdowns[4]
|
190 |
+
],
|
191 |
+
)
|
192 |
+
|
193 |
+
elif contrib_type == "Other data":
|
194 |
+
# Show others' images
|
195 |
+
pass
|
196 |
+
|
197 |
+
# ============================================ #
|
198 |
+
# Submit Button Click events
|
199 |
+
|
200 |
+
proceed_btn.click(
|
201 |
+
fn=partial(update_language, metadata_dict=metadata_dict, concepts_dict=concepts_dict),
|
202 |
+
inputs=[country_choice, language_choice, username, password],
|
203 |
+
outputs=[
|
204 |
+
country_inp, language_inp, username_inp, password_inp, category_btn, concept_btn, image_inp,
|
205 |
+
image_url_inp, long_caption_inp, intro_text_inp, intro_text_inst_inp, instruct_btn, clear_btn,
|
206 |
+
submit_btn, modal_saving_text, modal_data_saved_text, timestamp_btn, exit_btn, browse_data_text,
|
207 |
+
loading_msg, hide_all_faces_btn, hide_faces_btn, unhide_faces_btn, exclude_btn,
|
208 |
+
category_concept_dropdowns[0], category_concept_dropdowns[1], category_concept_dropdowns[2],
|
209 |
+
category_concept_dropdowns[3], category_concept_dropdowns[4]
|
210 |
+
]
|
211 |
+
).then(
|
212 |
+
fn=partial(switch_ui, flag=False),
|
213 |
+
inputs=[country_choice, language_choice, username, password],
|
214 |
+
outputs=[local_storage, selection_page, main_ui_placeholder, browse_data_placeholder],
|
215 |
+
).then(
|
216 |
+
fn=partial(update_user_data, HF_DATASET_NAME=HF_DATASET_NAME, local_ds_directory_path = LOCAL_DS_DIRECTORY_PATH),
|
217 |
+
inputs=[username_inp, password_inp, country_choice, language_choice],
|
218 |
+
outputs=[user_examples, loading_msg],
|
219 |
+
)
|
220 |
+
|
221 |
+
|
222 |
+
# Exit Button
|
223 |
+
exit_btn.click(
|
224 |
+
fn=exit,
|
225 |
+
outputs=[
|
226 |
+
image_inp, image_url_inp, long_caption_inp, user_examples, loading_msg,
|
227 |
+
username, password, local_storage, exampleid_btn, category_btn, concept_btn,
|
228 |
+
category_concept_dropdowns[0], category_concept_dropdowns[1], category_concept_dropdowns[2],
|
229 |
+
category_concept_dropdowns[3], category_concept_dropdowns[4]
|
230 |
+
],
|
231 |
+
).then(
|
232 |
+
fn=partial(switch_ui, flag=True, metadata_dict=metadata_dict),
|
233 |
+
inputs=[country_choice, language_choice, username, password],
|
234 |
+
outputs=[local_storage, selection_page, main_ui_placeholder, browse_data_placeholder, country_choice, language_choice],
|
235 |
+
)
|
236 |
+
|
237 |
+
# Disable button while saving
|
238 |
+
# Note: I think this is not longer needed as we clear all the inputs and disable the submit button if the data is saved correctly
|
239 |
+
# def disable_submit():
|
240 |
+
# return gr.update(interactive=False)
|
241 |
+
|
242 |
+
# def enable_submit():
|
243 |
+
# return gr.update(interactive=True)
|
244 |
+
|
245 |
+
# STEP 1: show modal
|
246 |
+
# submit_btn.click(lambda: Modal(visible=True), None, modal_saving)
|
247 |
+
|
248 |
+
# STEP 2: disable button
|
249 |
+
# submit_btn.click(disable_submit, None, [submit_btn], queue=False)
|
250 |
+
|
251 |
+
#STEP 3: perform save_data
|
252 |
+
data_outputs = {
|
253 |
+
"image": image_inp,
|
254 |
+
"image_url": image_url_inp,
|
255 |
+
"caption": long_caption_inp,
|
256 |
+
"country": country_inp,
|
257 |
+
"language": language_inp,
|
258 |
+
"category": category_btn,
|
259 |
+
"concept": concept_btn,
|
260 |
+
"category_1_concepts": category_concept_dropdowns[0],
|
261 |
+
"category_2_concepts": category_concept_dropdowns[1],
|
262 |
+
"category_3_concepts": category_concept_dropdowns[2],
|
263 |
+
"category_4_concepts": category_concept_dropdowns[3],
|
264 |
+
"category_5_concepts": category_concept_dropdowns[4],
|
265 |
+
"timestamp": timestamp_btn,
|
266 |
+
"username": username_inp,
|
267 |
+
"password": password_inp,
|
268 |
+
"id": exampleid_btn,
|
269 |
+
"excluded": gr.State(value=False),
|
270 |
+
"concepts_dict": gr.State(value=concepts_dict),
|
271 |
+
"country_lang_map": gr.State(value=lang2eng_mapping),
|
272 |
+
# "is_blurred": is_blurred
|
273 |
+
}
|
274 |
+
# data_outputs = [image_inp, image_url_inp, long_caption_inp,
|
275 |
+
# country_inp, language_inp, category_btn, concept_btn,
|
276 |
+
# timestamp_btn, username_inp, password_inp, exampleid_btn]
|
277 |
+
hf_writer.setup(list(data_outputs.keys()), local_ds_folder = LOCAL_DS_DIRECTORY_PATH)
|
278 |
+
|
279 |
+
# STEP 4: Chain save_data, then update_user_data, then re-enable button, hide modal, and clear
|
280 |
+
submit_btn.click(
|
281 |
+
hf_writer.save,
|
282 |
+
list(data_outputs.values()),
|
283 |
+
None,
|
284 |
+
).success(
|
285 |
+
fn=clear_data,
|
286 |
+
outputs=[
|
287 |
+
image_inp, image_url_inp, long_caption_inp, exampleid_btn,
|
288 |
+
category_btn, concept_btn,
|
289 |
+
category_concept_dropdowns[0], category_concept_dropdowns[1], category_concept_dropdowns[2],
|
290 |
+
category_concept_dropdowns[3], category_concept_dropdowns[4]
|
291 |
+
],
|
292 |
+
# ).success(enable_submit,
|
293 |
+
# None, [submit_btn]
|
294 |
+
# ).success(lambda: Modal(visible=False),
|
295 |
+
# None, modal_saving
|
296 |
+
# ).success(lambda: Modal(visible=True),
|
297 |
+
# None, modal_data_saved
|
298 |
+
).success(
|
299 |
+
# set loading msg
|
300 |
+
lambda: gr.update(value="**Loading your data, please wait ...**"),
|
301 |
+
None, loading_msg
|
302 |
+
).success(
|
303 |
+
fn=partial(update_user_data, HF_DATASET_NAME=HF_DATASET_NAME, local_ds_directory_path = LOCAL_DS_DIRECTORY_PATH),
|
304 |
+
inputs=[username_inp, password_inp, country_choice, language_choice],
|
305 |
+
outputs=[user_examples, loading_msg]
|
306 |
+
)
|
307 |
+
|
308 |
+
# ============================================ #
|
309 |
+
# instructions button
|
310 |
+
instruct_btn.click(lambda: Modal(visible=True), None, modal)
|
311 |
+
# ============================================ #
|
312 |
+
|
313 |
+
# Load saved values from local storage
|
314 |
+
@ui.load(inputs=[local_storage], outputs=[country_choice, language_choice, username, password])
|
315 |
+
def load_from_local_storage(saved_values):
|
316 |
+
print("loading from local storage", saved_values)
|
317 |
+
return saved_values[0], saved_values[1], saved_values[2], saved_values[3]
|
318 |
+
|
319 |
+
# ============================================= #
|
320 |
+
# Exclude button
|
321 |
+
# ============================================= #
|
322 |
+
|
323 |
+
exclude_status = gr.Markdown(visible=False)
|
324 |
+
|
325 |
+
# Show confirmation modal when exclude button is clicked
|
326 |
+
exclude_btn.click(
|
327 |
+
fn=check_exclude_fn,
|
328 |
+
inputs=[image_inp],
|
329 |
+
outputs=[modal_exclude_confirm]
|
330 |
+
)
|
331 |
+
|
332 |
+
# Close modal when cancel button is clicked
|
333 |
+
cancel_exclude_btn.click(
|
334 |
+
fn=lambda: gr.update(visible=False),
|
335 |
+
outputs=[modal_exclude_confirm]
|
336 |
+
)
|
337 |
+
|
338 |
+
# Handle confirm exclusion
|
339 |
+
confirm_exclude_btn.click(
|
340 |
+
fn=lambda: gr.update(visible=False),
|
341 |
+
outputs=[modal_exclude_confirm]
|
342 |
+
).success(
|
343 |
+
fn=hf_writer.save,
|
344 |
+
inputs=[
|
345 |
+
image_inp, image_url_inp, long_caption_inp, country_inp, language_inp,
|
346 |
+
category_btn, concept_btn,
|
347 |
+
category_concept_dropdowns[0], category_concept_dropdowns[1], category_concept_dropdowns[2],
|
348 |
+
category_concept_dropdowns[3], category_concept_dropdowns[4],
|
349 |
+
timestamp_btn, username_inp, password_inp, exampleid_btn, gr.State(value=True),
|
350 |
+
gr.State(value=concepts_dict), gr.State(value=lang2eng_mapping)
|
351 |
+
],
|
352 |
+
outputs=None
|
353 |
+
).success(
|
354 |
+
fn=clear_data,
|
355 |
+
outputs=[
|
356 |
+
image_inp, image_url_inp, long_caption_inp, exampleid_btn,
|
357 |
+
category_btn, concept_btn,
|
358 |
+
category_concept_dropdowns[0], category_concept_dropdowns[1], category_concept_dropdowns[2],
|
359 |
+
category_concept_dropdowns[3], category_concept_dropdowns[4]
|
360 |
+
]
|
361 |
+
).success(
|
362 |
+
fn=lambda: gr.update(value="Example excluded successfully", visible=True),
|
363 |
+
outputs=exclude_status
|
364 |
+
).success(
|
365 |
+
fn=lambda: gr.update(value="**Refreshing your data, please wait...**"),
|
366 |
+
outputs=loading_msg
|
367 |
+
).success(
|
368 |
+
fn=partial(update_user_data, HF_DATASET_NAME=HF_DATASET_NAME, local_ds_directory_path=LOCAL_DS_DIRECTORY_PATH),
|
369 |
+
inputs=[username_inp, password_inp, country_choice, language_choice],
|
370 |
+
outputs=[user_examples, loading_msg]
|
371 |
+
)
|
372 |
+
|
373 |
+
return ui
|
ui/main_page.py
ADDED
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from functools import partial
|
3 |
+
from gradio_modal import Modal
|
4 |
+
from data.lang2eng_map import lang2eng_mapping
|
5 |
+
from data.words_map import words_mapping
|
6 |
+
import datetime
|
7 |
+
|
8 |
+
|
9 |
+
def get_key_by_value(dictionary, value):
|
10 |
+
for key, val in dictionary.items():
|
11 |
+
if val == value:
|
12 |
+
return key
|
13 |
+
return None
|
14 |
+
|
15 |
+
|
16 |
+
def load_concepts(category, concepts, local_storage):
|
17 |
+
country, lang, _, _ = local_storage.value
|
18 |
+
if category:
|
19 |
+
if lang in words_mapping:
|
20 |
+
category = get_key_by_value(words_mapping[lang], category) # translate back the category name
|
21 |
+
return gr.update(choices=sorted(concepts[country][lang2eng_mapping.get(lang, lang)][category])) # value=[]
|
22 |
+
else:
|
23 |
+
return gr.update(choices=[], value=[])
|
24 |
+
|
25 |
+
|
26 |
+
def build_main_page(concepts_dict, metadata_dict, local_storage):
|
27 |
+
try:
|
28 |
+
country, lang, _, _ = local_storage.value
|
29 |
+
except (TypeError, ValueError):
|
30 |
+
country, lang = "USA", "English"
|
31 |
+
|
32 |
+
with gr.Column(visible=False, elem_id="main_page") as main_ui_placeholder:
|
33 |
+
# Read the markdown file
|
34 |
+
with open(metadata_dict["USA"]["English"]["Task"], "r", encoding="utf-8") as f:
|
35 |
+
TASK_TEXT = f.read()
|
36 |
+
|
37 |
+
with open(metadata_dict["USA"]["English"]["Instructions"], "r", encoding="utf-8") as f:
|
38 |
+
INST_TEXT = f.read()
|
39 |
+
|
40 |
+
intro_text_inp = gr.Markdown(TASK_TEXT)
|
41 |
+
|
42 |
+
# gr.Markdown("## Data Collection")
|
43 |
+
with gr.Row(equal_height=True):
|
44 |
+
country_inp = gr.Textbox(label="Country", elem_id="country_inp", interactive=False)
|
45 |
+
language_inp = gr.Textbox(label="Language", elem_id="language_inp", interactive=False)
|
46 |
+
username_inp = gr.Textbox(label="email (optional)", type="email", elem_id="username_inp", interactive=False)
|
47 |
+
password_inp = gr.Textbox(label="password (optional)", type="password", elem_id="password_inp", interactive=False)
|
48 |
+
exit_btn = gr.Button("⬅️ Change Language", elem_id="exit_btn", elem_classes=["compact-btn"])
|
49 |
+
|
50 |
+
with gr.Row(equal_height=True, ):
|
51 |
+
with gr.Column():
|
52 |
+
# Main category and concept row - SINGLE SELECTION
|
53 |
+
with gr.Row():
|
54 |
+
categories = concepts_dict["USA"]["English"]
|
55 |
+
category_btn = gr.Dropdown(choices=categories.keys(), interactive=True, label="Main Category",
|
56 |
+
allow_custom_value=False, elem_id="category_btn", multiselect=False, value=None)
|
57 |
+
concept_btn = gr.Dropdown(choices=[], interactive=True, label="Main Concept",
|
58 |
+
allow_custom_value=True, elem_id="concept_btn", multiselect=False)
|
59 |
+
|
60 |
+
category_btn.change(
|
61 |
+
fn=partial(load_concepts, concepts=concepts_dict, local_storage=local_storage),
|
62 |
+
inputs=category_btn,
|
63 |
+
outputs=[concept_btn]
|
64 |
+
)
|
65 |
+
|
66 |
+
image_inp = gr.Image(label="Image", elem_id="image_inp", format="png", height=512, width=768)
|
67 |
+
with gr.Row():
|
68 |
+
hide_all_faces_btn = gr.Button("👤 Hide All Faces", elem_id="hide_all_faces_btn")
|
69 |
+
hide_faces_btn = gr.Button("👤 Hide Specific Faces", elem_id="hide_faces_btn")
|
70 |
+
unhide_faces_btn = gr.Button("👀 Unhide Faces", elem_id="unhide_faces_btn")
|
71 |
+
image_url_inp = gr.Textbox(label="Image URL (Optional, if not uploading an image)", type="text", elem_id="image_url_inp")
|
72 |
+
|
73 |
+
with gr.Column():
|
74 |
+
# short_caption_inp = gr.Textbox(lines=2, label="Short Description", elem_id="short_caption_inp")
|
75 |
+
long_caption_inp = gr.Textbox(lines=6, label="Description", elem_id="long_caption_inp")
|
76 |
+
|
77 |
+
categories_list = sorted(list(concepts_dict["USA"]["English"].keys()))[:5]
|
78 |
+
|
79 |
+
def create_category_dropdown(category, index):
|
80 |
+
original_category = category
|
81 |
+
|
82 |
+
if lang in words_mapping:
|
83 |
+
display_category = words_mapping[lang].get(original_category, original_category)
|
84 |
+
else:
|
85 |
+
display_category = original_category
|
86 |
+
|
87 |
+
category_choices = concepts_dict[country][lang2eng_mapping.get(lang, lang)][original_category]
|
88 |
+
sorted_choices = sorted(category_choices)
|
89 |
+
|
90 |
+
dropdown = gr.Dropdown(
|
91 |
+
choices=sorted_choices,
|
92 |
+
interactive=True,
|
93 |
+
label=display_category,
|
94 |
+
allow_custom_value=True,
|
95 |
+
elem_id=f"category_{index+1}_concepts_btn",
|
96 |
+
multiselect=True,
|
97 |
+
value=None
|
98 |
+
)
|
99 |
+
return dropdown
|
100 |
+
|
101 |
+
category_concept_dropdowns = []
|
102 |
+
|
103 |
+
# First row - categories 1 and 2
|
104 |
+
with gr.Row():
|
105 |
+
dropdown1 = create_category_dropdown(categories_list[0], 0)
|
106 |
+
category_concept_dropdowns.append(dropdown1)
|
107 |
+
|
108 |
+
dropdown2 = create_category_dropdown(categories_list[1], 1)
|
109 |
+
category_concept_dropdowns.append(dropdown2)
|
110 |
+
|
111 |
+
# Second row - categories 3 and 4
|
112 |
+
# with gr.Row():
|
113 |
+
dropdown3 = create_category_dropdown(categories_list[2], 2)
|
114 |
+
category_concept_dropdowns.append(dropdown3)
|
115 |
+
|
116 |
+
dropdown4 = create_category_dropdown(categories_list[3], 3)
|
117 |
+
category_concept_dropdowns.append(dropdown4)
|
118 |
+
|
119 |
+
dropdown5 = create_category_dropdown(categories_list[4], 4)
|
120 |
+
category_concept_dropdowns.append(dropdown5)
|
121 |
+
|
122 |
+
# Third row - category 5 and instructions button
|
123 |
+
with gr.Row(equal_height=True):
|
124 |
+
# dropdown5 = create_category_dropdown(categories_list[4], 4)
|
125 |
+
# category_concept_dropdowns.append(dropdown5)
|
126 |
+
|
127 |
+
instruct_btn = gr.Button("📘 Show Instructions")
|
128 |
+
with Modal(visible=False) as modal:
|
129 |
+
intro_text_inst_inp = gr.Markdown(INST_TEXT)
|
130 |
+
|
131 |
+
with gr.Column():
|
132 |
+
# with gr.Row():
|
133 |
+
# instruct_btn = gr.Button("📘 Show Instructions")
|
134 |
+
# with Modal(visible=False) as modal:
|
135 |
+
# intro_text_inst_inp = gr.Markdown(INST_TEXT)
|
136 |
+
with gr.Row(equal_height=True):
|
137 |
+
clear_btn = gr.Button("Clear", variant="huggingface", elem_id="clear_btn")
|
138 |
+
with Modal(visible=False, allow_user_close=False) as modal_saving:
|
139 |
+
modal_saving_text = gr.Markdown("⏳ Please wait while your submission is being saved.")
|
140 |
+
with Modal(visible=False) as modal_data_saved:
|
141 |
+
modal_data_saved_text = gr.Markdown("Your data has been saved successfully. The data in the table below will be updated shortly. You can now close this window.")
|
142 |
+
submit_btn = gr.Button("Submit", variant="primary", interactive=False, elem_id="submit_btn")
|
143 |
+
with Modal(visible=False) as modal_exclude_confirm:
|
144 |
+
gr.Markdown("## Are you sure you want to exclude this example?")
|
145 |
+
gr.Markdown("This action will permanently delete the example.")
|
146 |
+
with gr.Row():
|
147 |
+
cancel_exclude_btn = gr.Button("Cancel")
|
148 |
+
confirm_exclude_btn = gr.Button("Yes, delete", variant="stop")
|
149 |
+
exclude_btn = gr.Button("Exclude Selected Example", variant="stop", visible=True)
|
150 |
+
with gr.Column():
|
151 |
+
timestamp_btn = gr.Textbox(datetime.datetime.now(), label="Timestamp", visible=False, elem_id="timestamp_btn", interactive=False) # FIXME visible=False)
|
152 |
+
exampleid_btn = gr.Textbox(label="ID", visible=False, elem_id="example_id", interactive=False) # FIXME visible=False)
|
153 |
+
|
154 |
+
output_dict = {
|
155 |
+
"main_ui_placeholder": main_ui_placeholder,
|
156 |
+
"country_inp": country_inp,
|
157 |
+
"language_inp": language_inp,
|
158 |
+
"username_inp": username_inp,
|
159 |
+
"password_inp": password_inp,
|
160 |
+
"image_inp": image_inp,
|
161 |
+
"image_url_inp": image_url_inp,
|
162 |
+
"long_caption_inp": long_caption_inp,
|
163 |
+
"category_btn": category_btn,
|
164 |
+
"concept_btn": concept_btn,
|
165 |
+
"category_concept_dropdowns": category_concept_dropdowns,
|
166 |
+
"category_1_concepts": category_concept_dropdowns[0],
|
167 |
+
"category_2_concepts": category_concept_dropdowns[1],
|
168 |
+
"category_3_concepts": category_concept_dropdowns[2],
|
169 |
+
"category_4_concepts": category_concept_dropdowns[3],
|
170 |
+
"category_5_concepts": category_concept_dropdowns[4],
|
171 |
+
"instruct_btn": instruct_btn,
|
172 |
+
"clear_btn": clear_btn,
|
173 |
+
"submit_btn": submit_btn,
|
174 |
+
"modal": modal,
|
175 |
+
"modal_saving": modal_saving,
|
176 |
+
"modal_data_saved": modal_data_saved,
|
177 |
+
"timestamp_btn": timestamp_btn,
|
178 |
+
"exampleid_btn": exampleid_btn,
|
179 |
+
"exit_btn": exit_btn,
|
180 |
+
"intro_text_inp": intro_text_inp,
|
181 |
+
"intro_text_inst_inp": intro_text_inst_inp,
|
182 |
+
"modal_saving_text": modal_saving_text,
|
183 |
+
"modal_data_saved_text": modal_data_saved_text,
|
184 |
+
"hide_faces_btn": hide_faces_btn,
|
185 |
+
"hide_all_faces_btn": hide_all_faces_btn,
|
186 |
+
"unhide_faces_btn": unhide_faces_btn,
|
187 |
+
"exclude_btn": exclude_btn,
|
188 |
+
"modal_exclude_confirm": modal_exclude_confirm,
|
189 |
+
"cancel_exclude_btn": cancel_exclude_btn,
|
190 |
+
"confirm_exclude_btn": confirm_exclude_btn,
|
191 |
+
}
|
192 |
+
return output_dict
|
ui/selection_page.py
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os.path
|
2 |
+
import gradio as gr
|
3 |
+
from functools import partial
|
4 |
+
|
5 |
+
def update_language_options(selected_country, metadata):
|
6 |
+
with open(metadata["USA"]["English"]["Intro"], "r", encoding="utf-8") as f:
|
7 |
+
INTRO_TEXT = f.read() # default
|
8 |
+
# Retrieve the list of languages available for the selected country.
|
9 |
+
if selected_country in metadata:
|
10 |
+
languages = list(metadata[selected_country].keys())
|
11 |
+
if len(languages) == 0:
|
12 |
+
gr.Warning("No languages available for the selected country.")
|
13 |
+
return gr.Dropdown(choices=[], interactive=False, value=None), gr.Markdown(INTRO_TEXT)
|
14 |
+
# select the first language as default
|
15 |
+
fn = metadata[selected_country][languages[0]]["Intro"]
|
16 |
+
if os.path.exists(fn):
|
17 |
+
with open(fn, "r", encoding="utf-8") as f:
|
18 |
+
INTRO_TEXT = f.read()
|
19 |
+
# Use gr.Dropdown.update to change the choices of the language dropdown.
|
20 |
+
return gr.Dropdown(choices=languages, interactive=True, value=None, allow_custom_value=False), gr.Markdown(INTRO_TEXT)
|
21 |
+
else:
|
22 |
+
return gr.Dropdown(choices=[], interactive=False, value=None, allow_custom_value=False), gr.Markdown(INTRO_TEXT)
|
23 |
+
|
24 |
+
def build_selection_page(metadata_dict):
|
25 |
+
with gr.Column(visible=True, elem_classes=["compact-container"]) as selection_page:
|
26 |
+
with gr.Row():
|
27 |
+
with open(metadata_dict["USA"]["English"]["Intro"], "r", encoding="utf-8") as f:
|
28 |
+
INTRO_TEXT = f.read()
|
29 |
+
intro_markdown = gr.Markdown(INTRO_TEXT)
|
30 |
+
|
31 |
+
gr.Markdown("## Please select your country")
|
32 |
+
|
33 |
+
country_choice = gr.Dropdown(
|
34 |
+
choices=list(metadata_dict.keys()), label="Country", allow_custom_value=False
|
35 |
+
)
|
36 |
+
|
37 |
+
language_choice = gr.Dropdown(
|
38 |
+
choices=[],
|
39 |
+
label="Language",
|
40 |
+
allow_custom_value=False,
|
41 |
+
interactive=False # Initially disabled.
|
42 |
+
)
|
43 |
+
|
44 |
+
# When the country selection changes, update the language dropdown.
|
45 |
+
country_choice.change(
|
46 |
+
fn=partial(update_language_options, metadata=metadata_dict),
|
47 |
+
inputs=country_choice,
|
48 |
+
outputs=[language_choice, intro_markdown]
|
49 |
+
)
|
50 |
+
with gr.Row():
|
51 |
+
username = gr.Textbox(label="Email (optional)", type="email", elem_id="username_text")
|
52 |
+
password = gr.Textbox(label="Password (optional)", type="password", elem_id="password_text")
|
53 |
+
|
54 |
+
proceed_btn = gr.Button("Proceed")
|
55 |
+
|
56 |
+
return selection_page, country_choice, language_choice, proceed_btn, username, password, intro_markdown
|