Upload 5 files
Browse filesexport.pkl is the model. Use detect.py to run with streamlit.
- detect.py +50 -0
- export.pkl +3 -0
- foodlist.txt +24 -0
- requirements.txt +88 -0
- testfood.jpg +0 -0
detect.py
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from fastai.learner import load_learner
|
3 |
+
from fastai.vision.all import Resize, ResizeMethod
|
4 |
+
from PIL import Image
|
5 |
+
|
6 |
+
# Function to load the learner
|
7 |
+
@st.cache(allow_output_mutation=True)
|
8 |
+
def load_model(path):
|
9 |
+
return load_learner(path)
|
10 |
+
|
11 |
+
# Function to resize the image
|
12 |
+
def resize_image(img):
|
13 |
+
resize_transform = Resize(256, method=ResizeMethod.Squish)
|
14 |
+
return resize_transform(img)
|
15 |
+
|
16 |
+
# Title of the Streamlit app
|
17 |
+
st.title("Food Image Classifier")
|
18 |
+
food_d = [
|
19 |
+
'แกงเขียวหวานไก่', 'แกงเทโพ', 'แกงเลียง', 'แกงจืดเต้าหู้หมูสับ', 'แกงจืดมะระยัดไส้',
|
20 |
+
'แกงมัสมั่นไก่', 'แกงส้มกุ้ง', 'ไก่ผัดเม็ดมะม่วงหิมพานต์', 'ไข่เจียว', 'ไข่ดาว',
|
21 |
+
'ไข่พะโล้', 'ไข่ลูกเขย', 'กล้วยบวชชี', 'ก๋วยเตี๋ยวคั่วไก่', 'กะหล่ำปลีผัดน้ำปลา',
|
22 |
+
'กุ้งแม่น้ำเผา', 'กุ้งอบวุ้นเส้น', 'ขนมครก', 'ข้าวเหนียวมะม่วง', 'ข้าวขาหมู',
|
23 |
+
'ข้าวคลุกกะปิ', 'ข้าวซอยไก่', 'ข้าวผัด', 'ข้าวผัดกุ้ง', 'ข้าวมันไก่',
|
24 |
+
'ข้าวหมกไก่', 'ต้มข่าไก่', 'ต้มยำกุ้ง', 'ทอดมัน', 'ปอเปี๊ยะทอด',
|
25 |
+
'ผัดผักบุ้งไฟแดง', 'ผัดไทย', 'ผัดกะเพรา', 'ผัดซีอิ๊ว', 'ฟักทองผัดไข่',
|
26 |
+
'ผัดมะเขือยาวหมูสับ', 'ผัดหอยลาย', 'ฝอยทอง', 'พะแนงไก่', 'ยำถั่วพลู',
|
27 |
+
'ยำวุ้นเส้น', 'ลาบหมู', 'สังขยาฟักทอง', 'สาคูไส้หมู', 'ส้มตำ',
|
28 |
+
'หมูปิ้ง','หมูสะเต๊ะ', 'ห่อหมก', 'หมูกรอบ', 'ผัดเปรี๊ยวหวาน', 'น้ำพริกกะปิปลาทู', 'ก๋วยเตี๋ยวเรือ'
|
29 |
+
]
|
30 |
+
# Upload an image
|
31 |
+
uploaded_file = st.file_uploader("Choose an image...", type="jpg")
|
32 |
+
|
33 |
+
if uploaded_file is not None:
|
34 |
+
# Open and display the image
|
35 |
+
img = Image.open(uploaded_file)
|
36 |
+
st.image(img, caption='Uploaded Image.', use_column_width=True)
|
37 |
+
st.write("")
|
38 |
+
st.write("Classifying...")
|
39 |
+
|
40 |
+
# Resize the image
|
41 |
+
img_resized = resize_image(img)
|
42 |
+
|
43 |
+
# Load the model
|
44 |
+
learner = load_model('export.pkl')
|
45 |
+
|
46 |
+
# Predict the class
|
47 |
+
pred_class, pred_idx, outputs = learner.predict(img_resized)
|
48 |
+
|
49 |
+
# Display the results
|
50 |
+
st.write(f'Predicted class: {food_d[pred_idx]}')
|
export.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:3f257f2aa9914698c99117e4a27384be2022868c5af8ea6a74e182862446bddd
|
3 |
+
size 87852143
|
foodlist.txt
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Thai
|
2 |
+
'แกงเขียวหวานไก่', 'แกงเทโพ', 'แกงเลียง', 'แกงจืดเต้าหู้หมูสับ', 'แกงจืดมะระยัดไส้',
|
3 |
+
'แกงมัสมั่นไก่', 'แกงส้มกุ้ง', 'ไก่ผัดเม็ดมะม่วงหิมพานต์', 'ไข่เจียว', 'ไข่ดาว',
|
4 |
+
'ไข่พะโล้', 'ไข่ลูกเขย', 'กล้วยบวชชี', 'ก๋วยเตี๋ยวคั่วไก่', 'กะหล่ำปลีผัดน้ำปลา',
|
5 |
+
'กุ้งแม่น้ำเผา', 'กุ้งอบวุ้นเส้น', 'ขนมครก', 'ข้าวเหนียวมะม่วง', 'ข้าวขาหมู',
|
6 |
+
'ข้าวคลุกกะปิ', 'ข้าวซอยไก่', 'ข้าวผัด', 'ข้าวผัดกุ้ง', 'ข้าวมันไก่',
|
7 |
+
'ข้าวหมกไก่', 'ต้มข่าไก่', 'ต้มยำกุ้ง', 'ทอดมัน', 'ปอเปี๊ยะทอด',
|
8 |
+
'ผัดผักบุ้งไฟแดง', 'ผัดไทย', 'ผัดกะเพรา', 'ผัดซีอิ๊ว', 'ฟักทองผัดไข่',
|
9 |
+
'ผัดมะเขือยาวหมูสับ', 'ผัดหอยลาย', 'ฝอยทอง', 'พะแนงไก่', 'ยำถั่วพลู',
|
10 |
+
'ยำวุ้นเส้น', 'ลาบหมู', 'สังขยาฟักทอง', 'สาคูไส้หมู', 'ส้มตำ',
|
11 |
+
'หมูปิ้ง','หมูสะเต๊ะ', 'ห่อหมก', 'หมูกรอบ', 'ผัดเปรี๊ยวหวาน', 'น้ำพริกกะปิปลาทู', 'ก๋วยเตี๋ยวเรือ'
|
12 |
+
|
13 |
+
Easy English
|
14 |
+
'green_curry', 'tepo_curry', 'liang_curry', 'taohoo_moosup', 'mara_yadsai',
|
15 |
+
'masaman', 'orange_curry', 'cashew_chicken', 'omelette', 'sunny_side_up',
|
16 |
+
'palo_egg', 'sil_egg', 'nun_banana', 'kua_gai', 'cabbage_fish_sauce',
|
17 |
+
'river_prawn', 'shrimp_ob_woonsen', 'kanom_krok', 'mango_sticky_rice', 'kao_kamoo',
|
18 |
+
'kao_klook_kapi', 'kaosoi', 'kao_pad', 'kao_pad_shrimp', 'chicken_rice',
|
19 |
+
'kao_mok_gai', 'tom_ka_gai', 'tom_yum_kung', 'tod_mun', 'poh_pia',
|
20 |
+
'pak_boong_fai_daeng', 'padthai', 'pad_krapao', 'pad_si_ew', 'pad_fakthong',
|
21 |
+
'eggplant_stirfry', 'pad_hoi_lai', 'foithong', 'panaeng', 'yum_tua_ploo',
|
22 |
+
'yum_woonsen', 'larb_moo', 'pumpkin_custard', 'sakoo_sai_moo', 'somtam',
|
23 |
+
'moopoing', 'satay', 'hor_mok', 'crispy_pork_skin',
|
24 |
+
'sour_sweet_stirfried', 'numprik_kapi', 'Thai_boat_noodle'
|
requirements.txt
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
altair==5.3.0
|
2 |
+
annotated-types==0.7.0
|
3 |
+
attrs==23.2.0
|
4 |
+
blinker==1.8.2
|
5 |
+
blis==0.7.11
|
6 |
+
cachetools==5.3.3
|
7 |
+
catalogue==2.0.10
|
8 |
+
certifi==2024.7.4
|
9 |
+
charset-normalizer==3.3.2
|
10 |
+
click==8.1.7
|
11 |
+
cloudpathlib==0.18.1
|
12 |
+
confection==0.1.5
|
13 |
+
contourpy==1.2.1
|
14 |
+
cycler==0.12.1
|
15 |
+
cymem==2.0.8
|
16 |
+
fastai==2.7.15
|
17 |
+
fastcore==1.5.48
|
18 |
+
fastdownload==0.0.7
|
19 |
+
fastprogress==1.0.3
|
20 |
+
filelock==3.15.4
|
21 |
+
fonttools==4.53.1
|
22 |
+
fsspec==2024.6.1
|
23 |
+
gitdb==4.0.11
|
24 |
+
GitPython==3.1.43
|
25 |
+
idna==3.7
|
26 |
+
Jinja2==3.1.4
|
27 |
+
joblib==1.4.2
|
28 |
+
jsonschema==4.23.0
|
29 |
+
jsonschema-specifications==2023.12.1
|
30 |
+
kiwisolver==1.4.5
|
31 |
+
langcodes==3.4.0
|
32 |
+
language_data==1.2.0
|
33 |
+
marisa-trie==1.2.0
|
34 |
+
markdown-it-py==3.0.0
|
35 |
+
MarkupSafe==2.1.5
|
36 |
+
matplotlib==3.9.1
|
37 |
+
mdurl==0.1.2
|
38 |
+
mpmath==1.3.0
|
39 |
+
murmurhash==1.0.10
|
40 |
+
networkx==3.3
|
41 |
+
numpy==1.26.4
|
42 |
+
packaging==24.1
|
43 |
+
pandas==2.2.2
|
44 |
+
pillow==10.4.0
|
45 |
+
preshed==3.0.9
|
46 |
+
protobuf==5.27.2
|
47 |
+
pyarrow==16.1.0
|
48 |
+
pydantic==2.8.2
|
49 |
+
pydantic_core==2.20.1
|
50 |
+
pydeck==0.9.1
|
51 |
+
Pygments==2.18.0
|
52 |
+
pyparsing==3.1.2
|
53 |
+
python-dateutil==2.9.0.post0
|
54 |
+
pytz==2024.1
|
55 |
+
PyYAML==6.0.1
|
56 |
+
referencing==0.35.1
|
57 |
+
requests==2.32.3
|
58 |
+
rich==13.7.1
|
59 |
+
rpds-py==0.19.0
|
60 |
+
scikit-learn==1.5.1
|
61 |
+
scipy==1.14.0
|
62 |
+
setuptools==70.2.0
|
63 |
+
shellingham==1.5.4
|
64 |
+
six==1.16.0
|
65 |
+
smart-open==7.0.4
|
66 |
+
smmap==5.0.1
|
67 |
+
spacy==3.7.5
|
68 |
+
spacy-legacy==3.0.12
|
69 |
+
spacy-loggers==1.0.5
|
70 |
+
srsly==2.4.8
|
71 |
+
streamlit==1.36.0
|
72 |
+
sympy==1.13.0
|
73 |
+
tenacity==8.5.0
|
74 |
+
thinc==8.2.5
|
75 |
+
threadpoolctl==3.5.0
|
76 |
+
toml==0.10.2
|
77 |
+
toolz==0.12.1
|
78 |
+
torch==2.3.1
|
79 |
+
torchvision==0.18.1
|
80 |
+
tornado==6.4.1
|
81 |
+
tqdm==4.66.4
|
82 |
+
typer==0.12.3
|
83 |
+
typing_extensions==4.12.2
|
84 |
+
tzdata==2024.1
|
85 |
+
urllib3==2.2.2
|
86 |
+
wasabi==1.1.3
|
87 |
+
weasel==0.4.1
|
88 |
+
wrapt==1.16.0
|
testfood.jpg
ADDED