Rakib023 commited on
Commit
6dbb87c
·
verified ·
1 Parent(s): 5488ae2

Create main.py

Browse files
Files changed (1) hide show
  1. main.py +234 -0
main.py ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from fastapi import FastAPI, File, UploadFile
3
+ from fastapi.responses import HTMLResponse
4
+ from transformers import EfficientNetImageProcessor, EfficientNetForImageClassification
5
+ from PIL import Image
6
+ import io
7
+ import sqlite3
8
+ import os
9
+
10
+ app = FastAPI()
11
+
12
+ # Load the EfficientNet-B0 model
13
+ model_name = "google/efficientnet-b0"
14
+ feature_extractor = EfficientNetImageProcessor.from_pretrained(model_name)
15
+ model = EfficientNetForImageClassification.from_pretrained(model_name)
16
+
17
+ # Mapping EfficientNet-B0 ImageNet labels to Bengali fruit names
18
+ fruit_mapping = {
19
+ "Granny Smith": "আপেল",
20
+ "banana": "কলা",
21
+ "orange": "কমলা",
22
+ "strawberry": "স্ট্রবেরি",
23
+ "pomegranate": "ডালিম",
24
+ "lemon": "লেবু",
25
+ "pineapple": "আনারস",
26
+ "jackfruit": "কাঠাল"
27
+ }
28
+
29
+ # Health benefits and recommended intake
30
+ benefits_mapping = {
31
+ "আপেল": {
32
+ "intake": "১টি মাঝারি আপেল (১৫০ গ্রাম)",
33
+ "diabetic": "১/২টি",
34
+ "benefits": [
35
+ "হজম সমস্যা: কোষ্ঠকাঠিন্য ও IBS উপশম করে",
36
+ "ডায়াবেটিস নিয়ন্ত্রণ: রক্তে শর্করার মাত্রা স্থিতিশীল রাখে",
37
+ "হার্ট ডিজিজ: LDL কোলেস্টেরল ১০-১৫% কমায়",
38
+ "ওজন নিয়ন্ত্রণ: মেটাবলিক সিন্ড্রোম রোধ করে"
39
+ ]
40
+ },
41
+ "কলা": {
42
+ "intake": "১-২টি মাঝারি কলা (১০০-১৫০ গ্রাম)",
43
+ "diabetic": "১টি",
44
+ "benefits": [
45
+ "উচ্চ রক্তচাপ: দিনে ২টি কলা স্ট্রোকের ঝুঁকি ২১% কমায়",
46
+ "ডিপ্রেশন: সেরোটোনিন উৎপাদন বাড়িয়ে মুড উন্নত করে",
47
+ "হজম সমস্যা: আলসার ও গ্যাস্ট্রাইটিসে উপকারী",
48
+ "ক্রীড়াবিদদের জন্য: মাসল ক্র্যাম্প প্রতিরোধ করে"
49
+ ]
50
+ },
51
+ "কমলা": {
52
+ "intake": "১টি বড় কমলা বা ১ গ্লাস জুস",
53
+ "diabetic": "১/২টি",
54
+ "benefits": [
55
+ "ইমিউনিটি: সাধারণ সর্দি-কাশির স্থায়িত্ব ২৩% কমায়",
56
+ "কিডনি স্টোন: সাইট্রেট স্টোন গলাতে সাহায্য করে",
57
+ "রক্তাল্পতা: আয়রন শোষণ ৬৭% বাড়ায়",
58
+ "ত্বকের ক্যান্সার: UV রশ্মির ক্ষতি থেকে রক্ষা করে"
59
+ ]
60
+ },
61
+ "স্ট্রবেরি": {
62
+ "intake": "৫-৬টি স্ট্রবেরি (১০০ গ্রাম)",
63
+ "diabetic": "১-২টি",
64
+ "benefits": [
65
+ "ক্যান্সার: টিউমার বৃদ্ধি ৫০% ধীর করে",
66
+ "গর্ভাবস্থা: নিউরাল টিউব ডিফেক্ট প্রতিরোধ করে",
67
+ "আর্থ্রাইটিস: জয়েন্টের ব্যথা ৩০% কমায়",
68
+ "চোখের ছানি: অক্সিডেটিভ স্ট্রেস কমায়"
69
+ ]
70
+ },
71
+ "ডালিম": {
72
+ "intake": "১টি মাঝারি ডালিম (১৫০ গ্রাম) বা ১/২ কাপ দানা",
73
+ "diabetic": "১/৪ কাপ দানা",
74
+ "benefits": [
75
+ "হৃদরোগ প্রতিরোধ: রক্তচাপ কমায়, ধমনীর স্থিতিস্থাপকতা বাড়ায়",
76
+ "রক্তস্বল্পতা দূর করে: আয়রন ও ভিটামিন সি হিমোগ্লোবিন বৃদ্ধি করে",
77
+ "ক্যান্সার প্রতিরোধ: প্রোস্টেট ও ব্রেস্ট ক্যান্সার",
78
+ "গাঁটের ব্যথা কমায়: Arthritis উপশম করে",
79
+ "মস্তিষ্কের স্বাস্থ্য: আলঝেইমার্স রোগের ঝুঁকি কমায়"
80
+ ]
81
+ },
82
+ "লেবু": {
83
+ "intake": "১টি মাঝারি লেবু বা ১/২ গ্লাস জুস",
84
+ "diabetic": "১/৪টি",
85
+ "benefits": [
86
+ "ইমিউনিটি: ভিটামিন সি দিয়ে ���োগ প্রতিরোধ ক্ষমতা বাড়ায়",
87
+ "হজম: অ্যাসিডিটি ও বদহজম কমায়",
88
+ "ত্বকের যত্ন: অ্যান্টিঅক্সিডেন্ট দিয়ে ত্বক উজ্জ্বল করে",
89
+ "ওজন কমানো: মেটাবলিজম বাড়াতে সাহায্য করে"
90
+ ]
91
+ },
92
+ "আনারস": {
93
+ "intake": "১ কাপ কাটা আনারস (১৫০ গ্রাম)",
94
+ "diabetic": "১/২ কাপ",
95
+ "benefits": [
96
+ "হজম: ব্রোমেলিন এনজাইম দিয়ে প্রোটিন ভাঙতে সাহায্য করে",
97
+ "প্রদাহ কমায়: আর্থ্রাইটিস ও পেশির ব্যথা উপশম করে",
98
+ "ইমিউনিটি: ভিটামিন সি দিয়ে সংক্রমণ প্রতিরোধ করে",
99
+ "দাঁতের স্বাস্থ্য: মাড়ির প্রদাহ কমায়"
100
+ ]
101
+ },
102
+ "কাঠাল": {
103
+ "intake": "১ কাপ কাটা কাঠাল (১৫০ গ্রাম)",
104
+ "diabetic": "কম পরিমাণে",
105
+ "benefits": [
106
+ "শক্তি: উচ্চ কার্বোহাইড্রেট দিয়ে শক্তি বাড়ায়",
107
+ "ইমিউনিটি: ভিটামিন এ ও সি দিয়ে রোগ প্রতিরোধ করে",
108
+ "হৃদরোগ: পটাশিয়াম দিয়ে রক্তচাপ নিয়ন্ত্রণ করে",
109
+ "কোষ্ঠকাঠিন্য: ফাইবার দিয়ে হজমশক্তি বাড়ায়"
110
+ ]
111
+ }
112
+ }
113
+
114
+ # SQLite database initialization for nutrition
115
+ def init_db():
116
+ conn = sqlite3.connect("fruit_nutrition.db")
117
+ c = conn.cursor()
118
+ c.execute('''CREATE TABLE IF NOT EXISTS fruits (
119
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
120
+ name TEXT UNIQUE,
121
+ vitamin TEXT,
122
+ mineral TEXT,
123
+ carbohydrate TEXT,
124
+ protein TEXT,
125
+ amino_acid TEXT)''')
126
+ fruits_data = [
127
+ ("আপেল", "ভিটামিন সি, ভিটামিন এ", "পটাশিয়াম, ম্যাগনেসিয়াম", "১৪ গ্রাম", "০.৩ গ্রাম", "নেই"),
128
+ ("কলা", "ভিটামিন বি৬, ভিটামিন সি", "পটাশিয়াম", "২৭ গ্রাম", "১.১ গ্রাম", "ট্রিপটোফ্যান"),
129
+ ("কমলা", "ভিটামিন সি", "ক্যালসিয়াম, পটাশিয়াম", "১২ গ্রাম", "০.৯ গ্রাম", "নেই"),
130
+ ("স্ট্রবেরি", "ভিটামিন সি, ভিটামিন কে", "ম্যাঙ্গানিজ, ফোলেট", "৮ গ্রাম", "০.৭ গ্রাম", "নেই"),
131
+ ("ডালিম", "ভিটামিন সি", "আয়রন, ক্যালসিয়াম", "১৯ গ্রাম", "১.৭ গ্রাম", "নেই"),
132
+ ("লেবু", "ভিটামিন সি", "পটাশিয়াম, ম্যাগনেসিয়াম", "৯ গ্রাম", "১.১ গ্রাম", "নেই"),
133
+ ("আনারস", "ভিটামিন সি, ভিটামিন বি৬", "ম্যাঙ্গানিজ, পটাশিয়াম", "২২ গ্রাম", "০.৫ গ্রাম", "নেই"),
134
+ ("কাঠাল", "ভিটামিন এ, ভিটামিন সি", "পটাশিয়াম, ম্যাগনেসিয়াম", "৩৮ গ্রাম", "১.৭ গ্রাম", "নেই")
135
+ ]
136
+ c.executemany("INSERT OR IGNORE INTO fruits (name, vitamin, mineral, carbohydrate, protein, amino_acid) VALUES (?, ?, ?, ?, ?, ?)", fruits_data)
137
+ conn.commit()
138
+ conn.close()
139
+
140
+ # New database for diabetic-specific information
141
+ def init_diabetes_db():
142
+ conn = sqlite3.connect("fruit_diabetes.db")
143
+ c = conn.cursor()
144
+ c.execute('''CREATE TABLE IF NOT EXISTS diabetes_info (
145
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
146
+ fruit_name TEXT UNIQUE,
147
+ glycemic_index TEXT,
148
+ portion_size TEXT,
149
+ best_time TEXT,
150
+ precautions TEXT)''')
151
+
152
+ diabetes_data = [
153
+ ("আপেল", "নিম্ন (৩৮)", "১/২টি মাঝারি", "সকাল বা দুপুর", "অতিরিক্ত খাবেন না"),
154
+ ("কলা", "মাঝারি (৫১)", "১টি ছোট", "সকালে", "���াকা কলা এড়িয়ে চলুন"),
155
+ ("কমলা", "নিম্ন (৪৩)", "১/২টি", "দুপুরে", "জুস এড়িয়ে ফল খান"),
156
+ ("স্ট্রবেরি", "নিম্ন (৪০)", "১-২টি", "যেকোনো সময়", "পরিমিত খান"),
157
+ ("ডালিম", "নিম্ন (৫৩)", "১/৪ কাপ দানা", "সকালে", "বীজ সহ খান"),
158
+ ("লেবু", "খুব নিম্ন (২০)", "১/৪টি", "যেকোনো সময়", "চিনি ছাড়া ব্যবহার করুন"),
159
+ ("আনারস", "মাঝারি (৫৯)", "১/২ কাপ", "সকালে", "পরিমিত খান"),
160
+ ("কাঠাল", "মাঝারি (৫৭)", "২-৩টি কোয়া", "দুপুরে", "অতিরিক্ত এড়িয়ে চলুন")
161
+ ]
162
+
163
+ c.executemany("INSERT OR IGNORE INTO diabetes_info (fruit_name, glycemic_index, portion_size, best_time, precautions) VALUES (?, ?, ?, ?, ?)", diabetes_data)
164
+ conn.commit()
165
+ conn.close()
166
+
167
+ # Initialize both databases
168
+ init_db()
169
+ init_diabetes_db()
170
+
171
+ # Serve the HTML file
172
+ @app.get("/", response_class=HTMLResponse)
173
+ async def home():
174
+ with open("index.html", "r", encoding="utf-8") as f:
175
+ return f.read()
176
+
177
+ # Prediction endpoint
178
+ @app.post("/predict")
179
+ async def predict(file: UploadFile = File(...)):
180
+ image = Image.open(io.BytesIO(await file.read())).convert("RGB")
181
+ inputs = feature_extractor(images=image, return_tensors="pt")
182
+ with torch.no_grad():
183
+ outputs = model(**inputs)
184
+ predicted_class_idx = outputs.logits.argmax(-1).item()
185
+ predicted_label = model.config.id2label[predicted_class_idx].split(",")[0].strip()
186
+ bengali_fruit = fruit_mapping.get(predicted_label, predicted_label)
187
+
188
+ # Fetch nutrition from database
189
+ conn = sqlite3.connect("fruit_nutrition.db")
190
+ c = conn.cursor()
191
+ c.execute("SELECT vitamin, mineral, carbohydrate, protein, amino_acid FROM fruits WHERE name = ?", (bengali_fruit,))
192
+ nutrition = c.fetchone()
193
+ conn.close()
194
+ if not nutrition:
195
+ nutrition = ("অজানা", "অজানা", "অজানা", "অজানা", "অজানা")
196
+
197
+ # Fetch health benefits
198
+ benefits_info = benefits_mapping.get(bengali_fruit, {
199
+ "intake": "অজানা",
200
+ "diabetic": "অজানা",
201
+ "benefits": ["তথ্য নেই"]
202
+ })
203
+
204
+ # Fetch diabetes info
205
+ conn = sqlite3.connect("fruit_diabetes.db")
206
+ c = conn.cursor()
207
+ c.execute("SELECT glycemic_index, portion_size, best_time, precautions FROM diabetes_info WHERE fruit_name = ?", (bengali_fruit,))
208
+ diabetes_info = c.fetchone()
209
+ conn.close()
210
+ if not diabetes_info:
211
+ diabetes_info = ("অজানা", "অজানা", "অজানা", "অজানা")
212
+
213
+ return {
214
+ "filename": file.filename,
215
+ "predicted_class": bengali_fruit,
216
+ "nutrition": {
217
+ "vitamin": nutrition[0],
218
+ "mineral": nutrition[1],
219
+ "carbohydrate": nutrition[2],
220
+ "protein": nutrition[3],
221
+ "amino_acid": nutrition[4]
222
+ },
223
+ "health": {
224
+ "intake": benefits_info["intake"],
225
+ "diabetic": benefits_info["diabetic"],
226
+ "benefits": benefits_info["benefits"]
227
+ },
228
+ "diabetes": {
229
+ "glycemic_index": diabetes_info[0],
230
+ "portion_size": diabetes_info[1],
231
+ "best_time": diabetes_info[2],
232
+ "precautions": diabetes_info[3]
233
+ }
234
+ }