Spaces:
Sleeping
Sleeping
Jon Solow
commited on
Commit
·
03fc4f2
1
Parent(s):
fe1c3a3
Add django app
Browse files- Dockerfile +1 -1
- src/grubguesser/__init__.py +0 -0
- src/grubguesser/asgi.py +16 -0
- src/grubguesser/forms.py +11 -0
- src/grubguesser/settings.py +135 -0
- src/grubguesser/templates/base.html +136 -0
- src/grubguesser/templates/index.html +14 -0
- src/grubguesser/templates/request.html +55 -0
- src/grubguesser/urls.py +21 -0
- src/grubguesser/views.py +73 -0
- src/grubguesser/wsgi.py +16 -0
- src/labels.txt +101 -0
- src/manage.py +22 -0
- src/model_client.py +92 -0
- src/requirements.in +7 -5
- src/requirements.txt +42 -144
- src/sample_list.txt +1000 -0
- src/sample_loader.py +15 -0
Dockerfile
CHANGED
@@ -24,4 +24,4 @@ WORKDIR /opt/src
|
|
24 |
|
25 |
|
26 |
FROM copy-src as production
|
27 |
-
CMD ["python3", "-m", "
|
|
|
24 |
|
25 |
|
26 |
FROM copy-src as production
|
27 |
+
CMD ["python3", "-m", "gunicorn", "grubguesser.wsgi", "--reload", "--workers=1, "--host", "0.0.0.0", "--port", "7860"]
|
src/grubguesser/__init__.py
ADDED
File without changes
|
src/grubguesser/asgi.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
ASGI config for grubguesser project.
|
3 |
+
|
4 |
+
It exposes the ASGI callable as a module-level variable named ``application``.
|
5 |
+
|
6 |
+
For more information on this file, see
|
7 |
+
https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/
|
8 |
+
"""
|
9 |
+
|
10 |
+
import os
|
11 |
+
|
12 |
+
from django.core.asgi import get_asgi_application
|
13 |
+
|
14 |
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grubguesser.settings")
|
15 |
+
|
16 |
+
application = get_asgi_application()
|
src/grubguesser/forms.py
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from django import forms
|
2 |
+
|
3 |
+
|
4 |
+
class URLInputForm(forms.Form):
|
5 |
+
post = forms.URLField(label="Paste image url here:")
|
6 |
+
label = forms.CharField(label="Type of Food:", required=False)
|
7 |
+
|
8 |
+
|
9 |
+
class ImageUploadForm(forms.Form):
|
10 |
+
img = forms.ImageField(label="User uploaded image")
|
11 |
+
label = forms.CharField(label="Type of Food:", required=False)
|
src/grubguesser/settings.py
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
Django settings for grubguesser project.
|
3 |
+
|
4 |
+
Generated by 'django-admin startproject' using Django 4.0.3.
|
5 |
+
|
6 |
+
For more information on this file, see
|
7 |
+
https://docs.djangoproject.com/en/4.0/topics/settings/
|
8 |
+
|
9 |
+
For the full list of settings and their values, see
|
10 |
+
https://docs.djangoproject.com/en/4.0/ref/settings/
|
11 |
+
"""
|
12 |
+
|
13 |
+
import os
|
14 |
+
from pathlib import Path
|
15 |
+
|
16 |
+
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
17 |
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
18 |
+
|
19 |
+
|
20 |
+
# Quick-start development settings - unsuitable for production
|
21 |
+
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
|
22 |
+
|
23 |
+
# SECURITY WARNING: keep the secret key used in production secret!
|
24 |
+
SECRET_KEY = os.getenv("APP_PASSWORD")
|
25 |
+
|
26 |
+
# SECURITY WARNING: don't run with debug turned on in production!
|
27 |
+
DEBUG = os.getenv("DEBUG_MODE", "False").lower() == "true"
|
28 |
+
|
29 |
+
ALLOWED_HOSTS: list = []
|
30 |
+
|
31 |
+
app_name = os.getenv("HEROKU_APP_NAME")
|
32 |
+
if app_name:
|
33 |
+
ALLOWED_HOSTS.append(f"{app_name}.herokuapp.com")
|
34 |
+
|
35 |
+
|
36 |
+
# Application definition
|
37 |
+
|
38 |
+
INSTALLED_APPS = [
|
39 |
+
"django.contrib.admin",
|
40 |
+
"django.contrib.auth",
|
41 |
+
"django.contrib.contenttypes",
|
42 |
+
"django.contrib.sessions",
|
43 |
+
"django.contrib.messages",
|
44 |
+
"django.contrib.staticfiles",
|
45 |
+
"grubguesser",
|
46 |
+
]
|
47 |
+
|
48 |
+
MIDDLEWARE = [
|
49 |
+
"django.middleware.security.SecurityMiddleware",
|
50 |
+
"django.contrib.sessions.middleware.SessionMiddleware",
|
51 |
+
"django.middleware.common.CommonMiddleware",
|
52 |
+
"django.middleware.csrf.CsrfViewMiddleware",
|
53 |
+
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
54 |
+
"django.contrib.messages.middleware.MessageMiddleware",
|
55 |
+
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
56 |
+
"whitenoise.middleware.WhiteNoiseMiddleware",
|
57 |
+
]
|
58 |
+
|
59 |
+
ROOT_URLCONF = "grubguesser.urls"
|
60 |
+
|
61 |
+
TEMPLATES = [
|
62 |
+
{
|
63 |
+
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
64 |
+
"DIRS": [],
|
65 |
+
"APP_DIRS": True,
|
66 |
+
"OPTIONS": {
|
67 |
+
"context_processors": [
|
68 |
+
"django.template.context_processors.debug",
|
69 |
+
"django.template.context_processors.request",
|
70 |
+
"django.contrib.auth.context_processors.auth",
|
71 |
+
"django.contrib.messages.context_processors.messages",
|
72 |
+
],
|
73 |
+
},
|
74 |
+
},
|
75 |
+
]
|
76 |
+
|
77 |
+
WSGI_APPLICATION = "grubguesser.wsgi.application"
|
78 |
+
|
79 |
+
|
80 |
+
# Database
|
81 |
+
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
|
82 |
+
|
83 |
+
DATABASES: dict = {}
|
84 |
+
|
85 |
+
|
86 |
+
# Password validation
|
87 |
+
# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators
|
88 |
+
|
89 |
+
AUTH_PASSWORD_VALIDATORS = [
|
90 |
+
{
|
91 |
+
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", # noqa
|
92 |
+
},
|
93 |
+
{
|
94 |
+
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
|
95 |
+
},
|
96 |
+
{
|
97 |
+
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
|
98 |
+
},
|
99 |
+
{
|
100 |
+
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
|
101 |
+
},
|
102 |
+
]
|
103 |
+
|
104 |
+
|
105 |
+
# Internationalization
|
106 |
+
# https://docs.djangoproject.com/en/4.0/topics/i18n/
|
107 |
+
|
108 |
+
LANGUAGE_CODE = "en-us"
|
109 |
+
|
110 |
+
TIME_ZONE = "UTC"
|
111 |
+
|
112 |
+
USE_I18N = True
|
113 |
+
|
114 |
+
USE_TZ = True
|
115 |
+
|
116 |
+
|
117 |
+
# Static files (CSS, JavaScript, Images)
|
118 |
+
# https://docs.djangoproject.com/en/4.0/howto/static-files/
|
119 |
+
|
120 |
+
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
|
121 |
+
STATIC_URL = "/static/"
|
122 |
+
|
123 |
+
# Extra places for collectstatic to find static files.
|
124 |
+
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
|
125 |
+
|
126 |
+
# Default primary key field type
|
127 |
+
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
|
128 |
+
|
129 |
+
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
130 |
+
|
131 |
+
|
132 |
+
# Simplified static file serving.
|
133 |
+
# https://warehouse.python.org/project/whitenoise/
|
134 |
+
|
135 |
+
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
|
src/grubguesser/templates/base.html
ADDED
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{% load static %}
|
2 |
+
<!DOCTYPE html>
|
3 |
+
<html>
|
4 |
+
<head>
|
5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>Grub Guesser - Feed me Seymour!</title>
|
7 |
+
<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" />
|
8 |
+
<link rel="shortcut icon" href="{% static 'gg-favicon.png'%}">
|
9 |
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
10 |
+
<script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
|
11 |
+
<style type="text/css">
|
12 |
+
.jumbotron {
|
13 |
+
background: #cc6600;
|
14 |
+
color: white;
|
15 |
+
padding-bottom: 80px
|
16 |
+
}
|
17 |
+
.btn-primary {
|
18 |
+
background: #cc6600;
|
19 |
+
border-color: #cc6600
|
20 |
+
}
|
21 |
+
.btn-primary:hover {
|
22 |
+
background: hsl(30, 100%, 30%)
|
23 |
+
}
|
24 |
+
.jumbotron p {
|
25 |
+
color: #d9ccee;
|
26 |
+
max-width: 75%;
|
27 |
+
margin: 1em auto 2em
|
28 |
+
}
|
29 |
+
.navbar+.jumbotron {
|
30 |
+
margin-top: -20px
|
31 |
+
}
|
32 |
+
.jumbotron .gg-logo {
|
33 |
+
display: block;
|
34 |
+
background: #b01302;
|
35 |
+
border-radius: 50%;
|
36 |
+
overflow: hidden;
|
37 |
+
width: 100px;
|
38 |
+
height: 100px;
|
39 |
+
margin: auto;
|
40 |
+
border: 2px solid white
|
41 |
+
}
|
42 |
+
.jumbotron .gg-logo img {
|
43 |
+
max-width: 100%
|
44 |
+
}
|
45 |
+
.navbar-inverse {
|
46 |
+
background: #C13100;
|
47 |
+
color: #FFFBD0;
|
48 |
+
position: fixed;
|
49 |
+
top: 0;
|
50 |
+
width: 100%;
|
51 |
+
}
|
52 |
+
.navbar-nav {
|
53 |
+
background: #C13100;
|
54 |
+
color: #FFFBD0;
|
55 |
+
}
|
56 |
+
.navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:focus, .navbar-inverse .navbar-nav>.active>a:hover {
|
57 |
+
background: #C13100;
|
58 |
+
color: #FFFBD0
|
59 |
+
}
|
60 |
+
.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:focus, .navbar-inverse .navbar-nav>.open>a:hover {
|
61 |
+
background: #C13100;
|
62 |
+
color: #FFFBD0
|
63 |
+
}
|
64 |
+
.navbar-inverse .navbar-nav>li>a {
|
65 |
+
background: #C13100;
|
66 |
+
color: #FFFBD0
|
67 |
+
}
|
68 |
+
.dropdown-menu {
|
69 |
+
color:#000000;
|
70 |
+
}
|
71 |
+
.navbar-nav>li>form {
|
72 |
+
padding-top: 5px;
|
73 |
+
padding-bottom: 5px;
|
74 |
+
}
|
75 |
+
@media (min-width: 768px) {
|
76 |
+
.navbar-nav>li>form {
|
77 |
+
padding-top: 8px;
|
78 |
+
padding-bottom: 8px;
|
79 |
+
}
|
80 |
+
}
|
81 |
+
input {
|
82 |
+
margin:10px;
|
83 |
+
width: 375px
|
84 |
+
}
|
85 |
+
</style>
|
86 |
+
</head>
|
87 |
+
<body>
|
88 |
+
<nav class="navbar navbar-default navbar-static-top navbar-inverse">
|
89 |
+
<div class="container">
|
90 |
+
<ul class="nav navbar-nav">
|
91 |
+
<li class="active">
|
92 |
+
<a href="/"><span class="glyphicon glyphicon-home"></span> Home</a>
|
93 |
+
</li>
|
94 |
+
<li class="dropdown">
|
95 |
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="glyphicon glyphicon-info-sign"></span> Predict Image from URL <span class="caret"></span></a>
|
96 |
+
<ul class="dropdown-menu" role="menu" style="width:600px">
|
97 |
+
<li>
|
98 |
+
<form method="POST" style="margin:10px 20px">
|
99 |
+
{% csrf_token %}
|
100 |
+
{{ url_form.as_p }}
|
101 |
+
<button class="btn btn-primary" type="submit" name="action" value="SubmitURL"> Submit</button>
|
102 |
+
</form>
|
103 |
+
</li>
|
104 |
+
</ul>
|
105 |
+
</li>
|
106 |
+
<li class="dropdown">
|
107 |
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="glyphicon glyphicon-info-sign"></span> Upload an Image <span class="caret"></span></a>
|
108 |
+
<ul class="dropdown-menu" role="menu" style="width:600px">
|
109 |
+
<li>
|
110 |
+
<form enctype="multipart/form-data" method="POST" style="margin:10px 20px">
|
111 |
+
{% csrf_token %}
|
112 |
+
{{ image_form.as_p }}
|
113 |
+
<button class="btn btn-primary" type="submit" name="action" value="SubmitImage"> Submit</button>
|
114 |
+
</form>
|
115 |
+
</li>
|
116 |
+
</ul>
|
117 |
+
</li>
|
118 |
+
<li>
|
119 |
+
<form method="POST">
|
120 |
+
{% csrf_token %}
|
121 |
+
<button class="btn btn-primary" type="submit" name="action" value="LoadRandom" ><span class="glyphicon glyphicon-refresh"></span> Load Random Sample</button>
|
122 |
+
</form>
|
123 |
+
</li>
|
124 |
+
</ul>
|
125 |
+
<ul class="nav navbar-nav navbar-right">
|
126 |
+
<li class="navbar-right">
|
127 |
+
<a href="https://github.com/JonSolow/foodid"><span class="glyphicon glyphicon-book"></span>Model Source Github</a>
|
128 |
+
</li>
|
129 |
+
</ul>
|
130 |
+
</div>
|
131 |
+
</nav>
|
132 |
+
|
133 |
+
{% block content %}{% endblock %}
|
134 |
+
|
135 |
+
</body>
|
136 |
+
</html>
|
src/grubguesser/templates/index.html
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{% extends "base.html" %}
|
2 |
+
{% load static %}
|
3 |
+
|
4 |
+
{% block content %}
|
5 |
+
<br>
|
6 |
+
<div class="jumbotron text-center">
|
7 |
+
<div class="container">
|
8 |
+
<img class="img-responsive" src="{% static 'gg_logo_1.png'%}">
|
9 |
+
<h1>Welcome to Grub Guesser</h1>
|
10 |
+
<p>Grub Guesser is a model developed in Python using Keras and Tensorflow. <br> Try out a random sample image or paste a url to an image of your own!</p>
|
11 |
+
<a type="button" class="btn btn-lg btn-default" href="https://github.com/JonSolow/foodid"><span class="glyphicon glyphicon-download"></span> Model Source on GitHub</a>
|
12 |
+
</div>
|
13 |
+
</div>
|
14 |
+
{% endblock %}
|
src/grubguesser/templates/request.html
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{% extends "base.html" %}
|
2 |
+
{% load static %}
|
3 |
+
|
4 |
+
{% block content %}
|
5 |
+
<br>
|
6 |
+
<div class="jumbotron text-center">
|
7 |
+
<div class="container" style="margin-bottom:10px">
|
8 |
+
<img class="img-responsive" src="{% static 'gg_logo_1.png'%}" style="display:inline;">
|
9 |
+
<h1>Top 5 Model Guesses</h1>
|
10 |
+
</div>
|
11 |
+
<div class="container">
|
12 |
+
<div class="col-sm-8">
|
13 |
+
<img class="img-responsive center-block" src="{{img_src}}" style="height:440px">
|
14 |
+
<h2>Actual: {{actual_label}}</h2>
|
15 |
+
</div>
|
16 |
+
<div class="col-sm-4">
|
17 |
+
<table>
|
18 |
+
<tbody class="text-left" style="font-size: 2.5rem; font-weight: bold">
|
19 |
+
<tr style="height:80px">
|
20 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.0}}">  1. </td> -->
|
21 |
+
<td style="color: {{color_labels.0}}">1. {{top_guesses.0}}</td>
|
22 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.5}}">  6. </td>
|
23 |
+
<td style="color: {{color_labels.5}}">{{top_guesses.5}}</td> -->
|
24 |
+
</tr>
|
25 |
+
<tr style="height:80px">
|
26 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.1}}">  2. </td> -->
|
27 |
+
<td style="color: {{color_labels.1}}">2. {{top_guesses.1}}</td>
|
28 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.6}}">  7. </td>
|
29 |
+
<td style="color: {{color_labels.6}}">{{top_guesses.6}}</td> -->
|
30 |
+
</tr>
|
31 |
+
<tr style="height:80px">
|
32 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.2}}">  3. </td> -->
|
33 |
+
<td style="color: {{color_labels.2}}">3. {{top_guesses.2}}</td>
|
34 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.7}}">  8. </td>
|
35 |
+
<td style="color: {{color_labels.7}}">{{top_guesses.7}}</td> -->
|
36 |
+
</tr>
|
37 |
+
<tr style="height:80px">
|
38 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.3}}">  4. </td> -->
|
39 |
+
<td style="color: {{color_labels.3}}">4. {{top_guesses.3}}</td>
|
40 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.8}}">  9. </td>
|
41 |
+
<td style="color: {{color_labels.8}}">{{top_guesses.8}}</td> -->
|
42 |
+
</tr>
|
43 |
+
<tr style="height:80px">
|
44 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.4}}">  5. </td> -->
|
45 |
+
<td style="color: {{color_labels.4}}">5. {{top_guesses.4}}</td>
|
46 |
+
<!-- <td style="padding-right:10px; color: {{color_labels.9}}">10. </td>
|
47 |
+
<td style="color: {{color_labels.9}}">{{top_guesses.9}}</td> -->
|
48 |
+
</tr>
|
49 |
+
</tbody>
|
50 |
+
</table>
|
51 |
+
</div>
|
52 |
+
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
{% endblock %}
|
src/grubguesser/urls.py
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""grubguesser URL Configuration
|
2 |
+
|
3 |
+
The `urlpatterns` list routes URLs to views. For more information please see:
|
4 |
+
https://docs.djangoproject.com/en/4.0/topics/http/urls/
|
5 |
+
Examples:
|
6 |
+
Function views
|
7 |
+
1. Add an import: from my_app import views
|
8 |
+
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
9 |
+
Class-based views
|
10 |
+
1. Add an import: from other_app.views import Home
|
11 |
+
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
12 |
+
Including another URLconf
|
13 |
+
1. Import the include() function: from django.urls import include, path
|
14 |
+
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
15 |
+
"""
|
16 |
+
from django.urls import path
|
17 |
+
from grubguesser import views
|
18 |
+
|
19 |
+
urlpatterns = [
|
20 |
+
path("", views.HomeView.as_view(), name="index"),
|
21 |
+
]
|
src/grubguesser/views.py
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from django.shortcuts import render
|
2 |
+
from django.views.generic import TemplateView
|
3 |
+
from model_client import url_image_vars
|
4 |
+
from sample_loader import get_random_sample_image
|
5 |
+
from .forms import ImageUploadForm, URLInputForm
|
6 |
+
from base64 import b64encode
|
7 |
+
|
8 |
+
|
9 |
+
def get_default_form_context():
|
10 |
+
return {
|
11 |
+
"url_form": URLInputForm(),
|
12 |
+
"image_form": ImageUploadForm(),
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
class HomeView(TemplateView):
|
17 |
+
template_name = "index.html"
|
18 |
+
|
19 |
+
def render_for_img_url_label(self, request, img_url: str, label: str):
|
20 |
+
img_src = img_url
|
21 |
+
top_guesses, color_labels = url_image_vars(img_url, label)
|
22 |
+
context_dict = get_default_form_context()
|
23 |
+
context_dict.update(
|
24 |
+
{
|
25 |
+
"img_src": img_src,
|
26 |
+
"top_guesses": top_guesses,
|
27 |
+
"actual_label": label or "Unknown",
|
28 |
+
"color_labels": color_labels,
|
29 |
+
}
|
30 |
+
)
|
31 |
+
return render(request, "request.html", context_dict)
|
32 |
+
|
33 |
+
def render_for_img_file_label(self, request, img_file, label: str):
|
34 |
+
decoded_img = b64encode(img_file.read()).decode("utf-8")
|
35 |
+
img_src = f"data:{img_file.content_type};base64,{decoded_img}"
|
36 |
+
top_guesses, color_labels = url_image_vars(img_file, label)
|
37 |
+
context_dict = get_default_form_context()
|
38 |
+
context_dict.update(
|
39 |
+
{
|
40 |
+
"top_guesses": top_guesses,
|
41 |
+
"actual_label": label or "Unknown",
|
42 |
+
"color_labels": color_labels,
|
43 |
+
"img_src": img_src,
|
44 |
+
}
|
45 |
+
)
|
46 |
+
return render(request, "request.html", context_dict)
|
47 |
+
|
48 |
+
def get(self, request):
|
49 |
+
context_dict = get_default_form_context()
|
50 |
+
return render(request, self.template_name, context_dict)
|
51 |
+
|
52 |
+
def post(self, request):
|
53 |
+
action = request.POST["action"]
|
54 |
+
context_dict = get_default_form_context()
|
55 |
+
if action == "SubmitURL":
|
56 |
+
form = URLInputForm(request.POST)
|
57 |
+
if form.is_valid():
|
58 |
+
img_url = form.cleaned_data["post"]
|
59 |
+
label = form.cleaned_data["label"]
|
60 |
+
return self.render_for_img_url_label(request, img_url, label)
|
61 |
+
|
62 |
+
if action == "SubmitImage":
|
63 |
+
form = ImageUploadForm(request.POST, request.FILES)
|
64 |
+
assert form.is_valid()
|
65 |
+
if form.is_valid():
|
66 |
+
image_field = form.cleaned_data["img"]
|
67 |
+
label = form.cleaned_data["label"]
|
68 |
+
return self.render_for_img_file_label(request, image_field, label)
|
69 |
+
|
70 |
+
if action == "LoadRandom":
|
71 |
+
img_url, label = get_random_sample_image()
|
72 |
+
return self.render_for_img_url_label(request, img_url, label)
|
73 |
+
return render(request, self.template_name, context_dict)
|
src/grubguesser/wsgi.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
WSGI config for grubguesser project.
|
3 |
+
|
4 |
+
It exposes the WSGI callable as a module-level variable named ``application``.
|
5 |
+
|
6 |
+
For more information on this file, see
|
7 |
+
https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
|
8 |
+
"""
|
9 |
+
|
10 |
+
import os
|
11 |
+
|
12 |
+
from django.core.wsgi import get_wsgi_application
|
13 |
+
|
14 |
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grubguesser.settings")
|
15 |
+
|
16 |
+
application = get_wsgi_application()
|
src/labels.txt
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Apple pie
|
2 |
+
Baby back ribs
|
3 |
+
Baklava
|
4 |
+
Beef carpaccio
|
5 |
+
Beef tartare
|
6 |
+
Beet salad
|
7 |
+
Beignets
|
8 |
+
Bibimbap
|
9 |
+
Bread pudding
|
10 |
+
Breakfast burrito
|
11 |
+
Bruschetta
|
12 |
+
Caesar salad
|
13 |
+
Cannoli
|
14 |
+
Caprese salad
|
15 |
+
Carrot cake
|
16 |
+
Ceviche
|
17 |
+
Cheesecake
|
18 |
+
Cheese plate
|
19 |
+
Chicken curry
|
20 |
+
Chicken quesadilla
|
21 |
+
Chicken wings
|
22 |
+
Chocolate cake
|
23 |
+
Chocolate mousse
|
24 |
+
Churros
|
25 |
+
Clam chowder
|
26 |
+
Club sandwich
|
27 |
+
Crab cakes
|
28 |
+
Creme brulee
|
29 |
+
Croque madame
|
30 |
+
Cup cakes
|
31 |
+
Deviled eggs
|
32 |
+
Donuts
|
33 |
+
Dumplings
|
34 |
+
Edamame
|
35 |
+
Eggs benedict
|
36 |
+
Escargots
|
37 |
+
Falafel
|
38 |
+
Filet mignon
|
39 |
+
Fish and chips
|
40 |
+
Foie gras
|
41 |
+
French fries
|
42 |
+
French onion soup
|
43 |
+
French toast
|
44 |
+
Fried calamari
|
45 |
+
Fried rice
|
46 |
+
Frozen yogurt
|
47 |
+
Garlic bread
|
48 |
+
Gnocchi
|
49 |
+
Greek salad
|
50 |
+
Grilled cheese sandwich
|
51 |
+
Grilled salmon
|
52 |
+
Guacamole
|
53 |
+
Gyoza
|
54 |
+
Hamburger
|
55 |
+
Hot and sour soup
|
56 |
+
Hot dog
|
57 |
+
Huevos rancheros
|
58 |
+
Hummus
|
59 |
+
Ice cream
|
60 |
+
Lasagna
|
61 |
+
Lobster bisque
|
62 |
+
Lobster roll sandwich
|
63 |
+
Macaroni and cheese
|
64 |
+
Macarons
|
65 |
+
Miso soup
|
66 |
+
Mussels
|
67 |
+
Nachos
|
68 |
+
Omelette
|
69 |
+
Onion rings
|
70 |
+
Oysters
|
71 |
+
Pad thai
|
72 |
+
Paella
|
73 |
+
Pancakes
|
74 |
+
Panna cotta
|
75 |
+
Peking duck
|
76 |
+
Pho
|
77 |
+
Pizza
|
78 |
+
Pork chop
|
79 |
+
Poutine
|
80 |
+
Prime rib
|
81 |
+
Pulled pork sandwich
|
82 |
+
Ramen
|
83 |
+
Ravioli
|
84 |
+
Red velvet cake
|
85 |
+
Risotto
|
86 |
+
Samosa
|
87 |
+
Sashimi
|
88 |
+
Scallops
|
89 |
+
Seaweed salad
|
90 |
+
Shrimp and grits
|
91 |
+
Spaghetti bolognese
|
92 |
+
Spaghetti carbonara
|
93 |
+
Spring rolls
|
94 |
+
Steak
|
95 |
+
Strawberry shortcake
|
96 |
+
Sushi
|
97 |
+
Tacos
|
98 |
+
Takoyaki
|
99 |
+
Tiramisu
|
100 |
+
Tuna tartare
|
101 |
+
Waffles
|
src/manage.py
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python
|
2 |
+
"""Django's command-line utility for administrative tasks."""
|
3 |
+
import os
|
4 |
+
import sys
|
5 |
+
|
6 |
+
|
7 |
+
def main():
|
8 |
+
"""Run administrative tasks."""
|
9 |
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grubguesser.settings")
|
10 |
+
try:
|
11 |
+
from django.core.management import execute_from_command_line
|
12 |
+
except ImportError as exc:
|
13 |
+
raise ImportError(
|
14 |
+
"Couldn't import Django. Are you sure it's installed and "
|
15 |
+
"available on your PYTHONPATH environment variable? Did you "
|
16 |
+
"forget to activate a virtual environment?"
|
17 |
+
) from exc
|
18 |
+
execute_from_command_line(sys.argv)
|
19 |
+
|
20 |
+
|
21 |
+
if __name__ == "__main__":
|
22 |
+
main()
|
src/model_client.py
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from time import time
|
2 |
+
from typing import List, Optional, Tuple, Union
|
3 |
+
import json
|
4 |
+
import os
|
5 |
+
import requests
|
6 |
+
from urllib.parse import urljoin
|
7 |
+
|
8 |
+
from django.core.files.uploadedfile import InMemoryUploadedFile, TemporaryUploadedFile
|
9 |
+
|
10 |
+
import logging
|
11 |
+
|
12 |
+
|
13 |
+
MODEL_ENDPOINT_URL = os.getenv("MODEL_ENDPOINT_URL", "https://0.0.0.0:2000")
|
14 |
+
|
15 |
+
|
16 |
+
def try_make_request(request_kwargs, request_type: str):
|
17 |
+
try:
|
18 |
+
request_kwargs["timeout"] = 3
|
19 |
+
if request_type.lower() == "get":
|
20 |
+
response = requests.get(**request_kwargs)
|
21 |
+
elif request_type.lower() == "post":
|
22 |
+
response = requests.post(**request_kwargs)
|
23 |
+
else:
|
24 |
+
raise Exception("Request Type not Supported. Only get, post supported.")
|
25 |
+
|
26 |
+
return json.loads(response.content)
|
27 |
+
except requests.exceptions.ConnectionError:
|
28 |
+
logging.warning("Failed Model prediction", exc_info=True)
|
29 |
+
return ["Image Failed to Predict", "Try Another Image", "", "", ""]
|
30 |
+
except Exception:
|
31 |
+
logging.warning("Failed Model prediction", exc_info=True)
|
32 |
+
return ["Image Failed to Predict", "Try Another Image", "", "", ""]
|
33 |
+
|
34 |
+
|
35 |
+
def predict_url(url: str) -> List[str]:
|
36 |
+
params = {"url": url}
|
37 |
+
headers = {"content-type": "application/json", "Accept-Charset": "UTF-8"}
|
38 |
+
request_url = urljoin(MODEL_ENDPOINT_URL, "predict_url")
|
39 |
+
request_kwargs = dict(url=request_url, params=params, headers=headers)
|
40 |
+
return try_make_request(request_kwargs, "get")
|
41 |
+
|
42 |
+
|
43 |
+
def predict_file(image_file) -> List[str]:
|
44 |
+
image_file.seek(0)
|
45 |
+
file_ob = {
|
46 |
+
"upload_file": (image_file.name, image_file.read(), image_file.content_type)
|
47 |
+
}
|
48 |
+
request_url = urljoin(MODEL_ENDPOINT_URL, "predict_file")
|
49 |
+
request_kwargs = dict(url=request_url, files=file_ob)
|
50 |
+
return try_make_request(request_kwargs, "post")
|
51 |
+
|
52 |
+
|
53 |
+
def get_color_labels(guesses: List[str], actual_label: Optional[str]) -> List[str]:
|
54 |
+
if not actual_label:
|
55 |
+
return ["white"] * len(guesses)
|
56 |
+
return ["lime" if x == actual_label else "white" for x in guesses]
|
57 |
+
|
58 |
+
|
59 |
+
def url_image_vars(
|
60 |
+
input_img: Union[str, InMemoryUploadedFile, TemporaryUploadedFile], label: str
|
61 |
+
) -> Tuple[List[str], List[str]]:
|
62 |
+
actual_label = label.title()
|
63 |
+
if not is_healthy():
|
64 |
+
logging.error("Model failed healthcheck")
|
65 |
+
top_guesses = ["Model Offline", "Try Again Later", "", "", ""]
|
66 |
+
elif isinstance(input_img, str):
|
67 |
+
top_guesses = predict_url(input_img)
|
68 |
+
elif isinstance(input_img, (InMemoryUploadedFile, TemporaryUploadedFile)):
|
69 |
+
top_guesses = predict_file(input_img)
|
70 |
+
else:
|
71 |
+
logging.error(f"Unknown input type: {type(input_img)=}")
|
72 |
+
top_guesses = ["Unknown Input Type", "", "", "", ""]
|
73 |
+
color_labels = get_color_labels(top_guesses, actual_label)
|
74 |
+
return top_guesses, color_labels
|
75 |
+
|
76 |
+
|
77 |
+
def is_healthy() -> bool:
|
78 |
+
request_url = urljoin(MODEL_ENDPOINT_URL, "healthcheck")
|
79 |
+
try:
|
80 |
+
response = requests.get(url=request_url, timeout=1)
|
81 |
+
except Exception:
|
82 |
+
logging.error("Failed to make healthcheck request")
|
83 |
+
return False
|
84 |
+
if response.status_code == 200:
|
85 |
+
try:
|
86 |
+
response_content = json.loads(response.content)
|
87 |
+
except Exception:
|
88 |
+
logging.error("Failed to load healthcheck content")
|
89 |
+
return False
|
90 |
+
if response_content == {"status": "alive"}:
|
91 |
+
return True
|
92 |
+
return False
|
src/requirements.in
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
scikit-image
|
5 |
numpy
|
6 |
-
|
|
|
|
|
|
|
|
1 |
+
django
|
2 |
+
gunicorn
|
3 |
+
requests
|
|
|
4 |
numpy
|
5 |
+
joblib
|
6 |
+
whitenoise
|
7 |
+
pillow
|
8 |
+
transformers
|
src/requirements.txt
CHANGED
@@ -4,171 +4,69 @@
|
|
4 |
#
|
5 |
# pip-compile --resolver=backtracking requirements.in
|
6 |
#
|
7 |
-
|
8 |
-
# via
|
9 |
-
|
10 |
-
#
|
11 |
-
anyio==3.6.2
|
12 |
-
# via starlette
|
13 |
-
astunparse==1.6.3
|
14 |
-
# via tensorflow
|
15 |
-
cachetools==5.3.0
|
16 |
-
# via google-auth
|
17 |
certifi==2023.5.7
|
18 |
# via requests
|
19 |
charset-normalizer==3.1.0
|
20 |
# via requests
|
21 |
-
|
22 |
-
# via uvicorn
|
23 |
-
fastapi==0.95.2
|
24 |
# via -r requirements.in
|
25 |
-
|
26 |
-
# via tensorflow
|
27 |
-
gast==0.4.0
|
28 |
-
# via tensorflow
|
29 |
-
google-auth==2.18.1
|
30 |
-
# via
|
31 |
-
# google-auth-oauthlib
|
32 |
-
# tensorboard
|
33 |
-
google-auth-oauthlib==1.0.0
|
34 |
-
# via tensorboard
|
35 |
-
google-pasta==0.2.0
|
36 |
-
# via tensorflow
|
37 |
-
grpcio==1.54.2
|
38 |
# via
|
39 |
-
#
|
40 |
-
#
|
41 |
-
|
42 |
-
# via
|
43 |
-
|
44 |
-
# via
|
|
|
|
|
45 |
idna==3.4
|
46 |
-
# via
|
47 |
-
|
48 |
-
#
|
49 |
-
imageio==2.28.1
|
50 |
-
# via scikit-image
|
51 |
-
importlib-metadata==6.6.0
|
52 |
-
# via markdown
|
53 |
-
jax==0.4.10
|
54 |
-
# via tensorflow
|
55 |
-
keras==2.12.0
|
56 |
-
# via tensorflow
|
57 |
-
lazy-loader==0.2
|
58 |
-
# via scikit-image
|
59 |
-
libclang==16.0.0
|
60 |
-
# via tensorflow
|
61 |
-
markdown==3.4.3
|
62 |
-
# via tensorboard
|
63 |
-
markupsafe==2.1.2
|
64 |
-
# via werkzeug
|
65 |
-
ml-dtypes==0.1.0
|
66 |
-
# via jax
|
67 |
-
networkx==3.1
|
68 |
-
# via scikit-image
|
69 |
numpy==1.23.5
|
70 |
# via
|
71 |
# -r requirements.in
|
72 |
-
#
|
73 |
-
# imageio
|
74 |
-
# jax
|
75 |
-
# ml-dtypes
|
76 |
-
# opt-einsum
|
77 |
-
# pywavelets
|
78 |
-
# scikit-image
|
79 |
-
# scipy
|
80 |
-
# tensorboard
|
81 |
-
# tensorflow
|
82 |
-
# tifffile
|
83 |
-
oauthlib==3.2.2
|
84 |
-
# via requests-oauthlib
|
85 |
-
opt-einsum==3.3.0
|
86 |
-
# via
|
87 |
-
# jax
|
88 |
-
# tensorflow
|
89 |
packaging==23.1
|
90 |
# via
|
91 |
-
#
|
92 |
-
#
|
93 |
pillow==9.5.0
|
94 |
-
# via
|
95 |
-
# imageio
|
96 |
-
# scikit-image
|
97 |
-
protobuf==4.23.1
|
98 |
-
# via
|
99 |
-
# tensorboard
|
100 |
-
# tensorflow
|
101 |
-
pyasn1==0.5.0
|
102 |
-
# via
|
103 |
-
# pyasn1-modules
|
104 |
-
# rsa
|
105 |
-
pyasn1-modules==0.3.0
|
106 |
-
# via google-auth
|
107 |
-
pydantic==1.10.7
|
108 |
-
# via fastapi
|
109 |
-
python-multipart==0.0.6
|
110 |
# via -r requirements.in
|
111 |
-
|
112 |
-
# via scikit-image
|
113 |
-
requests==2.30.0
|
114 |
# via
|
115 |
-
#
|
116 |
-
#
|
117 |
-
|
118 |
-
# via
|
119 |
-
|
120 |
-
# via google-auth
|
121 |
-
scikit-image==0.20.0
|
122 |
-
# via -r requirements.in
|
123 |
-
scipy==1.9.1
|
124 |
-
# via
|
125 |
-
# jax
|
126 |
-
# scikit-image
|
127 |
-
six==1.16.0
|
128 |
# via
|
129 |
-
#
|
130 |
-
#
|
131 |
-
#
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
#
|
139 |
-
|
140 |
-
|
141 |
-
tensorflow==2.12.0
|
142 |
# via -r requirements.in
|
143 |
-
tensorflow-estimator==2.12.0
|
144 |
-
# via tensorflow
|
145 |
-
tensorflow-io-gcs-filesystem==0.32.0
|
146 |
-
# via tensorflow
|
147 |
-
termcolor==2.3.0
|
148 |
-
# via tensorflow
|
149 |
-
tifffile==2023.4.12
|
150 |
-
# via scikit-image
|
151 |
typing-extensions==4.5.0
|
152 |
# via
|
153 |
-
#
|
154 |
-
#
|
155 |
-
# tensorflow
|
156 |
urllib3==1.26.15
|
157 |
-
# via
|
158 |
-
|
159 |
-
# requests
|
160 |
-
uvicorn==0.22.0
|
161 |
# via -r requirements.in
|
162 |
-
werkzeug==2.3.4
|
163 |
-
# via tensorboard
|
164 |
-
wheel==0.40.0
|
165 |
-
# via
|
166 |
-
# astunparse
|
167 |
-
# tensorboard
|
168 |
-
wrapt==1.14.1
|
169 |
-
# via tensorflow
|
170 |
-
zipp==3.15.0
|
171 |
-
# via importlib-metadata
|
172 |
|
173 |
# The following packages are considered to be unsafe in a requirements file:
|
174 |
# setuptools
|
|
|
4 |
#
|
5 |
# pip-compile --resolver=backtracking requirements.in
|
6 |
#
|
7 |
+
asgiref==3.7.1
|
8 |
+
# via django
|
9 |
+
backports-zoneinfo==0.2.1
|
10 |
+
# via django
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
certifi==2023.5.7
|
12 |
# via requests
|
13 |
charset-normalizer==3.1.0
|
14 |
# via requests
|
15 |
+
django==4.2.1
|
|
|
|
|
16 |
# via -r requirements.in
|
17 |
+
filelock==3.12.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
# via
|
19 |
+
# huggingface-hub
|
20 |
+
# transformers
|
21 |
+
fsspec==2023.5.0
|
22 |
+
# via huggingface-hub
|
23 |
+
gunicorn==20.1.0
|
24 |
+
# via -r requirements.in
|
25 |
+
huggingface-hub==0.14.1
|
26 |
+
# via transformers
|
27 |
idna==3.4
|
28 |
+
# via requests
|
29 |
+
joblib==1.2.0
|
30 |
+
# via -r requirements.in
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
numpy==1.23.5
|
32 |
# via
|
33 |
# -r requirements.in
|
34 |
+
# transformers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
packaging==23.1
|
36 |
# via
|
37 |
+
# huggingface-hub
|
38 |
+
# transformers
|
39 |
pillow==9.5.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
# via -r requirements.in
|
41 |
+
pyyaml==6.0
|
|
|
|
|
42 |
# via
|
43 |
+
# huggingface-hub
|
44 |
+
# transformers
|
45 |
+
regex==2023.5.5
|
46 |
+
# via transformers
|
47 |
+
requests==2.30.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
# via
|
49 |
+
# -r requirements.in
|
50 |
+
# huggingface-hub
|
51 |
+
# transformers
|
52 |
+
sqlparse==0.4.4
|
53 |
+
# via django
|
54 |
+
tokenizers==0.13.3
|
55 |
+
# via transformers
|
56 |
+
tqdm==4.65.0
|
57 |
+
# via
|
58 |
+
# huggingface-hub
|
59 |
+
# transformers
|
60 |
+
transformers==4.29.2
|
|
|
61 |
# via -r requirements.in
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
typing-extensions==4.5.0
|
63 |
# via
|
64 |
+
# asgiref
|
65 |
+
# huggingface-hub
|
|
|
66 |
urllib3==1.26.15
|
67 |
+
# via requests
|
68 |
+
whitenoise==6.4.0
|
|
|
|
|
69 |
# via -r requirements.in
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
|
71 |
# The following packages are considered to be unsafe in a requirements file:
|
72 |
# setuptools
|
src/sample_list.txt
ADDED
@@ -0,0 +1,1000 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
sample_images/fish_and_chips/1168170.jpg
|
2 |
+
sample_images/chocolate_cake/259749.jpg
|
3 |
+
sample_images/filet_mignon/1193043.jpg
|
4 |
+
sample_images/ramen/503328.jpg
|
5 |
+
sample_images/pancakes/3607557.jpg
|
6 |
+
sample_images/clam_chowder/3412571.jpg
|
7 |
+
sample_images/bruschetta/908968.jpg
|
8 |
+
sample_images/frozen_yogurt/2032662.jpg
|
9 |
+
sample_images/paella/1494747.jpg
|
10 |
+
sample_images/pizza/3475871.jpg
|
11 |
+
sample_images/oysters/142616.jpg
|
12 |
+
sample_images/tuna_tartare/3624042.jpg
|
13 |
+
sample_images/beef_carpaccio/3914142.jpg
|
14 |
+
sample_images/hummus/1888173.jpg
|
15 |
+
sample_images/baby_back_ribs/3446846.jpg
|
16 |
+
sample_images/beef_tartare/3782956.jpg
|
17 |
+
sample_images/falafel/94008.jpg
|
18 |
+
sample_images/ceviche/2754053.jpg
|
19 |
+
sample_images/ice_cream/1504172.jpg
|
20 |
+
sample_images/edamame/3800272.jpg
|
21 |
+
sample_images/dumplings/1517770.jpg
|
22 |
+
sample_images/french_onion_soup/373134.jpg
|
23 |
+
sample_images/baby_back_ribs/2032061.jpg
|
24 |
+
sample_images/dumplings/513541.jpg
|
25 |
+
sample_images/chicken_quesadilla/2738733.jpg
|
26 |
+
sample_images/cannoli/2060152.jpg
|
27 |
+
sample_images/red_velvet_cake/133541.jpg
|
28 |
+
sample_images/fish_and_chips/475763.jpg
|
29 |
+
sample_images/falafel/652718.jpg
|
30 |
+
sample_images/fish_and_chips/55493.jpg
|
31 |
+
sample_images/chicken_quesadilla/371885.jpg
|
32 |
+
sample_images/shrimp_and_grits/188249.jpg
|
33 |
+
sample_images/ceviche/3122438.jpg
|
34 |
+
sample_images/eggs_benedict/3596887.jpg
|
35 |
+
sample_images/spaghetti_carbonara/1546914.jpg
|
36 |
+
sample_images/baklava/3009508.jpg
|
37 |
+
sample_images/gyoza/3250513.jpg
|
38 |
+
sample_images/pancakes/2226088.jpg
|
39 |
+
sample_images/lasagna/976466.jpg
|
40 |
+
sample_images/scallops/3192548.jpg
|
41 |
+
sample_images/oysters/3391415.jpg
|
42 |
+
sample_images/red_velvet_cake/3227242.jpg
|
43 |
+
sample_images/greek_salad/3787249.jpg
|
44 |
+
sample_images/foie_gras/556139.jpg
|
45 |
+
sample_images/chocolate_cake/641521.jpg
|
46 |
+
sample_images/fried_rice/1054627.jpg
|
47 |
+
sample_images/pulled_pork_sandwich/2120438.jpg
|
48 |
+
sample_images/greek_salad/359977.jpg
|
49 |
+
sample_images/deviled_eggs/3395530.jpg
|
50 |
+
sample_images/pizza/331644.jpg
|
51 |
+
sample_images/macaroni_and_cheese/1692489.jpg
|
52 |
+
sample_images/beignets/48150.jpg
|
53 |
+
sample_images/french_onion_soup/3766155.jpg
|
54 |
+
sample_images/onion_rings/321297.jpg
|
55 |
+
sample_images/greek_salad/1961350.jpg
|
56 |
+
sample_images/caesar_salad/2521424.jpg
|
57 |
+
sample_images/chicken_curry/392185.jpg
|
58 |
+
sample_images/bruschetta/829232.jpg
|
59 |
+
sample_images/chocolate_mousse/3607716.jpg
|
60 |
+
sample_images/onion_rings/2573722.jpg
|
61 |
+
sample_images/cheesecake/3049427.jpg
|
62 |
+
sample_images/cannoli/1628010.jpg
|
63 |
+
sample_images/paella/2809000.jpg
|
64 |
+
sample_images/tiramisu/3369477.jpg
|
65 |
+
sample_images/cup_cakes/60474.jpg
|
66 |
+
sample_images/shrimp_and_grits/1955741.jpg
|
67 |
+
sample_images/french_fries/3586758.jpg
|
68 |
+
sample_images/ramen/291516.jpg
|
69 |
+
sample_images/huevos_rancheros/3606775.jpg
|
70 |
+
sample_images/chocolate_mousse/60139.jpg
|
71 |
+
sample_images/bibimbap/1952881.jpg
|
72 |
+
sample_images/steak/2921355.jpg
|
73 |
+
sample_images/eggs_benedict/3665428.jpg
|
74 |
+
sample_images/bibimbap/3434800.jpg
|
75 |
+
sample_images/huevos_rancheros/1800868.jpg
|
76 |
+
sample_images/tiramisu/3412914.jpg
|
77 |
+
sample_images/strawberry_shortcake/587263.jpg
|
78 |
+
sample_images/carrot_cake/2183129.jpg
|
79 |
+
sample_images/fried_rice/331282.jpg
|
80 |
+
sample_images/nachos/1075209.jpg
|
81 |
+
sample_images/panna_cotta/481801.jpg
|
82 |
+
sample_images/bruschetta/239704.jpg
|
83 |
+
sample_images/fish_and_chips/2192937.jpg
|
84 |
+
sample_images/donuts/2804713.jpg
|
85 |
+
sample_images/crab_cakes/2611772.jpg
|
86 |
+
sample_images/shrimp_and_grits/899184.jpg
|
87 |
+
sample_images/tuna_tartare/2014856.jpg
|
88 |
+
sample_images/apple_pie/3746599.jpg
|
89 |
+
sample_images/hot_and_sour_soup/3204149.jpg
|
90 |
+
sample_images/croque_madame/195657.jpg
|
91 |
+
sample_images/beef_tartare/2752297.jpg
|
92 |
+
sample_images/fried_rice/2186269.jpg
|
93 |
+
sample_images/crab_cakes/3068010.jpg
|
94 |
+
sample_images/chicken_curry/1409451.jpg
|
95 |
+
sample_images/baby_back_ribs/1873449.jpg
|
96 |
+
sample_images/carrot_cake/2277561.jpg
|
97 |
+
sample_images/pizza/212995.jpg
|
98 |
+
sample_images/spaghetti_carbonara/1853583.jpg
|
99 |
+
sample_images/pancakes/473383.jpg
|
100 |
+
sample_images/prime_rib/2596724.jpg
|
101 |
+
sample_images/ceviche/3143954.jpg
|
102 |
+
sample_images/bruschetta/3718167.jpg
|
103 |
+
sample_images/fried_calamari/2178804.jpg
|
104 |
+
sample_images/nachos/1168757.jpg
|
105 |
+
sample_images/pizza/1060407.jpg
|
106 |
+
sample_images/onion_rings/890921.jpg
|
107 |
+
sample_images/ice_cream/3743054.jpg
|
108 |
+
sample_images/chicken_curry/3351502.jpg
|
109 |
+
sample_images/bibimbap/548018.jpg
|
110 |
+
sample_images/beet_salad/454409.jpg
|
111 |
+
sample_images/pho/452762.jpg
|
112 |
+
sample_images/grilled_cheese_sandwich/1551096.jpg
|
113 |
+
sample_images/pulled_pork_sandwich/3703370.jpg
|
114 |
+
sample_images/pho/1139062.jpg
|
115 |
+
sample_images/hot_and_sour_soup/3177114.jpg
|
116 |
+
sample_images/escargots/1224760.jpg
|
117 |
+
sample_images/spaghetti_carbonara/1545299.jpg
|
118 |
+
sample_images/churros/2537428.jpg
|
119 |
+
sample_images/deviled_eggs/662604.jpg
|
120 |
+
sample_images/lobster_bisque/1111396.jpg
|
121 |
+
sample_images/chicken_wings/705250.jpg
|
122 |
+
sample_images/ice_cream/3410886.jpg
|
123 |
+
sample_images/baklava/1448425.jpg
|
124 |
+
sample_images/huevos_rancheros/1287764.jpg
|
125 |
+
sample_images/pizza/300157.jpg
|
126 |
+
sample_images/macaroni_and_cheese/3008448.jpg
|
127 |
+
sample_images/peking_duck/1012816.jpg
|
128 |
+
sample_images/caprese_salad/1807742.jpg
|
129 |
+
sample_images/pancakes/3900036.jpg
|
130 |
+
sample_images/deviled_eggs/2122001.jpg
|
131 |
+
sample_images/huevos_rancheros/613887.jpg
|
132 |
+
sample_images/club_sandwich/1096667.jpg
|
133 |
+
sample_images/paella/932110.jpg
|
134 |
+
sample_images/cheesecake/1890669.jpg
|
135 |
+
sample_images/ravioli/2878865.jpg
|
136 |
+
sample_images/tacos/2893468.jpg
|
137 |
+
sample_images/pad_thai/2227933.jpg
|
138 |
+
sample_images/macaroni_and_cheese/2897942.jpg
|
139 |
+
sample_images/caesar_salad/3244439.jpg
|
140 |
+
sample_images/sashimi/2114915.jpg
|
141 |
+
sample_images/grilled_salmon/3058966.jpg
|
142 |
+
sample_images/carrot_cake/1389512.jpg
|
143 |
+
sample_images/french_fries/2269039.jpg
|
144 |
+
sample_images/fish_and_chips/64762.jpg
|
145 |
+
sample_images/clam_chowder/21937.jpg
|
146 |
+
sample_images/escargots/451050.jpg
|
147 |
+
sample_images/french_onion_soup/3485582.jpg
|
148 |
+
sample_images/huevos_rancheros/1979878.jpg
|
149 |
+
sample_images/dumplings/2178767.jpg
|
150 |
+
sample_images/waffles/549187.jpg
|
151 |
+
sample_images/mussels/819222.jpg
|
152 |
+
sample_images/ceviche/2565501.jpg
|
153 |
+
sample_images/mussels/2625250.jpg
|
154 |
+
sample_images/waffles/2834849.jpg
|
155 |
+
sample_images/sashimi/2594076.jpg
|
156 |
+
sample_images/chocolate_mousse/1622112.jpg
|
157 |
+
sample_images/bread_pudding/1777993.jpg
|
158 |
+
sample_images/fish_and_chips/820685.jpg
|
159 |
+
sample_images/samosa/2773043.jpg
|
160 |
+
sample_images/samosa/3125094.jpg
|
161 |
+
sample_images/grilled_salmon/3237769.jpg
|
162 |
+
sample_images/tacos/322915.jpg
|
163 |
+
sample_images/baklava/2718099.jpg
|
164 |
+
sample_images/oysters/3361558.jpg
|
165 |
+
sample_images/ramen/3067372.jpg
|
166 |
+
sample_images/spaghetti_bolognese/2494379.jpg
|
167 |
+
sample_images/frozen_yogurt/3735306.jpg
|
168 |
+
sample_images/tuna_tartare/2958593.jpg
|
169 |
+
sample_images/churros/95272.jpg
|
170 |
+
sample_images/grilled_salmon/2652526.jpg
|
171 |
+
sample_images/pulled_pork_sandwich/1651676.jpg
|
172 |
+
sample_images/chocolate_mousse/3449482.jpg
|
173 |
+
sample_images/edamame/70117.jpg
|
174 |
+
sample_images/ramen/753557.jpg
|
175 |
+
sample_images/hamburger/577684.jpg
|
176 |
+
sample_images/nachos/2232364.jpg
|
177 |
+
sample_images/edamame/1620027.jpg
|
178 |
+
sample_images/lobster_roll_sandwich/2177217.jpg
|
179 |
+
sample_images/risotto/228300.jpg
|
180 |
+
sample_images/creme_brulee/3315681.jpg
|
181 |
+
sample_images/lobster_bisque/1008682.jpg
|
182 |
+
sample_images/waffles/1676746.jpg
|
183 |
+
sample_images/hot_dog/3495622.jpg
|
184 |
+
sample_images/dumplings/323499.jpg
|
185 |
+
sample_images/peking_duck/3027643.jpg
|
186 |
+
sample_images/ice_cream/519165.jpg
|
187 |
+
sample_images/omelette/3902864.jpg
|
188 |
+
sample_images/hot_dog/2503827.jpg
|
189 |
+
sample_images/garlic_bread/3697388.jpg
|
190 |
+
sample_images/sushi/3325565.jpg
|
191 |
+
sample_images/hummus/929626.jpg
|
192 |
+
sample_images/french_onion_soup/3475000.jpg
|
193 |
+
sample_images/pancakes/1800178.jpg
|
194 |
+
sample_images/french_onion_soup/2656204.jpg
|
195 |
+
sample_images/gnocchi/2605818.jpg
|
196 |
+
sample_images/miso_soup/3919372.jpg
|
197 |
+
sample_images/red_velvet_cake/2011498.jpg
|
198 |
+
sample_images/edamame/70183.jpg
|
199 |
+
sample_images/ceviche/953430.jpg
|
200 |
+
sample_images/chicken_curry/390080.jpg
|
201 |
+
sample_images/strawberry_shortcake/319500.jpg
|
202 |
+
sample_images/takoyaki/1022404.jpg
|
203 |
+
sample_images/lobster_roll_sandwich/283653.jpg
|
204 |
+
sample_images/samosa/730084.jpg
|
205 |
+
sample_images/caesar_salad/1369936.jpg
|
206 |
+
sample_images/shrimp_and_grits/2797598.jpg
|
207 |
+
sample_images/red_velvet_cake/569810.jpg
|
208 |
+
sample_images/strawberry_shortcake/844054.jpg
|
209 |
+
sample_images/ice_cream/2985290.jpg
|
210 |
+
sample_images/caesar_salad/267740.jpg
|
211 |
+
sample_images/tiramisu/3517382.jpg
|
212 |
+
sample_images/takoyaki/3310286.jpg
|
213 |
+
sample_images/lasagna/3098534.jpg
|
214 |
+
sample_images/lasagna/3762742.jpg
|
215 |
+
sample_images/frozen_yogurt/3550815.jpg
|
216 |
+
sample_images/risotto/727450.jpg
|
217 |
+
sample_images/gnocchi/3382390.jpg
|
218 |
+
sample_images/red_velvet_cake/3317730.jpg
|
219 |
+
sample_images/hamburger/1816650.jpg
|
220 |
+
sample_images/bruschetta/2160577.jpg
|
221 |
+
sample_images/paella/752587.jpg
|
222 |
+
sample_images/huevos_rancheros/2609320.jpg
|
223 |
+
sample_images/chocolate_mousse/2036876.jpg
|
224 |
+
sample_images/frozen_yogurt/2738125.jpg
|
225 |
+
sample_images/baby_back_ribs/1352978.jpg
|
226 |
+
sample_images/carrot_cake/1452452.jpg
|
227 |
+
sample_images/paella/964623.jpg
|
228 |
+
sample_images/escargots/1902762.jpg
|
229 |
+
sample_images/chicken_quesadilla/823085.jpg
|
230 |
+
sample_images/lobster_bisque/2149820.jpg
|
231 |
+
sample_images/chocolate_mousse/899470.jpg
|
232 |
+
sample_images/cheese_plate/1358652.jpg
|
233 |
+
sample_images/sushi/1676252.jpg
|
234 |
+
sample_images/dumplings/2372842.jpg
|
235 |
+
sample_images/nachos/3293771.jpg
|
236 |
+
sample_images/caprese_salad/1847628.jpg
|
237 |
+
sample_images/crab_cakes/2780770.jpg
|
238 |
+
sample_images/ravioli/128223.jpg
|
239 |
+
sample_images/chocolate_cake/3257568.jpg
|
240 |
+
sample_images/chocolate_cake/2340379.jpg
|
241 |
+
sample_images/donuts/3701283.jpg
|
242 |
+
sample_images/risotto/1239465.jpg
|
243 |
+
sample_images/bibimbap/1888221.jpg
|
244 |
+
sample_images/edamame/2198173.jpg
|
245 |
+
sample_images/pho/2844050.jpg
|
246 |
+
sample_images/baklava/3455436.jpg
|
247 |
+
sample_images/ramen/3295452.jpg
|
248 |
+
sample_images/pancakes/2893734.jpg
|
249 |
+
sample_images/croque_madame/1594573.jpg
|
250 |
+
sample_images/steak/2685931.jpg
|
251 |
+
sample_images/dumplings/514100.jpg
|
252 |
+
sample_images/greek_salad/2772598.jpg
|
253 |
+
sample_images/seaweed_salad/758365.jpg
|
254 |
+
sample_images/chocolate_cake/71490.jpg
|
255 |
+
sample_images/edamame/2545734.jpg
|
256 |
+
sample_images/oysters/446176.jpg
|
257 |
+
sample_images/pancakes/3608337.jpg
|
258 |
+
sample_images/mussels/3118008.jpg
|
259 |
+
sample_images/tacos/1983024.jpg
|
260 |
+
sample_images/beef_tartare/1835611.jpg
|
261 |
+
sample_images/pancakes/863585.jpg
|
262 |
+
sample_images/oysters/3333073.jpg
|
263 |
+
sample_images/caesar_salad/3716003.jpg
|
264 |
+
sample_images/pho/3087779.jpg
|
265 |
+
sample_images/foie_gras/1590207.jpg
|
266 |
+
sample_images/hot_and_sour_soup/3824797.jpg
|
267 |
+
sample_images/carrot_cake/869679.jpg
|
268 |
+
sample_images/pizza/2572488.jpg
|
269 |
+
sample_images/cannoli/3487659.jpg
|
270 |
+
sample_images/caprese_salad/3049523.jpg
|
271 |
+
sample_images/ramen/2598193.jpg
|
272 |
+
sample_images/macaroni_and_cheese/3256717.jpg
|
273 |
+
sample_images/edamame/453226.jpg
|
274 |
+
sample_images/carrot_cake/664311.jpg
|
275 |
+
sample_images/foie_gras/865452.jpg
|
276 |
+
sample_images/french_toast/1349772.jpg
|
277 |
+
sample_images/tiramisu/2473828.jpg
|
278 |
+
sample_images/onion_rings/2322074.jpg
|
279 |
+
sample_images/grilled_cheese_sandwich/2889391.jpg
|
280 |
+
sample_images/foie_gras/3677569.jpg
|
281 |
+
sample_images/ramen/398993.jpg
|
282 |
+
sample_images/fried_calamari/3134017.jpg
|
283 |
+
sample_images/tuna_tartare/3122272.jpg
|
284 |
+
sample_images/clam_chowder/1601126.jpg
|
285 |
+
sample_images/bruschetta/710425.jpg
|
286 |
+
sample_images/sushi/2800107.jpg
|
287 |
+
sample_images/crab_cakes/3468933.jpg
|
288 |
+
sample_images/lasagna/3874120.jpg
|
289 |
+
sample_images/ravioli/709670.jpg
|
290 |
+
sample_images/fried_calamari/1389368.jpg
|
291 |
+
sample_images/grilled_cheese_sandwich/1355521.jpg
|
292 |
+
sample_images/bibimbap/3431728.jpg
|
293 |
+
sample_images/greek_salad/54573.jpg
|
294 |
+
sample_images/donuts/2702384.jpg
|
295 |
+
sample_images/prime_rib/3025684.jpg
|
296 |
+
sample_images/churros/3546196.jpg
|
297 |
+
sample_images/caprese_salad/1502492.jpg
|
298 |
+
sample_images/paella/2438403.jpg
|
299 |
+
sample_images/macaroni_and_cheese/172982.jpg
|
300 |
+
sample_images/grilled_salmon/3851924.jpg
|
301 |
+
sample_images/filet_mignon/279236.jpg
|
302 |
+
sample_images/macaroni_and_cheese/637469.jpg
|
303 |
+
sample_images/pancakes/2829729.jpg
|
304 |
+
sample_images/cheese_plate/878085.jpg
|
305 |
+
sample_images/cannoli/726697.jpg
|
306 |
+
sample_images/pancakes/2563821.jpg
|
307 |
+
sample_images/baby_back_ribs/2897079.jpg
|
308 |
+
sample_images/guacamole/2614565.jpg
|
309 |
+
sample_images/gyoza/347465.jpg
|
310 |
+
sample_images/macarons/2103619.jpg
|
311 |
+
sample_images/pork_chop/1125422.jpg
|
312 |
+
sample_images/foie_gras/1896875.jpg
|
313 |
+
sample_images/bibimbap/3316386.jpg
|
314 |
+
sample_images/pancakes/3642018.jpg
|
315 |
+
sample_images/caprese_salad/3579079.jpg
|
316 |
+
sample_images/samosa/3492341.jpg
|
317 |
+
sample_images/ice_cream/1488989.jpg
|
318 |
+
sample_images/edamame/1721784.jpg
|
319 |
+
sample_images/steak/653303.jpg
|
320 |
+
sample_images/strawberry_shortcake/3632935.jpg
|
321 |
+
sample_images/churros/3513246.jpg
|
322 |
+
sample_images/cheesecake/708439.jpg
|
323 |
+
sample_images/gyoza/2388184.jpg
|
324 |
+
sample_images/lobster_bisque/1262226.jpg
|
325 |
+
sample_images/pulled_pork_sandwich/608734.jpg
|
326 |
+
sample_images/edamame/1426533.jpg
|
327 |
+
sample_images/samosa/1583992.jpg
|
328 |
+
sample_images/chicken_quesadilla/3009173.jpg
|
329 |
+
sample_images/frozen_yogurt/453269.jpg
|
330 |
+
sample_images/edamame/2293007.jpg
|
331 |
+
sample_images/caesar_salad/2269300.jpg
|
332 |
+
sample_images/cheese_plate/654994.jpg
|
333 |
+
sample_images/sushi/858157.jpg
|
334 |
+
sample_images/paella/904487.jpg
|
335 |
+
sample_images/samosa/626821.jpg
|
336 |
+
sample_images/deviled_eggs/885350.jpg
|
337 |
+
sample_images/tuna_tartare/568199.jpg
|
338 |
+
sample_images/grilled_salmon/3601246.jpg
|
339 |
+
sample_images/sashimi/1593443.jpg
|
340 |
+
sample_images/spring_rolls/2776715.jpg
|
341 |
+
sample_images/scallops/1036780.jpg
|
342 |
+
sample_images/grilled_salmon/3732483.jpg
|
343 |
+
sample_images/chocolate_mousse/2475136.jpg
|
344 |
+
sample_images/garlic_bread/2500649.jpg
|
345 |
+
sample_images/paella/1081232.jpg
|
346 |
+
sample_images/spring_rolls/3725958.jpg
|
347 |
+
sample_images/foie_gras/3473853.jpg
|
348 |
+
sample_images/pork_chop/2560929.jpg
|
349 |
+
sample_images/ice_cream/2040874.jpg
|
350 |
+
sample_images/ceviche/2450809.jpg
|
351 |
+
sample_images/omelette/1940523.jpg
|
352 |
+
sample_images/panna_cotta/2616026.jpg
|
353 |
+
sample_images/macarons/3323983.jpg
|
354 |
+
sample_images/chicken_curry/2947167.jpg
|
355 |
+
sample_images/gnocchi/1600493.jpg
|
356 |
+
sample_images/dumplings/2385016.jpg
|
357 |
+
sample_images/spaghetti_carbonara/154021.jpg
|
358 |
+
sample_images/lobster_roll_sandwich/2486975.jpg
|
359 |
+
sample_images/donuts/222806.jpg
|
360 |
+
sample_images/poutine/2657558.jpg
|
361 |
+
sample_images/beignets/2249116.jpg
|
362 |
+
sample_images/omelette/2353178.jpg
|
363 |
+
sample_images/cup_cakes/951611.jpg
|
364 |
+
sample_images/crab_cakes/3504994.jpg
|
365 |
+
sample_images/hot_dog/115411.jpg
|
366 |
+
sample_images/omelette/955537.jpg
|
367 |
+
sample_images/pork_chop/1071034.jpg
|
368 |
+
sample_images/cup_cakes/137560.jpg
|
369 |
+
sample_images/cheese_plate/1769785.jpg
|
370 |
+
sample_images/pulled_pork_sandwich/800659.jpg
|
371 |
+
sample_images/macarons/1075.jpg
|
372 |
+
sample_images/ravioli/1155126.jpg
|
373 |
+
sample_images/fried_rice/28981.jpg
|
374 |
+
sample_images/fried_rice/3902013.jpg
|
375 |
+
sample_images/oysters/1670024.jpg
|
376 |
+
sample_images/filet_mignon/3144085.jpg
|
377 |
+
sample_images/spaghetti_carbonara/3916536.jpg
|
378 |
+
sample_images/cheese_plate/1597591.jpg
|
379 |
+
sample_images/ice_cream/3135306.jpg
|
380 |
+
sample_images/greek_salad/33170.jpg
|
381 |
+
sample_images/pork_chop/1337951.jpg
|
382 |
+
sample_images/huevos_rancheros/2854900.jpg
|
383 |
+
sample_images/pork_chop/2751178.jpg
|
384 |
+
sample_images/frozen_yogurt/801625.jpg
|
385 |
+
sample_images/bibimbap/3622080.jpg
|
386 |
+
sample_images/waffles/1554866.jpg
|
387 |
+
sample_images/fried_rice/61401.jpg
|
388 |
+
sample_images/gyoza/341182.jpg
|
389 |
+
sample_images/breakfast_burrito/1318619.jpg
|
390 |
+
sample_images/shrimp_and_grits/2540818.jpg
|
391 |
+
sample_images/spring_rolls/732464.jpg
|
392 |
+
sample_images/tiramisu/627976.jpg
|
393 |
+
sample_images/lobster_roll_sandwich/2299697.jpg
|
394 |
+
sample_images/club_sandwich/1290943.jpg
|
395 |
+
sample_images/spaghetti_bolognese/2377001.jpg
|
396 |
+
sample_images/seaweed_salad/2684780.jpg
|
397 |
+
sample_images/seaweed_salad/627232.jpg
|
398 |
+
sample_images/carrot_cake/2115502.jpg
|
399 |
+
sample_images/lasagna/2555366.jpg
|
400 |
+
sample_images/pho/2564969.jpg
|
401 |
+
sample_images/guacamole/244609.jpg
|
402 |
+
sample_images/cup_cakes/8898.jpg
|
403 |
+
sample_images/paella/700738.jpg
|
404 |
+
sample_images/chicken_quesadilla/3614780.jpg
|
405 |
+
sample_images/risotto/3841341.jpg
|
406 |
+
sample_images/beignets/657579.jpg
|
407 |
+
sample_images/red_velvet_cake/2601161.jpg
|
408 |
+
sample_images/ramen/1368561.jpg
|
409 |
+
sample_images/lasagna/2664248.jpg
|
410 |
+
sample_images/guacamole/496267.jpg
|
411 |
+
sample_images/frozen_yogurt/1512742.jpg
|
412 |
+
sample_images/waffles/1845952.jpg
|
413 |
+
sample_images/tuna_tartare/3274262.jpg
|
414 |
+
sample_images/caesar_salad/1700074.jpg
|
415 |
+
sample_images/prime_rib/1917065.jpg
|
416 |
+
sample_images/tiramisu/353454.jpg
|
417 |
+
sample_images/carrot_cake/759507.jpg
|
418 |
+
sample_images/escargots/3589932.jpg
|
419 |
+
sample_images/waffles/2969913.jpg
|
420 |
+
sample_images/strawberry_shortcake/574064.jpg
|
421 |
+
sample_images/fried_calamari/1822912.jpg
|
422 |
+
sample_images/nachos/1117309.jpg
|
423 |
+
sample_images/donuts/3014911.jpg
|
424 |
+
sample_images/strawberry_shortcake/81547.jpg
|
425 |
+
sample_images/chicken_wings/2687060.jpg
|
426 |
+
sample_images/escargots/81395.jpg
|
427 |
+
sample_images/french_fries/885543.jpg
|
428 |
+
sample_images/falafel/1579072.jpg
|
429 |
+
sample_images/baklava/763258.jpg
|
430 |
+
sample_images/hummus/1071114.jpg
|
431 |
+
sample_images/hamburger/3563379.jpg
|
432 |
+
sample_images/fish_and_chips/1961695.jpg
|
433 |
+
sample_images/miso_soup/2702196.jpg
|
434 |
+
sample_images/crab_cakes/2126255.jpg
|
435 |
+
sample_images/gnocchi/1696103.jpg
|
436 |
+
sample_images/sushi/988559.jpg
|
437 |
+
sample_images/falafel/1264312.jpg
|
438 |
+
sample_images/prime_rib/1570554.jpg
|
439 |
+
sample_images/ice_cream/2769826.jpg
|
440 |
+
sample_images/fish_and_chips/1563192.jpg
|
441 |
+
sample_images/shrimp_and_grits/3890680.jpg
|
442 |
+
sample_images/clam_chowder/3137442.jpg
|
443 |
+
sample_images/spaghetti_bolognese/3215075.jpg
|
444 |
+
sample_images/hamburger/398340.jpg
|
445 |
+
sample_images/pulled_pork_sandwich/904515.jpg
|
446 |
+
sample_images/cheesecake/2332717.jpg
|
447 |
+
sample_images/pho/108075.jpg
|
448 |
+
sample_images/lasagna/2467378.jpg
|
449 |
+
sample_images/caesar_salad/1046195.jpg
|
450 |
+
sample_images/lobster_roll_sandwich/946365.jpg
|
451 |
+
sample_images/eggs_benedict/2496776.jpg
|
452 |
+
sample_images/steak/3548389.jpg
|
453 |
+
sample_images/seaweed_salad/1775079.jpg
|
454 |
+
sample_images/shrimp_and_grits/1530531.jpg
|
455 |
+
sample_images/tuna_tartare/90780.jpg
|
456 |
+
sample_images/ice_cream/1482943.jpg
|
457 |
+
sample_images/mussels/3113057.jpg
|
458 |
+
sample_images/nachos/217585.jpg
|
459 |
+
sample_images/dumplings/923590.jpg
|
460 |
+
sample_images/caesar_salad/355980.jpg
|
461 |
+
sample_images/chicken_wings/2573245.jpg
|
462 |
+
sample_images/filet_mignon/2204089.jpg
|
463 |
+
sample_images/lobster_bisque/813441.jpg
|
464 |
+
sample_images/samosa/2111434.jpg
|
465 |
+
sample_images/fried_calamari/601291.jpg
|
466 |
+
sample_images/breakfast_burrito/3582859.jpg
|
467 |
+
sample_images/falafel/1785678.jpg
|
468 |
+
sample_images/paella/1297738.jpg
|
469 |
+
sample_images/hot_dog/2295811.jpg
|
470 |
+
sample_images/chicken_wings/644288.jpg
|
471 |
+
sample_images/cheese_plate/1023521.jpg
|
472 |
+
sample_images/eggs_benedict/2526121.jpg
|
473 |
+
sample_images/prime_rib/2910802.jpg
|
474 |
+
sample_images/macaroni_and_cheese/1825607.jpg
|
475 |
+
sample_images/bruschetta/1018048.jpg
|
476 |
+
sample_images/omelette/3125509.jpg
|
477 |
+
sample_images/filet_mignon/2610109.jpg
|
478 |
+
sample_images/beignets/3333828.jpg
|
479 |
+
sample_images/edamame/814753.jpg
|
480 |
+
sample_images/caprese_salad/129865.jpg
|
481 |
+
sample_images/spaghetti_carbonara/1223435.jpg
|
482 |
+
sample_images/cannoli/1087676.jpg
|
483 |
+
sample_images/edamame/401098.jpg
|
484 |
+
sample_images/cup_cakes/3685871.jpg
|
485 |
+
sample_images/shrimp_and_grits/1078946.jpg
|
486 |
+
sample_images/prime_rib/131503.jpg
|
487 |
+
sample_images/deviled_eggs/546418.jpg
|
488 |
+
sample_images/grilled_cheese_sandwich/3533671.jpg
|
489 |
+
sample_images/club_sandwich/2256162.jpg
|
490 |
+
sample_images/ravioli/722639.jpg
|
491 |
+
sample_images/takoyaki/398037.jpg
|
492 |
+
sample_images/chocolate_cake/2585626.jpg
|
493 |
+
sample_images/mussels/3402102.jpg
|
494 |
+
sample_images/pho/2001863.jpg
|
495 |
+
sample_images/lasagna/3628964.jpg
|
496 |
+
sample_images/tiramisu/909253.jpg
|
497 |
+
sample_images/apple_pie/1514110.jpg
|
498 |
+
sample_images/fried_calamari/80030.jpg
|
499 |
+
sample_images/bread_pudding/375776.jpg
|
500 |
+
sample_images/beef_tartare/948352.jpg
|
501 |
+
sample_images/bibimbap/1117690.jpg
|
502 |
+
sample_images/filet_mignon/3661944.jpg
|
503 |
+
sample_images/ice_cream/580476.jpg
|
504 |
+
sample_images/red_velvet_cake/153479.jpg
|
505 |
+
sample_images/filet_mignon/1038503.jpg
|
506 |
+
sample_images/nachos/2533863.jpg
|
507 |
+
sample_images/club_sandwich/3298554.jpg
|
508 |
+
sample_images/crab_cakes/1005068.jpg
|
509 |
+
sample_images/grilled_salmon/2802649.jpg
|
510 |
+
sample_images/bruschetta/1714870.jpg
|
511 |
+
sample_images/escargots/2064789.jpg
|
512 |
+
sample_images/falafel/1898638.jpg
|
513 |
+
sample_images/fried_calamari/756355.jpg
|
514 |
+
sample_images/filet_mignon/3608344.jpg
|
515 |
+
sample_images/lasagna/2704381.jpg
|
516 |
+
sample_images/red_velvet_cake/2593077.jpg
|
517 |
+
sample_images/filet_mignon/2046519.jpg
|
518 |
+
sample_images/shrimp_and_grits/552618.jpg
|
519 |
+
sample_images/guacamole/2222704.jpg
|
520 |
+
sample_images/edamame/1530694.jpg
|
521 |
+
sample_images/sushi/1795747.jpg
|
522 |
+
sample_images/clam_chowder/3399924.jpg
|
523 |
+
sample_images/poutine/3073839.jpg
|
524 |
+
sample_images/french_toast/95614.jpg
|
525 |
+
sample_images/donuts/317068.jpg
|
526 |
+
sample_images/chicken_curry/617523.jpg
|
527 |
+
sample_images/ice_cream/3523878.jpg
|
528 |
+
sample_images/chicken_curry/1351520.jpg
|
529 |
+
sample_images/cannoli/1975469.jpg
|
530 |
+
sample_images/huevos_rancheros/1510794.jpg
|
531 |
+
sample_images/hamburger/2034553.jpg
|
532 |
+
sample_images/panna_cotta/467863.jpg
|
533 |
+
sample_images/caesar_salad/2877666.jpg
|
534 |
+
sample_images/bruschetta/938199.jpg
|
535 |
+
sample_images/lobster_bisque/517646.jpg
|
536 |
+
sample_images/beef_carpaccio/898749.jpg
|
537 |
+
sample_images/edamame/3181559.jpg
|
538 |
+
sample_images/fried_rice/2349818.jpg
|
539 |
+
sample_images/waffles/389675.jpg
|
540 |
+
sample_images/dumplings/7421.jpg
|
541 |
+
sample_images/french_onion_soup/297334.jpg
|
542 |
+
sample_images/red_velvet_cake/1297812.jpg
|
543 |
+
sample_images/baby_back_ribs/1495381.jpg
|
544 |
+
sample_images/deviled_eggs/1970158.jpg
|
545 |
+
sample_images/fried_calamari/38346.jpg
|
546 |
+
sample_images/cannoli/1763885.jpg
|
547 |
+
sample_images/club_sandwich/3900686.jpg
|
548 |
+
sample_images/fish_and_chips/3589353.jpg
|
549 |
+
sample_images/beef_tartare/2580153.jpg
|
550 |
+
sample_images/french_fries/566728.jpg
|
551 |
+
sample_images/french_fries/2838364.jpg
|
552 |
+
sample_images/grilled_salmon/3922365.jpg
|
553 |
+
sample_images/creme_brulee/2661416.jpg
|
554 |
+
sample_images/poutine/2754839.jpg
|
555 |
+
sample_images/croque_madame/2348177.jpg
|
556 |
+
sample_images/fish_and_chips/1164299.jpg
|
557 |
+
sample_images/greek_salad/233254.jpg
|
558 |
+
sample_images/ice_cream/1756584.jpg
|
559 |
+
sample_images/cup_cakes/1157931.jpg
|
560 |
+
sample_images/huevos_rancheros/1691890.jpg
|
561 |
+
sample_images/pho/2872388.jpg
|
562 |
+
sample_images/creme_brulee/2960858.jpg
|
563 |
+
sample_images/filet_mignon/256822.jpg
|
564 |
+
sample_images/cannoli/1922681.jpg
|
565 |
+
sample_images/eggs_benedict/900631.jpg
|
566 |
+
sample_images/ceviche/597917.jpg
|
567 |
+
sample_images/chocolate_mousse/1008451.jpg
|
568 |
+
sample_images/fried_rice/2834370.jpg
|
569 |
+
sample_images/grilled_salmon/3376638.jpg
|
570 |
+
sample_images/filet_mignon/134179.jpg
|
571 |
+
sample_images/escargots/3051922.jpg
|
572 |
+
sample_images/chicken_wings/1220851.jpg
|
573 |
+
sample_images/beet_salad/2199309.jpg
|
574 |
+
sample_images/hummus/288902.jpg
|
575 |
+
sample_images/caprese_salad/1375670.jpg
|
576 |
+
sample_images/chicken_wings/726396.jpg
|
577 |
+
sample_images/mussels/3471255.jpg
|
578 |
+
sample_images/tacos/1737798.jpg
|
579 |
+
sample_images/waffles/2923372.jpg
|
580 |
+
sample_images/oysters/3814235.jpg
|
581 |
+
sample_images/chicken_wings/2522049.jpg
|
582 |
+
sample_images/peking_duck/907389.jpg
|
583 |
+
sample_images/fried_rice/332814.jpg
|
584 |
+
sample_images/ceviche/1716967.jpg
|
585 |
+
sample_images/garlic_bread/471541.jpg
|
586 |
+
sample_images/chicken_quesadilla/1872009.jpg
|
587 |
+
sample_images/club_sandwich/797815.jpg
|
588 |
+
sample_images/spaghetti_carbonara/2282781.jpg
|
589 |
+
sample_images/french_fries/1394977.jpg
|
590 |
+
sample_images/shrimp_and_grits/440236.jpg
|
591 |
+
sample_images/edamame/1318975.jpg
|
592 |
+
sample_images/baby_back_ribs/1150028.jpg
|
593 |
+
sample_images/caesar_salad/1348525.jpg
|
594 |
+
sample_images/gnocchi/3193637.jpg
|
595 |
+
sample_images/nachos/101954.jpg
|
596 |
+
sample_images/creme_brulee/47184.jpg
|
597 |
+
sample_images/oysters/2635092.jpg
|
598 |
+
sample_images/steak/66207.jpg
|
599 |
+
sample_images/apple_pie/2214366.jpg
|
600 |
+
sample_images/donuts/1536111.jpg
|
601 |
+
sample_images/oysters/1044823.jpg
|
602 |
+
sample_images/macarons/1529761.jpg
|
603 |
+
sample_images/french_fries/2783225.jpg
|
604 |
+
sample_images/gyoza/448142.jpg
|
605 |
+
sample_images/seaweed_salad/967376.jpg
|
606 |
+
sample_images/fish_and_chips/5705.jpg
|
607 |
+
sample_images/oysters/2682469.jpg
|
608 |
+
sample_images/fried_calamari/2397782.jpg
|
609 |
+
sample_images/oysters/3865179.jpg
|
610 |
+
sample_images/fried_rice/2872060.jpg
|
611 |
+
sample_images/bread_pudding/3434169.jpg
|
612 |
+
sample_images/gnocchi/2402288.jpg
|
613 |
+
sample_images/hamburger/272642.jpg
|
614 |
+
sample_images/cup_cakes/665426.jpg
|
615 |
+
sample_images/strawberry_shortcake/2451314.jpg
|
616 |
+
sample_images/apple_pie/2477191.jpg
|
617 |
+
sample_images/cannoli/2535080.jpg
|
618 |
+
sample_images/hot_dog/3142993.jpg
|
619 |
+
sample_images/garlic_bread/3165078.jpg
|
620 |
+
sample_images/breakfast_burrito/1000920.jpg
|
621 |
+
sample_images/ceviche/442941.jpg
|
622 |
+
sample_images/cheesecake/3278890.jpg
|
623 |
+
sample_images/macarons/3798098.jpg
|
624 |
+
sample_images/onion_rings/1949982.jpg
|
625 |
+
sample_images/strawberry_shortcake/3626999.jpg
|
626 |
+
sample_images/risotto/580259.jpg
|
627 |
+
sample_images/grilled_cheese_sandwich/1475505.jpg
|
628 |
+
sample_images/caesar_salad/1050382.jpg
|
629 |
+
sample_images/sushi/3257589.jpg
|
630 |
+
sample_images/macaroni_and_cheese/610691.jpg
|
631 |
+
sample_images/macaroni_and_cheese/663594.jpg
|
632 |
+
sample_images/beef_carpaccio/499131.jpg
|
633 |
+
sample_images/hot_dog/76618.jpg
|
634 |
+
sample_images/dumplings/3363745.jpg
|
635 |
+
sample_images/hamburger/281733.jpg
|
636 |
+
sample_images/pancakes/420861.jpg
|
637 |
+
sample_images/creme_brulee/829640.jpg
|
638 |
+
sample_images/grilled_salmon/1771963.jpg
|
639 |
+
sample_images/fried_calamari/1123519.jpg
|
640 |
+
sample_images/baby_back_ribs/2272205.jpg
|
641 |
+
sample_images/tacos/1910630.jpg
|
642 |
+
sample_images/cheesecake/2439835.jpg
|
643 |
+
sample_images/baby_back_ribs/1005066.jpg
|
644 |
+
sample_images/fried_calamari/3550738.jpg
|
645 |
+
sample_images/club_sandwich/2643704.jpg
|
646 |
+
sample_images/prime_rib/1283817.jpg
|
647 |
+
sample_images/greek_salad/2151262.jpg
|
648 |
+
sample_images/grilled_cheese_sandwich/1854869.jpg
|
649 |
+
sample_images/panna_cotta/3562574.jpg
|
650 |
+
sample_images/onion_rings/57508.jpg
|
651 |
+
sample_images/bruschetta/2477638.jpg
|
652 |
+
sample_images/panna_cotta/985635.jpg
|
653 |
+
sample_images/fried_calamari/2007862.jpg
|
654 |
+
sample_images/pizza/1220156.jpg
|
655 |
+
sample_images/hamburger/2836933.jpg
|
656 |
+
sample_images/hummus/339879.jpg
|
657 |
+
sample_images/donuts/3049824.jpg
|
658 |
+
sample_images/dumplings/3532122.jpg
|
659 |
+
sample_images/pork_chop/1408421.jpg
|
660 |
+
sample_images/chicken_curry/3050643.jpg
|
661 |
+
sample_images/churros/2562650.jpg
|
662 |
+
sample_images/club_sandwich/3582066.jpg
|
663 |
+
sample_images/tuna_tartare/2116073.jpg
|
664 |
+
sample_images/dumplings/3781725.jpg
|
665 |
+
sample_images/tuna_tartare/3394841.jpg
|
666 |
+
sample_images/carrot_cake/1070211.jpg
|
667 |
+
sample_images/chicken_curry/205916.jpg
|
668 |
+
sample_images/risotto/3668243.jpg
|
669 |
+
sample_images/beef_tartare/2654675.jpg
|
670 |
+
sample_images/eggs_benedict/3516091.jpg
|
671 |
+
sample_images/ceviche/1584989.jpg
|
672 |
+
sample_images/risotto/493827.jpg
|
673 |
+
sample_images/ramen/1476274.jpg
|
674 |
+
sample_images/cheese_plate/1777806.jpg
|
675 |
+
sample_images/gyoza/1391144.jpg
|
676 |
+
sample_images/churros/2037510.jpg
|
677 |
+
sample_images/guacamole/1019363.jpg
|
678 |
+
sample_images/steak/673127.jpg
|
679 |
+
sample_images/fish_and_chips/2583722.jpg
|
680 |
+
sample_images/tuna_tartare/3771542.jpg
|
681 |
+
sample_images/caprese_salad/840906.jpg
|
682 |
+
sample_images/hamburger/1317285.jpg
|
683 |
+
sample_images/chicken_wings/44776.jpg
|
684 |
+
sample_images/grilled_salmon/2023671.jpg
|
685 |
+
sample_images/garlic_bread/1647989.jpg
|
686 |
+
sample_images/poutine/2354170.jpg
|
687 |
+
sample_images/french_toast/331736.jpg
|
688 |
+
sample_images/red_velvet_cake/1373641.jpg
|
689 |
+
sample_images/miso_soup/2699022.jpg
|
690 |
+
sample_images/creme_brulee/216644.jpg
|
691 |
+
sample_images/nachos/1568961.jpg
|
692 |
+
sample_images/french_fries/2737860.jpg
|
693 |
+
sample_images/fish_and_chips/1973869.jpg
|
694 |
+
sample_images/macaroni_and_cheese/2177740.jpg
|
695 |
+
sample_images/fried_calamari/1952068.jpg
|
696 |
+
sample_images/steak/2619782.jpg
|
697 |
+
sample_images/frozen_yogurt/1620424.jpg
|
698 |
+
sample_images/poutine/2205207.jpg
|
699 |
+
sample_images/baklava/1264253.jpg
|
700 |
+
sample_images/cheese_plate/3106234.jpg
|
701 |
+
sample_images/fish_and_chips/210499.jpg
|
702 |
+
sample_images/tiramisu/538788.jpg
|
703 |
+
sample_images/macaroni_and_cheese/2715762.jpg
|
704 |
+
sample_images/panna_cotta/1710156.jpg
|
705 |
+
sample_images/escargots/225653.jpg
|
706 |
+
sample_images/bruschetta/2188008.jpg
|
707 |
+
sample_images/macaroni_and_cheese/2449426.jpg
|
708 |
+
sample_images/guacamole/3223459.jpg
|
709 |
+
sample_images/ramen/326043.jpg
|
710 |
+
sample_images/dumplings/3485502.jpg
|
711 |
+
sample_images/crab_cakes/3670.jpg
|
712 |
+
sample_images/shrimp_and_grits/3197830.jpg
|
713 |
+
sample_images/cannoli/2985044.jpg
|
714 |
+
sample_images/crab_cakes/70919.jpg
|
715 |
+
sample_images/macaroni_and_cheese/714369.jpg
|
716 |
+
sample_images/hot_dog/335113.jpg
|
717 |
+
sample_images/beef_tartare/2265986.jpg
|
718 |
+
sample_images/chicken_wings/76731.jpg
|
719 |
+
sample_images/steak/690477.jpg
|
720 |
+
sample_images/pancakes/359152.jpg
|
721 |
+
sample_images/cheesecake/1092082.jpg
|
722 |
+
sample_images/cheese_plate/3912932.jpg
|
723 |
+
sample_images/club_sandwich/869999.jpg
|
724 |
+
sample_images/caesar_salad/2593985.jpg
|
725 |
+
sample_images/beef_tartare/1743614.jpg
|
726 |
+
sample_images/apple_pie/1854241.jpg
|
727 |
+
sample_images/seaweed_salad/1886174.jpg
|
728 |
+
sample_images/gnocchi/330166.jpg
|
729 |
+
sample_images/shrimp_and_grits/2030234.jpg
|
730 |
+
sample_images/pizza/2003290.jpg
|
731 |
+
sample_images/cannoli/2338677.jpg
|
732 |
+
sample_images/gyoza/3245704.jpg
|
733 |
+
sample_images/bread_pudding/3196664.jpg
|
734 |
+
sample_images/foie_gras/3384537.jpg
|
735 |
+
sample_images/lobster_bisque/2544717.jpg
|
736 |
+
sample_images/mussels/1456992.jpg
|
737 |
+
sample_images/takoyaki/2332481.jpg
|
738 |
+
sample_images/beignets/957130.jpg
|
739 |
+
sample_images/foie_gras/2949484.jpg
|
740 |
+
sample_images/mussels/273189.jpg
|
741 |
+
sample_images/risotto/1226468.jpg
|
742 |
+
sample_images/garlic_bread/661873.jpg
|
743 |
+
sample_images/prime_rib/842936.jpg
|
744 |
+
sample_images/ramen/2339284.jpg
|
745 |
+
sample_images/mussels/556142.jpg
|
746 |
+
sample_images/churros/2371997.jpg
|
747 |
+
sample_images/gyoza/2350002.jpg
|
748 |
+
sample_images/escargots/329198.jpg
|
749 |
+
sample_images/gnocchi/293829.jpg
|
750 |
+
sample_images/apple_pie/1526484.jpg
|
751 |
+
sample_images/caesar_salad/130246.jpg
|
752 |
+
sample_images/lasagna/3609916.jpg
|
753 |
+
sample_images/strawberry_shortcake/3043860.jpg
|
754 |
+
sample_images/hamburger/85915.jpg
|
755 |
+
sample_images/beignets/1242023.jpg
|
756 |
+
sample_images/apple_pie/3720779.jpg
|
757 |
+
sample_images/fish_and_chips/3635042.jpg
|
758 |
+
sample_images/pho/898135.jpg
|
759 |
+
sample_images/peking_duck/704368.jpg
|
760 |
+
sample_images/ceviche/1469050.jpg
|
761 |
+
sample_images/ice_cream/3532895.jpg
|
762 |
+
sample_images/filet_mignon/3802696.jpg
|
763 |
+
sample_images/pancakes/3816498.jpg
|
764 |
+
sample_images/pad_thai/380868.jpg
|
765 |
+
sample_images/seaweed_salad/365450.jpg
|
766 |
+
sample_images/crab_cakes/2704452.jpg
|
767 |
+
sample_images/pulled_pork_sandwich/272941.jpg
|
768 |
+
sample_images/gyoza/2323610.jpg
|
769 |
+
sample_images/beef_carpaccio/2224490.jpg
|
770 |
+
sample_images/ceviche/3406403.jpg
|
771 |
+
sample_images/panna_cotta/3413766.jpg
|
772 |
+
sample_images/onion_rings/2727446.jpg
|
773 |
+
sample_images/pancakes/1042445.jpg
|
774 |
+
sample_images/cheesecake/2522718.jpg
|
775 |
+
sample_images/peking_duck/1893881.jpg
|
776 |
+
sample_images/bruschetta/3092131.jpg
|
777 |
+
sample_images/takoyaki/3282391.jpg
|
778 |
+
sample_images/french_toast/395267.jpg
|
779 |
+
sample_images/apple_pie/812047.jpg
|
780 |
+
sample_images/waffles/153584.jpg
|
781 |
+
sample_images/baklava/1029051.jpg
|
782 |
+
sample_images/sushi/1654256.jpg
|
783 |
+
sample_images/hummus/709420.jpg
|
784 |
+
sample_images/beef_tartare/683016.jpg
|
785 |
+
sample_images/cheese_plate/3544634.jpg
|
786 |
+
sample_images/frozen_yogurt/25464.jpg
|
787 |
+
sample_images/fried_rice/855247.jpg
|
788 |
+
sample_images/bread_pudding/3871497.jpg
|
789 |
+
sample_images/escargots/3057366.jpg
|
790 |
+
sample_images/lobster_roll_sandwich/962425.jpg
|
791 |
+
sample_images/omelette/281036.jpg
|
792 |
+
sample_images/deviled_eggs/1923960.jpg
|
793 |
+
sample_images/hot_and_sour_soup/2760407.jpg
|
794 |
+
sample_images/prime_rib/1520728.jpg
|
795 |
+
sample_images/cup_cakes/206408.jpg
|
796 |
+
sample_images/chicken_curry/1560488.jpg
|
797 |
+
sample_images/beef_carpaccio/2502843.jpg
|
798 |
+
sample_images/french_fries/3184259.jpg
|
799 |
+
sample_images/tacos/1777864.jpg
|
800 |
+
sample_images/hot_and_sour_soup/3174858.jpg
|
801 |
+
sample_images/tiramisu/524973.jpg
|
802 |
+
sample_images/pad_thai/788616.jpg
|
803 |
+
sample_images/greek_salad/2004121.jpg
|
804 |
+
sample_images/bread_pudding/120781.jpg
|
805 |
+
sample_images/ravioli/655833.jpg
|
806 |
+
sample_images/ceviche/2328743.jpg
|
807 |
+
sample_images/pancakes/253922.jpg
|
808 |
+
sample_images/mussels/1445945.jpg
|
809 |
+
sample_images/hot_dog/2310992.jpg
|
810 |
+
sample_images/pulled_pork_sandwich/2148902.jpg
|
811 |
+
sample_images/huevos_rancheros/1920552.jpg
|
812 |
+
sample_images/chocolate_mousse/2310232.jpg
|
813 |
+
sample_images/pulled_pork_sandwich/3825873.jpg
|
814 |
+
sample_images/beef_tartare/2884746.jpg
|
815 |
+
sample_images/lobster_bisque/2358791.jpg
|
816 |
+
sample_images/macaroni_and_cheese/3399102.jpg
|
817 |
+
sample_images/sashimi/1070787.jpg
|
818 |
+
sample_images/beef_carpaccio/1044312.jpg
|
819 |
+
sample_images/baby_back_ribs/3581600.jpg
|
820 |
+
sample_images/tiramisu/1662188.jpg
|
821 |
+
sample_images/steak/912108.jpg
|
822 |
+
sample_images/churros/776000.jpg
|
823 |
+
sample_images/french_toast/3513889.jpg
|
824 |
+
sample_images/pulled_pork_sandwich/992038.jpg
|
825 |
+
sample_images/lobster_bisque/65607.jpg
|
826 |
+
sample_images/pork_chop/3553986.jpg
|
827 |
+
sample_images/shrimp_and_grits/1870791.jpg
|
828 |
+
sample_images/baklava/558342.jpg
|
829 |
+
sample_images/poutine/756270.jpg
|
830 |
+
sample_images/ravioli/237327.jpg
|
831 |
+
sample_images/seaweed_salad/2678051.jpg
|
832 |
+
sample_images/cheese_plate/2967561.jpg
|
833 |
+
sample_images/cheese_plate/33708.jpg
|
834 |
+
sample_images/grilled_cheese_sandwich/1101184.jpg
|
835 |
+
sample_images/lobster_bisque/3282626.jpg
|
836 |
+
sample_images/frozen_yogurt/3266829.jpg
|
837 |
+
sample_images/beef_carpaccio/3868777.jpg
|
838 |
+
sample_images/ceviche/1863783.jpg
|
839 |
+
sample_images/chocolate_cake/126340.jpg
|
840 |
+
sample_images/samosa/1024186.jpg
|
841 |
+
sample_images/baby_back_ribs/1427390.jpg
|
842 |
+
sample_images/nachos/1710310.jpg
|
843 |
+
sample_images/grilled_cheese_sandwich/2974529.jpg
|
844 |
+
sample_images/fried_rice/2763606.jpg
|
845 |
+
sample_images/crab_cakes/2724489.jpg
|
846 |
+
sample_images/beet_salad/477056.jpg
|
847 |
+
sample_images/cup_cakes/2387290.jpg
|
848 |
+
sample_images/french_onion_soup/2729004.jpg
|
849 |
+
sample_images/gnocchi/2746458.jpg
|
850 |
+
sample_images/poutine/1215105.jpg
|
851 |
+
sample_images/guacamole/346511.jpg
|
852 |
+
sample_images/tacos/281538.jpg
|
853 |
+
sample_images/tacos/3308866.jpg
|
854 |
+
sample_images/edamame/3031267.jpg
|
855 |
+
sample_images/cannoli/3830551.jpg
|
856 |
+
sample_images/red_velvet_cake/3696503.jpg
|
857 |
+
sample_images/lobster_roll_sandwich/785083.jpg
|
858 |
+
sample_images/risotto/504168.jpg
|
859 |
+
sample_images/prime_rib/1816297.jpg
|
860 |
+
sample_images/lobster_bisque/2979039.jpg
|
861 |
+
sample_images/bread_pudding/3058253.jpg
|
862 |
+
sample_images/oysters/1717597.jpg
|
863 |
+
sample_images/grilled_salmon/3149788.jpg
|
864 |
+
sample_images/croque_madame/3556471.jpg
|
865 |
+
sample_images/frozen_yogurt/647326.jpg
|
866 |
+
sample_images/chocolate_mousse/1617802.jpg
|
867 |
+
sample_images/onion_rings/2254620.jpg
|
868 |
+
sample_images/falafel/3376916.jpg
|
869 |
+
sample_images/cheesecake/3476761.jpg
|
870 |
+
sample_images/takoyaki/377590.jpg
|
871 |
+
sample_images/chicken_quesadilla/2364093.jpg
|
872 |
+
sample_images/churros/3531551.jpg
|
873 |
+
sample_images/poutine/3050934.jpg
|
874 |
+
sample_images/hummus/2735302.jpg
|
875 |
+
sample_images/ravioli/1290195.jpg
|
876 |
+
sample_images/gyoza/3433423.jpg
|
877 |
+
sample_images/gyoza/403076.jpg
|
878 |
+
sample_images/caprese_salad/2930536.jpg
|
879 |
+
sample_images/huevos_rancheros/3900589.jpg
|
880 |
+
sample_images/creme_brulee/2000973.jpg
|
881 |
+
sample_images/eggs_benedict/3792846.jpg
|
882 |
+
sample_images/macaroni_and_cheese/3519796.jpg
|
883 |
+
sample_images/croque_madame/3584334.jpg
|
884 |
+
sample_images/bread_pudding/3333038.jpg
|
885 |
+
sample_images/caesar_salad/1918486.jpg
|
886 |
+
sample_images/poutine/1594696.jpg
|
887 |
+
sample_images/macaroni_and_cheese/3155068.jpg
|
888 |
+
sample_images/samosa/1088007.jpg
|
889 |
+
sample_images/takoyaki/1161535.jpg
|
890 |
+
sample_images/chicken_wings/1493300.jpg
|
891 |
+
sample_images/filet_mignon/1666949.jpg
|
892 |
+
sample_images/peking_duck/293439.jpg
|
893 |
+
sample_images/cheese_plate/3293044.jpg
|
894 |
+
sample_images/tiramisu/152790.jpg
|
895 |
+
sample_images/carrot_cake/3889387.jpg
|
896 |
+
sample_images/carrot_cake/2643464.jpg
|
897 |
+
sample_images/macaroni_and_cheese/2760529.jpg
|
898 |
+
sample_images/chicken_quesadilla/1994905.jpg
|
899 |
+
sample_images/ravioli/2106789.jpg
|
900 |
+
sample_images/grilled_cheese_sandwich/672855.jpg
|
901 |
+
sample_images/grilled_cheese_sandwich/2520949.jpg
|
902 |
+
sample_images/grilled_cheese_sandwich/3044491.jpg
|
903 |
+
sample_images/sashimi/3670207.jpg
|
904 |
+
sample_images/bread_pudding/1404136.jpg
|
905 |
+
sample_images/prime_rib/1160521.jpg
|
906 |
+
sample_images/filet_mignon/384251.jpg
|
907 |
+
sample_images/caprese_salad/3352476.jpg
|
908 |
+
sample_images/french_toast/2017411.jpg
|
909 |
+
sample_images/creme_brulee/2766155.jpg
|
910 |
+
sample_images/chicken_quesadilla/3731711.jpg
|
911 |
+
sample_images/risotto/483749.jpg
|
912 |
+
sample_images/poutine/3047736.jpg
|
913 |
+
sample_images/churros/2697646.jpg
|
914 |
+
sample_images/french_toast/253913.jpg
|
915 |
+
sample_images/beef_tartare/3718617.jpg
|
916 |
+
sample_images/onion_rings/774706.jpg
|
917 |
+
sample_images/creme_brulee/3379434.jpg
|
918 |
+
sample_images/pho/149799.jpg
|
919 |
+
sample_images/grilled_cheese_sandwich/1484401.jpg
|
920 |
+
sample_images/deviled_eggs/55117.jpg
|
921 |
+
sample_images/strawberry_shortcake/397562.jpg
|
922 |
+
sample_images/panna_cotta/3067767.jpg
|
923 |
+
sample_images/french_toast/1606269.jpg
|
924 |
+
sample_images/pancakes/3889048.jpg
|
925 |
+
sample_images/macaroni_and_cheese/1027098.jpg
|
926 |
+
sample_images/bread_pudding/3306095.jpg
|
927 |
+
sample_images/red_velvet_cake/97406.jpg
|
928 |
+
sample_images/bibimbap/573996.jpg
|
929 |
+
sample_images/cheese_plate/564929.jpg
|
930 |
+
sample_images/edamame/3432193.jpg
|
931 |
+
sample_images/chocolate_mousse/1042851.jpg
|
932 |
+
sample_images/cannoli/1982314.jpg
|
933 |
+
sample_images/greek_salad/222202.jpg
|
934 |
+
sample_images/gnocchi/3832332.jpg
|
935 |
+
sample_images/frozen_yogurt/2720129.jpg
|
936 |
+
sample_images/fish_and_chips/626758.jpg
|
937 |
+
sample_images/garlic_bread/3177101.jpg
|
938 |
+
sample_images/breakfast_burrito/3750414.jpg
|
939 |
+
sample_images/macarons/3261547.jpg
|
940 |
+
sample_images/ceviche/2013289.jpg
|
941 |
+
sample_images/panna_cotta/3001135.jpg
|
942 |
+
sample_images/hot_dog/1596409.jpg
|
943 |
+
sample_images/caprese_salad/3753434.jpg
|
944 |
+
sample_images/french_onion_soup/962989.jpg
|
945 |
+
sample_images/samosa/1754253.jpg
|
946 |
+
sample_images/pulled_pork_sandwich/985218.jpg
|
947 |
+
sample_images/bread_pudding/1658714.jpg
|
948 |
+
sample_images/caesar_salad/1655236.jpg
|
949 |
+
sample_images/filet_mignon/2861763.jpg
|
950 |
+
sample_images/miso_soup/3316198.jpg
|
951 |
+
sample_images/waffles/1055825.jpg
|
952 |
+
sample_images/sashimi/79501.jpg
|
953 |
+
sample_images/ice_cream/669677.jpg
|
954 |
+
sample_images/red_velvet_cake/195989.jpg
|
955 |
+
sample_images/bibimbap/216516.jpg
|
956 |
+
sample_images/scallops/986280.jpg
|
957 |
+
sample_images/pancakes/3239937.jpg
|
958 |
+
sample_images/chocolate_cake/2372754.jpg
|
959 |
+
sample_images/bruschetta/552733.jpg
|
960 |
+
sample_images/frozen_yogurt/1155025.jpg
|
961 |
+
sample_images/shrimp_and_grits/433649.jpg
|
962 |
+
sample_images/donuts/3234687.jpg
|
963 |
+
sample_images/beef_carpaccio/3156761.jpg
|
964 |
+
sample_images/french_toast/122362.jpg
|
965 |
+
sample_images/creme_brulee/2271190.jpg
|
966 |
+
sample_images/apple_pie/3809728.jpg
|
967 |
+
sample_images/french_toast/2069063.jpg
|
968 |
+
sample_images/filet_mignon/3270177.jpg
|
969 |
+
sample_images/miso_soup/312662.jpg
|
970 |
+
sample_images/cannoli/1220585.jpg
|
971 |
+
sample_images/carrot_cake/3000921.jpg
|
972 |
+
sample_images/gnocchi/343838.jpg
|
973 |
+
sample_images/hot_dog/1154965.jpg
|
974 |
+
sample_images/ice_cream/33485.jpg
|
975 |
+
sample_images/beef_tartare/3780975.jpg
|
976 |
+
sample_images/nachos/3554143.jpg
|
977 |
+
sample_images/nachos/3234783.jpg
|
978 |
+
sample_images/pork_chop/280765.jpg
|
979 |
+
sample_images/bread_pudding/614955.jpg
|
980 |
+
sample_images/baklava/120691.jpg
|
981 |
+
sample_images/pho/2236360.jpg
|
982 |
+
sample_images/carrot_cake/2524264.jpg
|
983 |
+
sample_images/shrimp_and_grits/2025628.jpg
|
984 |
+
sample_images/dumplings/2834398.jpg
|
985 |
+
sample_images/frozen_yogurt/1666374.jpg
|
986 |
+
sample_images/bread_pudding/2118042.jpg
|
987 |
+
sample_images/french_fries/2858185.jpg
|
988 |
+
sample_images/pork_chop/1597626.jpg
|
989 |
+
sample_images/lobster_roll_sandwich/1309325.jpg
|
990 |
+
sample_images/churros/3799876.jpg
|
991 |
+
sample_images/cheesecake/972877.jpg
|
992 |
+
sample_images/french_toast/1008722.jpg
|
993 |
+
sample_images/carrot_cake/3354237.jpg
|
994 |
+
sample_images/pho/344698.jpg
|
995 |
+
sample_images/fried_calamari/735945.jpg
|
996 |
+
sample_images/panna_cotta/2105260.jpg
|
997 |
+
sample_images/sashimi/3090849.jpg
|
998 |
+
sample_images/omelette/1019294.jpg
|
999 |
+
sample_images/deviled_eggs/1446781.jpg
|
1000 |
+
sample_images/chicken_wings/2619083.jpg
|
src/sample_loader.py
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import os
|
3 |
+
from typing import Tuple
|
4 |
+
|
5 |
+
|
6 |
+
SAMPLE_IMAGE_S3_PATH = os.getenv("SAMPLE_IMAGE_S3_PATH", ".")
|
7 |
+
|
8 |
+
|
9 |
+
def get_random_sample_image() -> Tuple[str, str]:
|
10 |
+
rnd_img_sub_path: str = np.random.choice(
|
11 |
+
np.loadtxt("sample_list.txt", dtype=object)
|
12 |
+
)
|
13 |
+
rnd_img = os.path.join(SAMPLE_IMAGE_S3_PATH, rnd_img_sub_path)
|
14 |
+
label = rnd_img.split("/")[-2].replace("_", " ").title()
|
15 |
+
return rnd_img, label
|