fitur menambahkan rule forward chaining
This commit is contained in:
parent
311641f6e9
commit
2407cd7410
|
@ -86,6 +86,90 @@ def find_mode_lbp_histogram(lbp_histogram):
|
|||
mode_frequency = lbp_histogram[mode_value]
|
||||
return mode_value, mode_frequency
|
||||
|
||||
# Definisi kriteria penilaian kesuburan tanah dalam bentuk dictionary
|
||||
kriteria_kesuburan_tanah = {
|
||||
"KT001": "Sangat Rendah",
|
||||
"KT002": "Rendah",
|
||||
"KT003": "Sedang",
|
||||
"KT004": "Tinggi",
|
||||
"KT005": "Sangat Tinggi"
|
||||
}
|
||||
|
||||
# Definisi sifat tanah berdasarkan rentang kadar NPK
|
||||
sifat_tanah_npk = {
|
||||
"NKT001": ("Nitrogen Sangat Rendah", 0.00, 0.10),
|
||||
"NKT002": ("Nitrogen Rendah", 0.10, 0.20),
|
||||
"NKT003": ("Nitrogen Sedang", 0.21, 0.50),
|
||||
"NKT004": ("Nitrogen Tinggi", 0.51, 0.75),
|
||||
"NKT005": ("Nitrogen Sangat Tinggi", 0.76, float("inf")),
|
||||
"FKT001": ("Fosfor Sangat Rendah", 0, 15),
|
||||
"FKT002": ("Fosfor Rendah", 15, 20),
|
||||
"FKT003": ("Fosfor Sedang", 21, 40),
|
||||
"FKT004": ("Fosfor Tinggi", 41, 60),
|
||||
"FKT005": ("Fosfor Sangat Tinggi", 61, float("inf")),
|
||||
"KKT001": ("Kalium Sangat Rendah", 0, 10),
|
||||
"KKT002": ("Kalium Rendah", 10, 20),
|
||||
"KKT003": ("Kalium Sedang", 21, 40),
|
||||
"KKT004": ("Kalium Tinggi", 41, 60),
|
||||
"KKT005": ("Kalium Sangat Tinggi", 61, float("inf"))
|
||||
}
|
||||
|
||||
# Definisi rekomendasi tanaman berdasarkan tingkat kesesuaian tanah
|
||||
rekomendasi_tanaman = {
|
||||
"R001": "Kategori S1 Sangat Sesuai Untuk Ditanami Padi Sawah Irigasi, Wortel, Bawang Merah, Bawang Putih",
|
||||
"R002": "Kategori S2 Cukup Sesuai (Sedang) Untuk Ditanami Padi Sawah Irigasi, Wortel, Bawang Merah, Bawang Putih",
|
||||
"R003": "Kategori S3 Sesuai Marginal (Rendah) Untuk Ditanami Sawah Irigasi, Wortel, Bawang Merah, Bawang Putih",
|
||||
"R004": "Kategori S1 Sangat Sesuai Untuk Ditanami Jagung, Sorgum, Gandum, Kedelai, Kacang Tanah, Tebu",
|
||||
"R005": "Kategori S2 Cukup Sesuai (Sedang) Untuk Ditanami Jagung, Sorgum, Gandum, Kedelai, Kacang Tanah, Tebu",
|
||||
"R006": "Kategori S3 Sesuai Marginal (Rendah) Untuk Ditanami Jagung, Sorgum, Gandum, Kedelai, Kacang Tanah, Tebu",
|
||||
"R007": "Kategori S1 Sangat Sesuai Untuk ditanami Ubi Kayu, Ubi Jalar",
|
||||
"R008": "Kategori S2 Cukup Sesuai (Sedang) Untuk ditanami Ubi Kayu, Ubi Jalar",
|
||||
"R009": "Kategori S3 Sesuai Marginal (Rendah) Untuk ditanami Ubi Kayu, Ubi Jalar",
|
||||
"R010": "Kategori S1 Sangat Sesuai Untuk Ditanami Kakao, Kapas, Kayu Manis, Vanili",
|
||||
"R011": "Kategori S2 Cukup Sesuai (Sedang) Untuk Ditanami Kakao, Kapas, Kayu Manis, Vanili",
|
||||
"R012": "Kategori S3 Sesuai Marginal (Rendah) Untuk Ditanami Kakao, Kapas, Kayu Manis, Vanili"
|
||||
}
|
||||
|
||||
# Definisi aturan rekomendasi tanaman
|
||||
rule_rekomendasi = {
|
||||
("NKT003", "FKT004", "KKT003"): "R001",
|
||||
("NKT002", "FKT003", "KKT002"): "R002",
|
||||
("NKT001", "FKT002", "KKT003"): "R003",
|
||||
("NKT001", "FKT001", "KKT003"): "R003",
|
||||
("NKT003", "FKT004", "KKT004"): "R004",
|
||||
("NKT002", "FKT003", "KKT002"): "R005",
|
||||
("NKT001", "FKT002", "KKT001"): "R006",
|
||||
("NKT001", "FKT001", "KKT002"): "R006",
|
||||
("NKT001", "FKT002", "KKT002"): "R006",
|
||||
("NKT001", "FKT001", "KKT001"): "R006",
|
||||
("NKT003", "FKT003", "KKT003"): "R007",
|
||||
("NKT002", "FKT002", "KKT002"): "R008",
|
||||
("NKT001", "FKT001", "KKT001"): "R009",
|
||||
("NKT003", "FKT003", "KKT004"): "R010",
|
||||
("NKT002", "FKT002", "KKT003"): "R011",
|
||||
("NKT002", "FKT001", "KKT003"): "R011",
|
||||
("NKT001", "FKT001", "KKT002"): "R012",
|
||||
("NKT001", "FKT001", "KKT001"): "R012"
|
||||
|
||||
}
|
||||
|
||||
# Fungsi untuk mendapatkan sifat tanah berdasarkan kadar
|
||||
def get_sifat_tanah(kadar, jenis):
|
||||
for kode, (sifat, min_val, max_val) in sifat_tanah_npk.items():
|
||||
if jenis in kode and min_val <= kadar <= max_val:
|
||||
return kode
|
||||
return None
|
||||
|
||||
# Fungsi untuk mendapatkan rekomendasi tanaman
|
||||
def get_rekomendasi(nitrogen, fosfor, kalium):
|
||||
kode_n = get_sifat_tanah(nitrogen, "NKT")
|
||||
kode_f = get_sifat_tanah(fosfor, "FKT")
|
||||
kode_k = get_sifat_tanah(kalium, "KKT")
|
||||
|
||||
rekomendasi = rule_rekomendasi.get((kode_n, kode_f, kode_k), "Tidak ada rekomendasi yang sesuai")
|
||||
return rekomendasi_tanaman.get(rekomendasi, "Tidak ada rekomendasi")
|
||||
|
||||
|
||||
def lbp(request):
|
||||
# Proses Memasukkan Image
|
||||
path = 'media/lahan 5 50cm.jpeg'
|
||||
|
@ -159,17 +243,31 @@ def lbp(request):
|
|||
mode_lbp_value, mode_lbp_frequency = find_mode_lbp_histogram(lbp_histogram)
|
||||
print(f"Nilai histogram normalisasi yang paling sering muncul: {mode_lbp_value}")
|
||||
print(f"Frekuensi ternormalisasi dari nilai yang paling sering muncul: {mode_lbp_frequency}")
|
||||
|
||||
# Hitung kadar NPK berdasarkan mode LBP frequency
|
||||
hasil_operasi_Natrium = mode_lbp_frequency * 0.1928 + 0.021
|
||||
round_natrium = round(hasil_operasi_Natrium, 2)
|
||||
print(f"hasil Nilai N (Natrium): {round_natrium}")
|
||||
nitrogen = round(hasil_operasi_Natrium, 2)
|
||||
print(f"Hasil Nilai N (Nitrogen): {nitrogen}")
|
||||
|
||||
hasil_operasi_fosfor = (mode_lbp_frequency * -10.725) + 16.533
|
||||
round_fosfor = round(hasil_operasi_fosfor, 2)
|
||||
print(f"hasil Nilai P (Fosfor): {round_fosfor}")
|
||||
fosfor = round(hasil_operasi_fosfor, 2)
|
||||
print(f"Hasil Nilai P (Fosfor): {fosfor}")
|
||||
|
||||
hasil_operasi_Kalium = mode_lbp_frequency * -0.1864 + 0.2471
|
||||
round_kalium = round(hasil_operasi_Kalium, 2)
|
||||
|
||||
kalium = round(hasil_operasi_Kalium, 2)
|
||||
print(f"Hasil Nilai K (Kalium): {kalium}")
|
||||
|
||||
# Analisis sifat tanah berdasarkan kadar NPK
|
||||
sifat_nitrogen = get_sifat_tanah(nitrogen, "NKT")
|
||||
sifat_fosfor = get_sifat_tanah(fosfor, "FKT")
|
||||
sifat_kalium = get_sifat_tanah(kalium, "KKT")
|
||||
|
||||
print(f"Sifat tanah berdasarkan kadar Nitrogen: {sifat_tanah_npk.get(sifat_nitrogen, ('Tidak ditemukan',))[0]}")
|
||||
print(f"Sifat tanah berdasarkan kadar Fosfor: {sifat_tanah_npk.get(sifat_fosfor, ('Tidak ditemukan',))[0]}")
|
||||
print(f"Sifat tanah berdasarkan kadar Kalium: {sifat_tanah_npk.get(sifat_kalium, ('Tidak ditemukan',))[0]}")
|
||||
|
||||
# Menampilkan rekomendasi tanaman
|
||||
rekomendasi = get_rekomendasi(nitrogen, fosfor, kalium)
|
||||
print(f"Rekomendasi tanaman: {rekomendasi}")
|
||||
|
||||
lbp(None)
|
||||
|
||||
|
|
Loading…
Reference in New Issue