JbIPS
commited on
Commit
•
4ac4676
1
Parent(s):
3638322
Fix repo structure
Browse files- app/backend/Dockerfile +0 -15
- app/backend/__pycache__/main.cpython-38.pyc +0 -0
- app/backend/main.py +0 -40
- app/backend/race_names.json +0 -1
- app/backend/requirements.txt +0 -5
- app/docker-compose.yml +0 -18
- app/frontend/Dockerfile +0 -14
- app/frontend/app.py +0 -50
- app/frontend/requirements.txt +0 -2
- saved_model/keras_metadata.pb → keras_metadata.pb +0 -0
- race_names.json +0 -1
- saved_model/saved_model.pb → saved_model.pb +0 -0
- {saved_model/variables → variables}/variables.data-00000-of-00001 +0 -0
- {saved_model/variables → variables}/variables.index +0 -0
app/backend/Dockerfile
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
# backend/Dockerfile
|
2 |
-
|
3 |
-
FROM tensorflow/tensorflow:latest-gpu
|
4 |
-
|
5 |
-
COPY requirements.txt app/requirements.txt
|
6 |
-
|
7 |
-
WORKDIR /app
|
8 |
-
|
9 |
-
RUN pip install -r requirements.txt
|
10 |
-
|
11 |
-
COPY . /app
|
12 |
-
|
13 |
-
EXPOSE 8000
|
14 |
-
|
15 |
-
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000" , "--reload"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/backend/__pycache__/main.cpython-38.pyc
DELETED
Binary file (1.2 kB)
|
|
app/backend/main.py
DELETED
@@ -1,40 +0,0 @@
|
|
1 |
-
import uvicorn
|
2 |
-
import json
|
3 |
-
import requests
|
4 |
-
import numpy as np
|
5 |
-
import tensorflow as tf
|
6 |
-
from io import BytesIO
|
7 |
-
from tensorflow import keras
|
8 |
-
from fastapi import FastAPI
|
9 |
-
from PIL import Image
|
10 |
-
from pydantic import BaseModel
|
11 |
-
|
12 |
-
race_file = open('race_names.json', 'r')
|
13 |
-
race_names = json.load(race_file)
|
14 |
-
|
15 |
-
image_size = (180, 180)
|
16 |
-
|
17 |
-
app = FastAPI()
|
18 |
-
|
19 |
-
model = keras.models.load_model('naive_model')
|
20 |
-
|
21 |
-
|
22 |
-
@app.get("/prediction")
|
23 |
-
def get_prediction(q: str):
|
24 |
-
response = requests.get(q)
|
25 |
-
img = Image.open(BytesIO(response.content)).resize((180, 180))
|
26 |
-
img_array = keras.preprocessing.image.img_to_array(img)
|
27 |
-
img_array = tf.expand_dims(img_array, 0) # Create batch axis
|
28 |
-
|
29 |
-
predictions = model.predict(img_array)
|
30 |
-
|
31 |
-
top4 = predictions.argsort()[0, -1:-5:-1]
|
32 |
-
|
33 |
-
breakdown = []
|
34 |
-
for race, acc in zip(np.array(race_names)[top4], predictions[0, top4]):
|
35 |
-
breakdown.append(f'{race} at {acc:.2%}')
|
36 |
-
return breakdown
|
37 |
-
|
38 |
-
|
39 |
-
if __name__ == "__main__":
|
40 |
-
uvicorn.run("fastapi:app")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/backend/race_names.json
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
["Chihuahua", "Japanese Spaniel", "Maltese Dog", "Pekinese", "Shih-Tzu", "Blenheim Spaniel", "Papillon", "Toy Terrier", "Rhodesian Ridgeback", "Afghan Hound", "Basset", "Beagle", "Bloodhound", "Bluetick", "Black-And-Tan Coonhound", "Walker Hound", "English Foxhound", "Redbone", "Borzoi", "Irish Wolfhound", "Italian Greyhound", "Whippet", "Ibizan Hound", "Norwegian Elkhound", "Otterhound", "Saluki", "Scottish Deerhound", "Weimaraner", "Staffordshire Bullterrier", "American Staffordshire Terrier", "Bedlington Terrier", "Border Terrier", "Kerry Blue Terrier", "Irish Terrier", "Norfolk Terrier", "Norwich Terrier", "Yorkshire Terrier", "Wire-Haired Fox Terrier", "Lakeland Terrier", "Sealyham Terrier", "Airedale", "Cairn", "Australian Terrier", "Dandie Dinmont", "Boston Bull", "Miniature Schnauzer", "Giant Schnauzer", "Standard Schnauzer", "Scotch Terrier", "Tibetan Terrier", "Silky Terrier", "Soft-Coated Wheaten Terrier", "West Highland White Terrier", "Lhasa", "Flat-Coated Retriever", "Curly-Coated Retriever", "Golden Retriever", "Labrador Retriever", "Chesapeake Bay Retriever", "German Short-Haired Pointer", "Vizsla", "English Setter", "Irish Setter", "Gordon Setter", "Brittany Spaniel", "Clumber", "English Springer", "Welsh Springer Spaniel", "Cocker Spaniel", "Sussex Spaniel", "Irish Water Spaniel", "Kuvasz", "Schipperke", "Groenendael", "Malinois", "Briard", "Kelpie", "Komondor", "Old English Sheepdog", "Shetland Sheepdog", "Collie", "Border Collie", "Bouvier Des Flandres", "Rottweiler", "German Shepherd", "Doberman", "Miniature Pinscher", "Greater Swiss Mountain Dog", "Bernese Mountain Dog", "Appenzeller", "Entlebucher", "Boxer", "Bull Mastiff", "Tibetan Mastiff", "French Bulldog", "Great Dane", "Saint Bernard", "Eskimo Dog", "Malamute", "Siberian Husky", "Affenpinscher", "Basenji", "Pug", "Leonberg", "Newfoundland", "Great Pyrenees", "Samoyed", "Pomeranian", "Chow", "Keeshond", "Brabancon Griffon", "Pembroke", "Cardigan", "Toy Poodle", "Miniature Poodle", "Standard Poodle", "Mexican Hairless", "Dingo", "Dhole", "African Hunting Dog"]
|
|
|
|
app/backend/requirements.txt
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
fastapi==0.74.1
|
2 |
-
uvicorn==0.17.5
|
3 |
-
pydantic==1.9.0
|
4 |
-
tensorflow==2.8.0
|
5 |
-
pillow==9.0.1
|
|
|
|
|
|
|
|
|
|
|
|
app/docker-compose.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
version: "3.7"
|
2 |
-
|
3 |
-
services:
|
4 |
-
frontend:
|
5 |
-
build: frontend
|
6 |
-
ports:
|
7 |
-
- 8501:8501
|
8 |
-
depends_on:
|
9 |
-
- backend
|
10 |
-
volumes:
|
11 |
-
- ./frontend:/app
|
12 |
-
|
13 |
-
backend:
|
14 |
-
build: backend
|
15 |
-
ports:
|
16 |
-
- 8000:8000
|
17 |
-
volumes:
|
18 |
-
- ./backend:/app
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/frontend/Dockerfile
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
FROM python:3.10
|
2 |
-
|
3 |
-
COPY requirements.txt app/requirements.txt
|
4 |
-
|
5 |
-
WORKDIR /app
|
6 |
-
|
7 |
-
RUN pip install -r requirements.txt
|
8 |
-
|
9 |
-
COPY . /app
|
10 |
-
|
11 |
-
EXPOSE 8501
|
12 |
-
|
13 |
-
ENTRYPOINT ["streamlit","run"]
|
14 |
-
CMD ["app.py"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/frontend/app.py
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
import streamlit as st
|
2 |
-
import requests
|
3 |
-
|
4 |
-
|
5 |
-
def request_prediction(model_uri, data):
|
6 |
-
payload = {'q': data}
|
7 |
-
response = requests.get(url=model_uri, params=payload)
|
8 |
-
|
9 |
-
if response.status_code != 200:
|
10 |
-
raise Exception(
|
11 |
-
"Request failed with status {}, {}".format(
|
12 |
-
response.status_code, response.text))
|
13 |
-
|
14 |
-
return response.json()
|
15 |
-
|
16 |
-
|
17 |
-
def main():
|
18 |
-
API_URI = 'http://backend:8000/prediction'
|
19 |
-
|
20 |
-
st.set_page_config("Who let's the dogs out")
|
21 |
-
st.title('Quelle est ta race de chien totem ?')
|
22 |
-
|
23 |
-
st.text('''
|
24 |
-
Pour découvrir ta race de chien, colle l'adresse d'une photo.
|
25 |
-
''')
|
26 |
-
url = st.text_input('URL de la photo')
|
27 |
-
predict_btn = st.button('Prédire')
|
28 |
-
if predict_btn:
|
29 |
-
pred = request_prediction(API_URI, url)
|
30 |
-
main_race = pred[0].split(' at')[0].lower()
|
31 |
-
main_race = '/'.join(reversed(main_race.replace('-', '').split(' ')))
|
32 |
-
if main_race.startswith('husky'):
|
33 |
-
main_race = main_race.split('/')[0]
|
34 |
-
col1, col2 = st.columns(2)
|
35 |
-
with col1:
|
36 |
-
st.image(url)
|
37 |
-
with col2:
|
38 |
-
response = requests.get(url=f'https://dog.ceo/api/breed/{main_race}/images/random').json()
|
39 |
-
if response['status'] == 'success':
|
40 |
-
st.image(response['message'])
|
41 |
-
else:
|
42 |
-
st.text(main_race)
|
43 |
-
st.text(response)
|
44 |
-
st.write('Les races qui te correspondent le plus sont :')
|
45 |
-
for race in pred:
|
46 |
-
st.write(race)
|
47 |
-
|
48 |
-
|
49 |
-
if __name__ == '__main__':
|
50 |
-
main()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/frontend/requirements.txt
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
streamlit==1.5.1
|
2 |
-
requests==2.27.1
|
|
|
|
|
|
saved_model/keras_metadata.pb → keras_metadata.pb
RENAMED
File without changes
|
race_names.json
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
["Chihuahua", "Japanese Spaniel", "Maltese Dog", "Pekinese", "Shih-Tzu", "Blenheim Spaniel", "Papillon", "Toy Terrier", "Rhodesian Ridgeback", "Afghan Hound", "Basset", "Beagle", "Bloodhound", "Bluetick", "Black-And-Tan Coonhound", "Walker Hound", "English Foxhound", "Redbone", "Borzoi", "Irish Wolfhound", "Italian Greyhound", "Whippet", "Ibizan Hound", "Norwegian Elkhound", "Otterhound", "Saluki", "Scottish Deerhound", "Weimaraner", "Staffordshire Bullterrier", "American Staffordshire Terrier", "Bedlington Terrier", "Border Terrier", "Kerry Blue Terrier", "Irish Terrier", "Norfolk Terrier", "Norwich Terrier", "Yorkshire Terrier", "Wire-Haired Fox Terrier", "Lakeland Terrier", "Sealyham Terrier", "Airedale", "Cairn", "Australian Terrier", "Dandie Dinmont", "Boston Bull", "Miniature Schnauzer", "Giant Schnauzer", "Standard Schnauzer", "Scotch Terrier", "Tibetan Terrier", "Silky Terrier", "Soft-Coated Wheaten Terrier", "West Highland White Terrier", "Lhasa", "Flat-Coated Retriever", "Curly-Coated Retriever", "Golden Retriever", "Labrador Retriever", "Chesapeake Bay Retriever", "German Short-Haired Pointer", "Vizsla", "English Setter", "Irish Setter", "Gordon Setter", "Brittany Spaniel", "Clumber", "English Springer", "Welsh Springer Spaniel", "Cocker Spaniel", "Sussex Spaniel", "Irish Water Spaniel", "Kuvasz", "Schipperke", "Groenendael", "Malinois", "Briard", "Kelpie", "Komondor", "Old English Sheepdog", "Shetland Sheepdog", "Collie", "Border Collie", "Bouvier Des Flandres", "Rottweiler", "German Shepherd", "Doberman", "Miniature Pinscher", "Greater Swiss Mountain Dog", "Bernese Mountain Dog", "Appenzeller", "Entlebucher", "Boxer", "Bull Mastiff", "Tibetan Mastiff", "French Bulldog", "Great Dane", "Saint Bernard", "Eskimo Dog", "Malamute", "Siberian Husky", "Affenpinscher", "Basenji", "Pug", "Leonberg", "Newfoundland", "Great Pyrenees", "Samoyed", "Pomeranian", "Chow", "Keeshond", "Brabancon Griffon", "Pembroke", "Cardigan", "Toy Poodle", "Miniature Poodle", "Standard Poodle", "Mexican Hairless", "Dingo", "Dhole", "African Hunting Dog"]
|
|
|
|
saved_model/saved_model.pb → saved_model.pb
RENAMED
File without changes
|
{saved_model/variables → variables}/variables.data-00000-of-00001
RENAMED
File without changes
|
{saved_model/variables → variables}/variables.index
RENAMED
File without changes
|