158 lines
5.0 KiB
Python
158 lines
5.0 KiB
Python
from flask import Flask, render_template, request, jsonify
|
|
from tensorflow.keras.models import load_model
|
|
from tensorflow.keras.preprocessing import image
|
|
import numpy as np
|
|
import base64
|
|
import io
|
|
import uuid
|
|
import tempfile
|
|
import os
|
|
|
|
app = Flask(__name__)
|
|
|
|
dic = {0: 'GIANT', 1: 'LEUKOSIT', 2: 'NORMAL'}
|
|
|
|
model = load_model('static/assets/models/Klasifikasi-Et Exception-96.92.h5')
|
|
|
|
# Compile the model with whatever settings you need
|
|
#model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
|
|
|
|
def predict_label(img_path):
|
|
i = image.load_img(img_path, target_size=(224, 224))
|
|
i = image.img_to_array(i) / 255.0
|
|
i = i.reshape(1, 224, 224, 3)
|
|
|
|
p = model.predict(i)
|
|
|
|
|
|
predicted_class = np.argmax(p, axis=-1)
|
|
|
|
highest_probability = max(p[0]) * 100
|
|
|
|
probabilities = (p[0] * 100).tolist()
|
|
|
|
print(probabilities)
|
|
|
|
other_probabilities = {}
|
|
for index, prob in enumerate(probabilities):
|
|
if index != predicted_class[0]:
|
|
other_probabilities[dic[index]] = prob
|
|
return {
|
|
'label': dic[predicted_class[0]],
|
|
'highest_probability': highest_probability,
|
|
'other_probabilities': other_probabilities
|
|
}
|
|
|
|
|
|
|
|
@app.route("/", methods=['GET'])
|
|
def main():
|
|
return render_template("index.html")
|
|
|
|
@app.route("/giant", methods=['GET'])
|
|
def cerscospora():
|
|
return render_template("giant.html")
|
|
|
|
@app.route("/leukosit", methods=['GET'])
|
|
def rust():
|
|
return render_template("leukosit.html")
|
|
|
|
@app.route("/normal", methods=['GET'])
|
|
def healthy():
|
|
return render_template("normal.html")
|
|
|
|
@app.route("/classification", methods=['GET', 'POST'])
|
|
def classification():
|
|
|
|
temp_dir = "static/assets/temp/"
|
|
|
|
try:
|
|
for filename in os.listdir(temp_dir):
|
|
file_path = os.path.join(temp_dir, filename)
|
|
if os.path.isfile(file_path):
|
|
os.remove(file_path)
|
|
|
|
# Setelah menghapus gambar, tampilkan halaman classification.html
|
|
return render_template("classification.html")
|
|
|
|
except Exception as e:
|
|
# Tangani kesalahan jika terjadi
|
|
return f'Terjadi kesalahan: {str(e)}'
|
|
|
|
@app.route("/handing", methods=['GET'])
|
|
def handing():
|
|
clasify = request.args.get('clasify')
|
|
data = []
|
|
|
|
if clasify == "GIANT":
|
|
data.extend([
|
|
{"text": "Periksa tanaman secara rutin ", "image": "static/assets/images//handling/ru1.jpg"},
|
|
{"text": "Pemangkasan pada penyakit yang terinfeksi penyakit rust untuk mengurangi penyebaran penyakit tersebut", "image": "static/assets/images//handling/ru2.jpg"},
|
|
{"text": "Pengunaan fungsida, penggunaan fungsida ini dapat di gunakan untuk mengendalikan pertumbuhan jamur penyebab penyakit rust", "image": "static/assets/images//handling/ru3.jpg"},
|
|
{"text": "Mengatur kelembaban, Upaya agar kelembababan udara di sekitar tanaman kopi tidak terlalu tinggi karena kelembababn yang tinggi mendukung pertumbuhan jamur", "image": "static/assets/images//handling/ru4.jpg"},
|
|
])
|
|
elif clasify == "LEUKOSIT":
|
|
data.extend([
|
|
{"text": "Petani dapat mengendalikan penyakit ini menggunakan teknik sanitasi dengan menggunting daun yang sakit kemudian dibakar atau dibenamkan ke dalam tanah.", "image": "static/assets/images//handling/ce1.jpg"},
|
|
{"text": "Mengurangi kelembapan tanah dengan cara mengurangi penyiraman.", "image": "static/assets/images//handling/ce2.jpg"},
|
|
{"text": "Menjarangkan tanaman naungan sehingga sinar matahari dapat langsung masuk.", "image": "static/assets/images//handling/ce3.jpg"},
|
|
{"text": "Melakukan pemupukan berimbang, dan menggunakan fungisida yang tepat.", "image": "static/assets/images//handling/ce4.jpg"},
|
|
])
|
|
|
|
|
|
response = {
|
|
"class": clasify,
|
|
"data": data
|
|
}
|
|
|
|
return jsonify(response)
|
|
|
|
@app.route("/submit", methods=['POST'])
|
|
def get_output():
|
|
if request.method == 'POST':
|
|
base64data = request.form['image']
|
|
img_data = base64.b64decode(base64data)
|
|
|
|
img_filename = str(uuid.uuid4()) + ".jpg"
|
|
img_path = "static/assets/temp/" + img_filename
|
|
|
|
with open(img_path, "wb") as f:
|
|
f.write(img_data)
|
|
|
|
result = predict_label(img_path)
|
|
|
|
return jsonify(
|
|
label=result['label'],
|
|
highest_probability=result['highest_probability'],
|
|
other_probabilities=result['other_probabilities'],
|
|
img_path=img_path
|
|
)
|
|
|
|
|
|
|
|
@app.route("/delete_image", methods=['POST'])
|
|
def delete_image():
|
|
temp_dir = "static/assets/temp/"
|
|
|
|
try:
|
|
for filename in os.listdir(temp_dir):
|
|
file_path = os.path.join(temp_dir, filename)
|
|
if os.path.isfile(file_path):
|
|
os.remove(file_path)
|
|
|
|
return jsonify(success=True, message='Semua gambar berhasil dihapus.')
|
|
|
|
except Exception as e:
|
|
return jsonify(success=False, message=f'Terjadi kesalahan: {str(e)}')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|