-
Notifications
You must be signed in to change notification settings - Fork 0
/
cnn.py
117 lines (91 loc) · 5.49 KB
/
cnn.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import pickle
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import load_model
import numpy as np
from helpers import image_load_img_manual
MODEL_CNN_PENYAKIT = 'models/cnn_penyakit.h5'
MODEL_SURVEY = 'models/survey.pickle'
pengobatan = {
"BEF": "Pengobatan dilakukan simtomatik dan pencegahan terhadap infeksi sekunder dengan antibiotik yang dilakukan oleh petugas yang berwenang.",
"Brucellosi": "Dilakukan vaksinasi terhadap ternak yang terjangkit brucellosis Dilakukan uji Red Bengal Test (RBT) dan uji Complement Fixation Test (CFT). Apabila kedua tes mendapatkan hasil positif, maka dilakukan Test and Slaughter.",
"Cacingan": "Obat yang biasanya digunakan oleh dokter hewan adalah dalam jenis benzimidazol, Imida-thiazol dan Avermectin (konsultasi dengan dokter hewan sebelum menggunakan).",
"Masitis": "Menjaga kandang untuk tetap bersih. Memakai antiseptik guna pencelupan puting susu saat sebelum dan setelah pemerahan. Memberikan antibiotik berspek trum misalnya peniciline - streptomicine atau Suanovil (spiramycine).",
"Pneumonia": "Pencegahan yang dapat dilakukan dengan melakukan sanitasi kandang yang benar, dan pisahkan sapi yang sakit pada kandang karantina. Pengobatan dilakukan dengan memberikan vaksin antibiotik untuk memutus siklus pertumbuhan penyebab pneumonia seperti vaksin Ca boroglukonat dan vitamin C, sulfonamid.",
"Hipocalcemi": "Pengobatan dilakukan dengan cara menyuntikkan garam berkalsium lengkap seperti larutan kalsium klorida 10%, larutan kalsium boroglukonat 20-30%, dan campuran berbagai sediaan kalsium seperti Calphon Forte, Calfosal atau Calcitad-50.",
"Skabies/LSD": "Memberikan minyak kelapa dicampur dengan kapur barus kemudian digosokkan pada kulit yang terkena skabies.",
"Diare": "Untuk menggantikan cairan tubuh yang hilang akibat diare pada ternak dapat diberikan cairan elektrolit terutama air, bikarbonat, sodium, dan potassium atau larutan garam agar tidak terjadi dehidrasi yang lebih lanjut.",
"Paratubercolosis": "Hewan-hewan yang positif MAP harus diafkir sesegera mungkin dan seluruh hewan harus dilakukan pengujian kembali dengan kombinasi uji yang berbeda.",
"Kembung": "Memberikan anti bloat yang mengandung dimethicone serta minyak nabati yang berasal dari kacang tanah. Minyak nabati bisa disuntikkan pada sapi yang terkena bloat. Atau dapat di konsultasikan pada dokter hewan untuk pemakaian obat yang cocok.",
"PMK": "Segera mungkin menghubungi puskeswan terdekat. Untuk mencegah penyebaran dapat melakukan biosecurity dengan disinfeksi pada kandang, alat angkut, peralatan lain dan orang yang masuk di lingkungan kandang."
}
urutan_kelas = ['BEF', 'Brucellosis', 'Cacingan', 'Diare', 'Hipocalcemi',
'Kembung', 'Masitis', 'PMK', 'Paratubercolosis', 'Pneumonia', 'Skabies/LSD']
penyakit_gambar = ["Scabise/LSD", "Masitis", "Normal", "PMK"]
def preprocess_image(image_bytes):
# Set your desired image size
# img = image.load_img(file_path, target_size=(150, 150))
img = image_load_img_manual(image_bytes, target_size=(150, 150))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
return img_array
def normalize_image(img_array):
# Normalize pixel values to the range [0, 1]
normalized_img = img_array / 255.0
return normalized_img
def predict_with_model(model, image_bytes):
# processed_image = preprocess_image(file_path)
processed_image = preprocess_image(image_bytes)
normalized_image = normalize_image(processed_image)
predictions = model.predict(normalized_image)
predicted_class = np.argmax(predictions, axis=1)
return predicted_class
def predict(image_bytes, gejala_pengguna):
penyakit = []
penanganan = []
# Load Model Survey
with open(MODEL_SURVEY, 'rb') as file:
loaded_data = pickle.load(file)
# Hasil
hasil_prediksi = loaded_data.predict([gejala_pengguna])
# Misalkan probabilitas_prediksi adalah hasil dari clf.predict_proba([gejala_pengguna])
n = 0
for i in gejala_pengguna:
n += i
if n > 2:
probabilitas_prediksi = loaded_data.predict_proba([gejala_pengguna])
threshold = 0.2 # Tentukan threshold yang diinginkan
# Ambil indeks kelas yang memiliki nilai probabilitas > threshold
kelas_lebih_dari_threshold = [i for i, prob in enumerate(
probabilitas_prediksi[0]) if prob > threshold]
else:
# kalo gejala kurang dari 2
kelas_lebih_dari_threshold = []
print("Maaf gejala tidak menunjukkan adanya penyakit pada sapi anda")
for i in kelas_lebih_dari_threshold:
if loaded_data.classes_[i] in penyakit_gambar:
# Load Model CNN
model = load_model(MODEL_CNN_PENYAKIT)
f = image_bytes
predicted_class = predict_with_model(model, f)
common_elements = urutan_kelas[i] in penyakit_gambar[predicted_class[0]]
if common_elements:
# kalo prediksi gambar sesuai dengan penyakit dari survey
a = loaded_data.classes_[i]
b = pengobatan[loaded_data.classes_[i]]
penyakit.append(a)
penanganan.append(b)
else:
# kalo prediksi gambar tidak sesuai dengan penyakit dari survey
a = loaded_data.classes_[i]
b = pengobatan[loaded_data.classes_[i]]
penyakit.append(a)
penanganan.append(b)
else:
a = loaded_data.classes_[i]
b = pengobatan[loaded_data.classes_[i]]
penyakit.append(a)
penanganan.append(b)
return {
"penyakit": penyakit,
"penanganan": penanganan,
}