From 57cddbdc9241aeb8b03cbeb8241cf16d650943ce Mon Sep 17 00:00:00 2001 From: WahyuTegarP <158023677+WahyuTegarP@users.noreply.github.com> Date: Thu, 2 Apr 2026 21:54:59 +0700 Subject: [PATCH] hasil diagnosis --- app/Http/Controllers/DiagnosisController.php | 92 +++++++++++-------- public/data/Bissmilah lagi.xlsx | Bin 0 -> 11022 bytes python_api/app.py | 73 ++++++++++++--- python_artifacts/model.joblib | Bin 10417 -> 9073 bytes resources/views/hasil-diagnosis.blade.php | 17 ++-- routes/web.php | 4 +- 6 files changed, 124 insertions(+), 62 deletions(-) create mode 100644 public/data/Bissmilah lagi.xlsx diff --git a/app/Http/Controllers/DiagnosisController.php b/app/Http/Controllers/DiagnosisController.php index b387b3a..97dfd29 100644 --- a/app/Http/Controllers/DiagnosisController.php +++ b/app/Http/Controllers/DiagnosisController.php @@ -8,46 +8,60 @@ class DiagnosisController extends Controller { public function prosesDiagnosis(Request $request) -{ - $input = $request->input('gejala', []); + { + $input = $request->input('gejala', []); - if (count($input) < 3) { - return redirect()->route('gejala') - ->with('error', 'Pilih minimal 3 gejala!'); + // validasi minimal 3 gejala + if (count($input) < 3) { + return redirect()->route('gejala') + ->with('error', 'Pilih minimal 3 gejala!'); + } + + $inputNama = $input; + + // ambil fitur dari Python + $response = Http::get('http://127.0.0.1:5000/gejala'); + + if (!$response->successful()) { + return redirect()->route('gejala') + ->with('error', 'Tidak bisa mengambil data gejala dari API'); + } + + $featureCols = $response->json(); + + // ubah ke format 1/0 + $fiturAssoc = []; + + foreach ($featureCols as $col) { + $fiturAssoc[$col] = in_array(trim($col), array_map('trim', $inputNama)) ? 1 : 0; + } + + // kirim ke Python API + $response = Http::post('http://127.0.0.1:5000/predict', $fiturAssoc); + + if (!$response->successful()) { + return redirect()->route('gejala') + ->with('error', 'Server AI tidak merespon!'); + } + + $data = $response->json(); + + // 🔥 ambil semua hasil dari Python + $diagnosis = [ + 'nama' => $data['penyakit'] ?? '-', + 'kategori' => $data['jenis'] ?? '-', + 'pertolongan' => $data['pertolongan'] ?? [], + 'pencegahan' => $data['pencegahan'] ?? [], + ]; + + return redirect()->route('hasil-diagnosis') + ->with('diagnosis', $diagnosis) + ->with('gejala', $inputNama); } - // 🔥 LANGSUNG PAKAI INPUT - $inputNama = $input; - - // ambil feature dari Python - $response = Http::get('http://127.0.0.1:5000/gejala'); - if (!$response->successful()) { - return redirect()->route('gejala') - ->with('error', 'Tidak bisa mengambil data gejala dari API'); + // 🔥 halaman hasil + public function hasil() + { + return view('hasil-diagnosis'); } - - $featureCols = $response->json(); - - // bikin vector - $fiturAssoc = []; - - foreach ($featureCols as $col) { - $fiturAssoc[$col] = in_array(trim($col), array_map('trim', $inputNama)) ? 1 : 0; - } - - // kirim ke Flask - $response = Http::post('http://127.0.0.1:5000/predict', $fiturAssoc); - - if (!$response->successful()) { - return redirect()->route('gejala') - ->with('error', 'Server AI tidak merespon!'); - } - - $data = $response->json(); - - $hasil = isset($data['hasil']) ? trim($data['hasil']) : 'Tidak diketahui'; - - return redirect()->route('hasil-diagnosis') - ->with('hasil', $hasil) - ->with('gejala', $inputNama); -}} \ No newline at end of file +} \ No newline at end of file diff --git a/public/data/Bissmilah lagi.xlsx b/public/data/Bissmilah lagi.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..13884dc394054a8f9032554fab39724f827ea4d8 GIT binary patch literal 11022 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 literal 0 HcmV?d00001 diff --git a/python_api/app.py b/python_api/app.py index 9aac554..948f2a3 100644 --- a/python_api/app.py +++ b/python_api/app.py @@ -5,19 +5,52 @@ import pandas as pd app = Flask(__name__) -# load model -model = joblib.load("../python_artifacts/modell.joblib") +# ========================= +# LOAD MODEL +# ========================= +model = joblib.load("../python_artifacts/model.joblib") -# load fitur +# ========================= +# LOAD FEATURE +# ========================= with open("../python_artifacts/feature_cols.json") as f: feature_cols = json.load(f) -# endpoint gejala +# ========================= +# LOAD EXCEL +# ========================= +df_info = pd.read_excel("../public/data/Bissmilah lagi.xlsx") + +# bersihin data +df_info.columns = df_info.columns.str.strip() + +for col in df_info.columns: + df_info[col] = df_info[col].astype(str).str.strip() + +df_info['Penyakit'] = df_info['Penyakit'].str.lower() + +# buat dictionary +info_penyakit = {} + +for _, row in df_info.iterrows(): + info_penyakit[row['Penyakit']] = { + "jenis": row['Jenis'], + "pertolongan": [p.strip() for p in row['Pertolongan'].split(";")], + "pencegahan": [p.strip() for p in row['Pencegahan'].split(";")] + } + +print("DATA PENYAKIT:", info_penyakit.keys()) + +# ========================= +# ENDPOINT GEJALA +# ========================= @app.route('/gejala', methods=['GET']) def get_gejala(): return jsonify(feature_cols) -# endpoint predict +# ========================= +# ENDPOINT PREDICT +# ========================= @app.route('/predict', methods=['POST']) def predict(): data = request.json @@ -35,13 +68,31 @@ def predict(): input_df = pd.DataFrame([input_data], columns=feature_cols) hasil = model.predict(input_df)[0] + penyakit = str(hasil).lower().strip() + + print("HASIL MODEL:", hasil) + print("CARI DI EXCEL:", penyakit) + + info = info_penyakit.get(penyakit) + + if not info: + return jsonify({ + "penyakit": hasil, + "jenis": "-", + "pertolongan": [], + "pencegahan": [] + }) return jsonify({ - "hasil": hasil + "penyakit": hasil, + "jenis": info["jenis"], + "pertolongan": info["pertolongan"], + "pencegahan": info["pencegahan"] }) + +# ========================= +# RUN APP +# ========================= if __name__ == '__main__': - print("API MODEL SIAP DIGUNAKAN (DARI JUPYTER)") - app.run(debug=True) - print("FEATURE COLS:", feature_cols) -print("INPUT FROM LARAVEL:", data) -print("INPUT VECTOR:", input_data) \ No newline at end of file + print("API MODEL SIAP DIGUNAKAN 🔥") + app.run(debug=True) \ No newline at end of file diff --git a/python_artifacts/model.joblib b/python_artifacts/model.joblib index 8d37fc4ab6d284209640de4219a1a708757c2298..41e71e2a5b7b9fe96b1068147278dffe77403f42 100644 GIT binary patch delta 989 zcmaixO=uHA6vub*qdTel+05?Rq;0a*&6XTY1WAJ6Bq&l9#S{fkdZ>b@wg*LzwTIAy z6y=F{5Dz_hY>DDUN(NyYb*m2Kp37&eV@6$7SM6;i7Pd6e@%0_MwK-Viz~pcXoRVzg(8l z??O#MwVOhNc;;>-1E>yE3_AFYokt(ag=oSaW_*m+6t_yE=eQtplVT=v1Z8uBnR7%!pTR-(X^a_5n8(*e)4nt z?CpxJ(oS_d<-xF1px8OspuV-p#Mn?58NZo*SYV-|NcimvdB=s6=fa$AK+7)jtqeCO zMt-f$zwS6gk_2CWH=3QQy^8XJcPiX>Qp)t3Kg~-6ORRlT@L?_f^6}K$s8b|6m3R8^ zBW-~0rnoAxCbl$LduV+%d8~`)iuDD5Nrtkc!QaFL^rv%t7kT^$8odFJ188_EEGa7!G;wW*r!C~B$#eV(nIgvnK@V1%)<`9`JeN@XYRRse;=P} zdn}1Q=M87N=i;T#3q9A;SI16h5E4~E%QlEd1rl@EA;K_;lNwYC2u`hS8>(GMH`0bd zD`qn6w@Oom`Js-4fOr?xkC39=7)~0cP+xa7v{W5 zy+J$L%~+!0LcgOi!DTVNh)6FCyJ{fjZYBgXPPpk-$_(0P4KznL&KZLmcMEZ$*8{So zz#CT;;VuberEoRhpS>Um%dT2=&_9{{Hu#?M+3lL2bI_OIbkjkgOQLfPRx&v&yUX1TdEF2>LEx6&!hPTefYqP9~3g`IkNz|DuQ0w z^*_UDb}&WGSM=^3Gx8Mfg)hTIxSOp@i76{Sn~ikw-CHvjDceFF{EFOW(}~P=B>OVZ xSPYZVZnlpYOC(rvggt$mH_ygpn?LLukd_+8J{i=)$* Hasil Diagnosis - PawMedic - +@php +$diagnosis = session('diagnosis')?? []; +@endphp