Spaces:
Build error
Build error
Jon Solow
commited on
Commit
·
f68d424
1
Parent(s):
0dc3e49
Get app functional locally
Browse files- src/huggingface/__init__.py +0 -0
- src/huggingface/handler.py +38 -0
- src/huggingface/labels.py +103 -0
- src/huggingface/model.py +4 -0
- src/huggingface/predict.py +23 -0
- src/labels.txt +0 -101
- src/model_client.py +4 -54
- src/requirements.in +2 -0
- src/requirements.txt +125 -2
- src/start.sh +0 -1
src/huggingface/__init__.py
ADDED
|
File without changes
|
src/huggingface/handler.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from skimage.io import imread
|
| 2 |
+
from io import BytesIO
|
| 3 |
+
import numpy as np
|
| 4 |
+
import urllib
|
| 5 |
+
from tensorflow.keras.utils import array_to_img, img_to_array
|
| 6 |
+
|
| 7 |
+
from PIL import Image
|
| 8 |
+
|
| 9 |
+
def preprocess(img: np.ndarray) -> np.ndarray:
|
| 10 |
+
img = array_to_img(img, scale=False)
|
| 11 |
+
img = img.resize((224, 224))
|
| 12 |
+
img = img_to_array(img)
|
| 13 |
+
return img / 255.0
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
def handle_url(url: str) -> np.ndarray:
|
| 17 |
+
try:
|
| 18 |
+
img_data = imread(url)
|
| 19 |
+
except Exception:
|
| 20 |
+
req = urllib.request.Request(url, headers={"User-Agent": "Magic Browser"})
|
| 21 |
+
con = urllib.request.urlopen(req)
|
| 22 |
+
img_data = imread(con)
|
| 23 |
+
processed_img = preprocess(img_data)
|
| 24 |
+
img_array = np.array([processed_img])
|
| 25 |
+
return img_array
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def read_imagefile(file):
|
| 29 |
+
file_bytes = BytesIO(file)
|
| 30 |
+
image = Image.open(file_bytes)
|
| 31 |
+
return image
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def handle_file(file) -> np.ndarray:
|
| 35 |
+
img_data = read_imagefile(file)
|
| 36 |
+
processed_img = preprocess(img_data)
|
| 37 |
+
img_array = np.array([processed_img])
|
| 38 |
+
return img_array
|
src/huggingface/labels.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
CLASS_LABELS = [
|
| 2 |
+
"Apple pie",
|
| 3 |
+
"Baby back ribs",
|
| 4 |
+
"Baklava",
|
| 5 |
+
"Beef carpaccio",
|
| 6 |
+
"Beef tartare",
|
| 7 |
+
"Beet salad",
|
| 8 |
+
"Beignets",
|
| 9 |
+
"Bibimbap",
|
| 10 |
+
"Bread pudding",
|
| 11 |
+
"Breakfast burrito",
|
| 12 |
+
"Bruschetta",
|
| 13 |
+
"Caesar salad",
|
| 14 |
+
"Cannoli",
|
| 15 |
+
"Caprese salad",
|
| 16 |
+
"Carrot cake",
|
| 17 |
+
"Ceviche",
|
| 18 |
+
"Cheesecake",
|
| 19 |
+
"Cheese plate",
|
| 20 |
+
"Chicken curry",
|
| 21 |
+
"Chicken quesadilla",
|
| 22 |
+
"Chicken wings",
|
| 23 |
+
"Chocolate cake",
|
| 24 |
+
"Chocolate mousse",
|
| 25 |
+
"Churros",
|
| 26 |
+
"Clam chowder",
|
| 27 |
+
"Club sandwich",
|
| 28 |
+
"Crab cakes",
|
| 29 |
+
"Creme brulee",
|
| 30 |
+
"Croque madame",
|
| 31 |
+
"Cup cakes",
|
| 32 |
+
"Deviled eggs",
|
| 33 |
+
"Donuts",
|
| 34 |
+
"Dumplings",
|
| 35 |
+
"Edamame",
|
| 36 |
+
"Eggs benedict",
|
| 37 |
+
"Escargots",
|
| 38 |
+
"Falafel",
|
| 39 |
+
"Filet mignon",
|
| 40 |
+
"Fish and chips",
|
| 41 |
+
"Foie gras",
|
| 42 |
+
"French fries",
|
| 43 |
+
"French onion soup",
|
| 44 |
+
"French toast",
|
| 45 |
+
"Fried calamari",
|
| 46 |
+
"Fried rice",
|
| 47 |
+
"Frozen yogurt",
|
| 48 |
+
"Garlic bread",
|
| 49 |
+
"Gnocchi",
|
| 50 |
+
"Greek salad",
|
| 51 |
+
"Grilled cheese sandwich",
|
| 52 |
+
"Grilled salmon",
|
| 53 |
+
"Guacamole",
|
| 54 |
+
"Gyoza",
|
| 55 |
+
"Hamburger",
|
| 56 |
+
"Hot and sour soup",
|
| 57 |
+
"Hot dog",
|
| 58 |
+
"Huevos rancheros",
|
| 59 |
+
"Hummus",
|
| 60 |
+
"Ice cream",
|
| 61 |
+
"Lasagna",
|
| 62 |
+
"Lobster bisque",
|
| 63 |
+
"Lobster roll sandwich",
|
| 64 |
+
"Macaroni and cheese",
|
| 65 |
+
"Macarons",
|
| 66 |
+
"Miso soup",
|
| 67 |
+
"Mussels",
|
| 68 |
+
"Nachos",
|
| 69 |
+
"Omelette",
|
| 70 |
+
"Onion rings",
|
| 71 |
+
"Oysters",
|
| 72 |
+
"Pad thai",
|
| 73 |
+
"Paella",
|
| 74 |
+
"Pancakes",
|
| 75 |
+
"Panna cotta",
|
| 76 |
+
"Peking duck",
|
| 77 |
+
"Pho",
|
| 78 |
+
"Pizza",
|
| 79 |
+
"Pork chop",
|
| 80 |
+
"Poutine",
|
| 81 |
+
"Prime rib",
|
| 82 |
+
"Pulled pork sandwich",
|
| 83 |
+
"Ramen",
|
| 84 |
+
"Ravioli",
|
| 85 |
+
"Red velvet cake",
|
| 86 |
+
"Risotto",
|
| 87 |
+
"Samosa",
|
| 88 |
+
"Sashimi",
|
| 89 |
+
"Scallops",
|
| 90 |
+
"Seaweed salad",
|
| 91 |
+
"Shrimp and grits",
|
| 92 |
+
"Spaghetti bolognese",
|
| 93 |
+
"Spaghetti carbonara",
|
| 94 |
+
"Spring rolls",
|
| 95 |
+
"Steak",
|
| 96 |
+
"Strawberry shortcake",
|
| 97 |
+
"Sushi",
|
| 98 |
+
"Tacos",
|
| 99 |
+
"Takoyaki",
|
| 100 |
+
"Tiramisu",
|
| 101 |
+
"Tuna tartare",
|
| 102 |
+
"Waffles",
|
| 103 |
+
]
|
src/huggingface/model.py
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from huggingface_hub import from_pretrained_keras
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
MODEL = from_pretrained_keras("jsolow/grubguesser")
|
src/huggingface/predict.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .model import MODEL
|
| 2 |
+
from .handler import handle_file, handle_url
|
| 3 |
+
from .labels import CLASS_LABELS
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
def predict_model(img_array, n_top_guesses:int = 10):
|
| 8 |
+
class_prob = MODEL.predict(img_array)
|
| 9 |
+
top_values_index = (-class_prob).argsort()[0][:n_top_guesses]
|
| 10 |
+
top_guesses = [CLASS_LABELS[i].title() for i in top_values_index]
|
| 11 |
+
return top_guesses
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
def predict_file(file):
|
| 15 |
+
handled_array = handle_file(file)
|
| 16 |
+
return predict_model(handled_array)
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def predict_url(url: str):
|
| 21 |
+
handled_array = handle_url(url)
|
| 22 |
+
return predict_model(handled_array)
|
| 23 |
+
|
src/labels.txt
DELETED
|
@@ -1,101 +0,0 @@
|
|
| 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/model_client.py
CHANGED
|
@@ -9,45 +9,8 @@ from django.core.files.uploadedfile import InMemoryUploadedFile, TemporaryUpload
|
|
| 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]:
|
|
@@ -66,7 +29,8 @@ def url_image_vars(
|
|
| 66 |
elif isinstance(input_img, str):
|
| 67 |
top_guesses = predict_url(input_img)
|
| 68 |
elif isinstance(input_img, (InMemoryUploadedFile, TemporaryUploadedFile)):
|
| 69 |
-
|
|
|
|
| 70 |
else:
|
| 71 |
logging.error(f"Unknown input type: {type(input_img)=}")
|
| 72 |
top_guesses = ["Unknown Input Type", "", "", "", ""]
|
|
@@ -75,18 +39,4 @@ def url_image_vars(
|
|
| 75 |
|
| 76 |
|
| 77 |
def is_healthy() -> bool:
|
| 78 |
-
|
| 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
|
|
|
|
| 9 |
|
| 10 |
import logging
|
| 11 |
|
| 12 |
+
from huggingface.predict import predict_file, predict_url
|
| 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
|
| 16 |
def get_color_labels(guesses: List[str], actual_label: Optional[str]) -> List[str]:
|
|
|
|
| 29 |
elif isinstance(input_img, str):
|
| 30 |
top_guesses = predict_url(input_img)
|
| 31 |
elif isinstance(input_img, (InMemoryUploadedFile, TemporaryUploadedFile)):
|
| 32 |
+
input_img.seek(0)
|
| 33 |
+
top_guesses = predict_file(input_img.read())
|
| 34 |
else:
|
| 35 |
logging.error(f"Unknown input type: {type(input_img)=}")
|
| 36 |
top_guesses = ["Unknown Input Type", "", "", "", ""]
|
|
|
|
| 39 |
|
| 40 |
|
| 41 |
def is_healthy() -> bool:
|
| 42 |
+
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/requirements.in
CHANGED
|
@@ -6,3 +6,5 @@ joblib
|
|
| 6 |
whitenoise
|
| 7 |
pillow
|
| 8 |
transformers
|
|
|
|
|
|
|
|
|
| 6 |
whitenoise
|
| 7 |
pillow
|
| 8 |
transformers
|
| 9 |
+
tensorflow
|
| 10 |
+
scikit-image
|
src/requirements.txt
CHANGED
|
@@ -4,10 +4,18 @@
|
|
| 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
|
|
@@ -18,26 +26,96 @@ 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
pyyaml==6.0
|
| 42 |
# via
|
| 43 |
# huggingface-hub
|
|
@@ -48,9 +126,41 @@ 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
|
|
@@ -63,10 +173,23 @@ typing-extensions==4.5.0
|
|
| 63 |
# via
|
| 64 |
# asgiref
|
| 65 |
# huggingface-hub
|
|
|
|
| 66 |
urllib3==1.26.15
|
| 67 |
-
# via
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|
|
|
|
| 4 |
#
|
| 5 |
# pip-compile --resolver=backtracking requirements.in
|
| 6 |
#
|
| 7 |
+
absl-py==1.4.0
|
| 8 |
+
# via
|
| 9 |
+
# tensorboard
|
| 10 |
+
# tensorflow
|
| 11 |
asgiref==3.7.1
|
| 12 |
# via django
|
| 13 |
+
astunparse==1.6.3
|
| 14 |
+
# via tensorflow
|
| 15 |
backports-zoneinfo==0.2.1
|
| 16 |
# via django
|
| 17 |
+
cachetools==5.3.0
|
| 18 |
+
# via google-auth
|
| 19 |
certifi==2023.5.7
|
| 20 |
# via requests
|
| 21 |
charset-normalizer==3.1.0
|
|
|
|
| 26 |
# via
|
| 27 |
# huggingface-hub
|
| 28 |
# transformers
|
| 29 |
+
flatbuffers==23.5.26
|
| 30 |
+
# via tensorflow
|
| 31 |
fsspec==2023.5.0
|
| 32 |
# via huggingface-hub
|
| 33 |
+
gast==0.4.0
|
| 34 |
+
# via tensorflow
|
| 35 |
+
google-auth==2.19.0
|
| 36 |
+
# via
|
| 37 |
+
# google-auth-oauthlib
|
| 38 |
+
# tensorboard
|
| 39 |
+
google-auth-oauthlib==1.0.0
|
| 40 |
+
# via tensorboard
|
| 41 |
+
google-pasta==0.2.0
|
| 42 |
+
# via tensorflow
|
| 43 |
+
grpcio==1.54.2
|
| 44 |
+
# via
|
| 45 |
+
# tensorboard
|
| 46 |
+
# tensorflow
|
| 47 |
gunicorn==20.1.0
|
| 48 |
# via -r requirements.in
|
| 49 |
+
h5py==3.8.0
|
| 50 |
+
# via tensorflow
|
| 51 |
huggingface-hub==0.14.1
|
| 52 |
# via transformers
|
| 53 |
idna==3.4
|
| 54 |
# via requests
|
| 55 |
+
imageio==2.29.0
|
| 56 |
+
# via scikit-image
|
| 57 |
+
importlib-metadata==6.6.0
|
| 58 |
+
# via markdown
|
| 59 |
+
jax==0.4.10
|
| 60 |
+
# via tensorflow
|
| 61 |
joblib==1.2.0
|
| 62 |
# via -r requirements.in
|
| 63 |
+
keras==2.12.0
|
| 64 |
+
# via tensorflow
|
| 65 |
+
libclang==16.0.0
|
| 66 |
+
# via tensorflow
|
| 67 |
+
markdown==3.4.3
|
| 68 |
+
# via tensorboard
|
| 69 |
+
markupsafe==2.1.2
|
| 70 |
+
# via werkzeug
|
| 71 |
+
ml-dtypes==0.1.0
|
| 72 |
+
# via jax
|
| 73 |
+
networkx==3.1
|
| 74 |
+
# via scikit-image
|
| 75 |
numpy==1.23.5
|
| 76 |
# via
|
| 77 |
# -r requirements.in
|
| 78 |
+
# h5py
|
| 79 |
+
# imageio
|
| 80 |
+
# jax
|
| 81 |
+
# ml-dtypes
|
| 82 |
+
# opt-einsum
|
| 83 |
+
# pywavelets
|
| 84 |
+
# scikit-image
|
| 85 |
+
# scipy
|
| 86 |
+
# tensorboard
|
| 87 |
+
# tensorflow
|
| 88 |
+
# tifffile
|
| 89 |
# transformers
|
| 90 |
+
oauthlib==3.2.2
|
| 91 |
+
# via requests-oauthlib
|
| 92 |
+
opt-einsum==3.3.0
|
| 93 |
+
# via
|
| 94 |
+
# jax
|
| 95 |
+
# tensorflow
|
| 96 |
packaging==23.1
|
| 97 |
# via
|
| 98 |
# huggingface-hub
|
| 99 |
+
# scikit-image
|
| 100 |
+
# tensorflow
|
| 101 |
# transformers
|
| 102 |
pillow==9.5.0
|
| 103 |
+
# via
|
| 104 |
+
# -r requirements.in
|
| 105 |
+
# imageio
|
| 106 |
+
# scikit-image
|
| 107 |
+
protobuf==4.23.2
|
| 108 |
+
# via
|
| 109 |
+
# tensorboard
|
| 110 |
+
# tensorflow
|
| 111 |
+
pyasn1==0.5.0
|
| 112 |
+
# via
|
| 113 |
+
# pyasn1-modules
|
| 114 |
+
# rsa
|
| 115 |
+
pyasn1-modules==0.3.0
|
| 116 |
+
# via google-auth
|
| 117 |
+
pywavelets==1.4.1
|
| 118 |
+
# via scikit-image
|
| 119 |
pyyaml==6.0
|
| 120 |
# via
|
| 121 |
# huggingface-hub
|
|
|
|
| 126 |
# via
|
| 127 |
# -r requirements.in
|
| 128 |
# huggingface-hub
|
| 129 |
+
# requests-oauthlib
|
| 130 |
+
# tensorboard
|
| 131 |
# transformers
|
| 132 |
+
requests-oauthlib==1.3.1
|
| 133 |
+
# via google-auth-oauthlib
|
| 134 |
+
rsa==4.9
|
| 135 |
+
# via google-auth
|
| 136 |
+
scikit-image==0.19.3
|
| 137 |
+
# via -r requirements.in
|
| 138 |
+
scipy==1.10.1
|
| 139 |
+
# via
|
| 140 |
+
# jax
|
| 141 |
+
# scikit-image
|
| 142 |
+
six==1.16.0
|
| 143 |
+
# via
|
| 144 |
+
# astunparse
|
| 145 |
+
# google-auth
|
| 146 |
+
# google-pasta
|
| 147 |
+
# tensorflow
|
| 148 |
sqlparse==0.4.4
|
| 149 |
# via django
|
| 150 |
+
tensorboard==2.12.3
|
| 151 |
+
# via tensorflow
|
| 152 |
+
tensorboard-data-server==0.7.0
|
| 153 |
+
# via tensorboard
|
| 154 |
+
tensorflow==2.12.0
|
| 155 |
+
# via -r requirements.in
|
| 156 |
+
tensorflow-estimator==2.12.0
|
| 157 |
+
# via tensorflow
|
| 158 |
+
tensorflow-io-gcs-filesystem==0.32.0
|
| 159 |
+
# via tensorflow
|
| 160 |
+
termcolor==2.3.0
|
| 161 |
+
# via tensorflow
|
| 162 |
+
tifffile==2023.4.12
|
| 163 |
+
# via scikit-image
|
| 164 |
tokenizers==0.13.3
|
| 165 |
# via transformers
|
| 166 |
tqdm==4.65.0
|
|
|
|
| 173 |
# via
|
| 174 |
# asgiref
|
| 175 |
# huggingface-hub
|
| 176 |
+
# tensorflow
|
| 177 |
urllib3==1.26.15
|
| 178 |
+
# via
|
| 179 |
+
# google-auth
|
| 180 |
+
# requests
|
| 181 |
+
werkzeug==2.3.4
|
| 182 |
+
# via tensorboard
|
| 183 |
+
wheel==0.40.0
|
| 184 |
+
# via
|
| 185 |
+
# astunparse
|
| 186 |
+
# tensorboard
|
| 187 |
whitenoise==6.4.0
|
| 188 |
# via -r requirements.in
|
| 189 |
+
wrapt==1.14.1
|
| 190 |
+
# via tensorflow
|
| 191 |
+
zipp==3.15.0
|
| 192 |
+
# via importlib-metadata
|
| 193 |
|
| 194 |
# The following packages are considered to be unsafe in a requirements file:
|
| 195 |
# setuptools
|
src/start.sh
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
python3 -m uvicorn main:app --workers 1 --host 0.0.0.0 --port 7860
|
|
|
|
|
|