From b0fcf988e30d89f3f85f4d647a81d36850de1030 Mon Sep 17 00:00:00 2001 From: EdyAtthoillah123 <112244332+EdyAtthoillah123@users.noreply.github.com> Date: Wed, 20 Sep 2023 01:57:13 +0700 Subject: [PATCH] Feat : Result Category --- .../__pycache__/settings.cpython-311.pyc | Bin 2770 -> 2829 bytes RoboSoil/RoboSoil/settings.py | 4 + .../__pycache__/models.cpython-311.pyc | Bin 227 -> 1118 bytes .../__pycache__/urls.cpython-311.pyc | Bin 637 -> 651 bytes .../__pycache__/views.cpython-311.pyc | Bin 6153 -> 9602 bytes RoboSoil/Robo_Soil/migrations/0001_initial.py | 26 +++++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 1340 bytes RoboSoil/Robo_Soil/models.py | 11 ++ RoboSoil/Robo_Soil/urls.py | 3 +- RoboSoil/Robo_Soil/views.py | 96 ++++++++++++++---- RoboSoil/db.sqlite3 | Bin 131072 -> 135168 bytes 11 files changed, 120 insertions(+), 20 deletions(-) create mode 100644 RoboSoil/Robo_Soil/migrations/0001_initial.py create mode 100644 RoboSoil/Robo_Soil/migrations/__pycache__/0001_initial.cpython-311.pyc diff --git a/RoboSoil/RoboSoil/__pycache__/settings.cpython-311.pyc b/RoboSoil/RoboSoil/__pycache__/settings.cpython-311.pyc index 880132e2700bd6f4de54993a19eedf293974ffa4..800ea9df61aa776f325c3183c20da2c6b1661294 100644 GIT binary patch delta 131 zcmca4+AGGpoR^o20SHnSbEY1j$ScWcv{7A?kuRMgMRpNm6jus!FoUMt<}k)WHg)DI zK0`|*Jwr1KJwqc4JxlXjoH_Z)i8&eh#U)johDPRk20&=I`55~YMlL;|nT$YOT(~)f ZGnrBB0|$ek?F9iFAZp+R!6F@?EC4zHV%6u)!gBu?!(Ffg^jYNreYC1OBTg%EAiR?rNT4=IXta(kCF=_MCz2SLS< zp+g1+#L@vFF`!b^?hO1BiR2;j%G50=Or5wpCzWVXpY3L( zGEAtuGjYphN*?>%JOl)kAqHhd0VL9hPKiexoJ zC}mADF=iw~pS%FDdK$aLFmU_;lv6mt+t&hhqiNU3e!MOg_b#7=)@f5_ zW8|?j%){`VWYd0wC~4Ka-6A*Rm{jc!^>!}m;xsX4F|YA0uK01lcc8&hD4)P*g=bSr z`!{4d>yGuzZrM${wP=ZeUTAO_bqTGyBCvJ-aCx!v+$D}%Stpb->m_q2uB;Gu&tvV% zO2cl|Smi0(W?QUIB|s8|Cz)%%4dMv7o`cZ7A=Bn2roqFzH@WJ9p_%`3@9R?E%!@mb zAB%!ZSu;o=#0w+{1xbW>#10i$N9a|@rlH3X{RYV*pO#mw6N-aGsqQ(fMp{9v$lNM( zg4ko5);rB0DGLZ$s+@J8E$`Zn+;L_^ApH?zl-RA1q_v5&ZP)kgmXqS%@4zwn;)v26 z@##w?fcufF?!`4Ut=?KnRCmw*T)vN@$Sh Tzp8r0_fLL{{XhS4%5;ALvGoi4 delta 171 zcmcb|@t84vIWI340}$L=^)JN+NIwQ~V1NnA_$&luOlL@8NMX!j$YqRTWMoKT3TDt` zehE^b$#{z`H$Npcr`S)E=@w^7R$^XyzFtaF5i?M7CBtWsn#undoveOw*Z|d)=A_yc daR9{_fw))}NPJ*sWMsU-Aaem5Dq;hw0048|Ccppy diff --git a/RoboSoil/Robo_Soil/__pycache__/urls.cpython-311.pyc b/RoboSoil/Robo_Soil/__pycache__/urls.cpython-311.pyc index f05bd53ee69aa8d541a4c6cc714658301d8b7698..4bcfe93564f04c370c08dcd0677fb62d0bbbda9a 100644 GIT binary patch delta 157 zcmey%(#^`doR^o20SNYN<4i4|$a_zwinp{NCqFSIJ~KBlJyrh}4-$9ccUi_;lO-5E zSc^D-dM2kbmT`#!8H_+&JaO_<#y}4)23F1nmk#+Es#m0RHrQQYak|LjbcMy~13L>p u(+3U)7On=f4vi~ZGAlf;=-6LicDTswaE007BPR>LBVz+M2o?zgjROD&j4s&# delta 144 zcmeBX{ma6;oR^o20SMGC{!1~K$a|0H7Q-#h^rFPd;^f4f$?S}>EJYj)43kwEJy>rs z=Oh(OE@CX>5(8>r1mfZelRq&Ax^pnFayGbh2z7+^M9zr5z@mAPMe_=a<_A`0ex?s> r3@ls?W*r(=xMWs%T+y+=!0d35+2IPa!$)>zen-XzZV)UI0h$H?+nRf3gtC4MDw9~WO?&>AIOJk) zL)vq9Ki~6zeV+f_b9er*>HXuDpPJ1^0=Mta8JIu0Z&}=A=GL~u=Lw`5p?hhhn<9G6 zNRMej6s8p!Fm1?)X;%@99jWe;1Tl+`W37MvdySO`B5E8u(r0OC3^sT#_D&OK_ z(bEh!8jEs_pUj*3IrhCP%ylL*%HR6>ucTq_F?m!&I_6BeaW%PR?uUk-kmSxeziC`s z?T#=g9NIAw8Vp6f&EA$KZ-1n5Xp|XXDV%C4{n%D#T#%DKjRlv|FKo@ug#(|S{e1Sz z-vkyacg)x5Zu}^)l-_UOkX$nNgrWl>-pevk6dGh5*e$O+Eq4}L-u>AzT15oEQOnXE z24UM3DHZ%iD@)IWqXPrs<*;N~a5dnve93*B;hBLL8}^{zG6z@^xT&%EZ%x>MsS!BKG~%@h?XN54aT{+_x%%m?Uzh+PPWhZ&k_p zvex_8#j>DO7MwgWuQ3S5YEk2rG+v>wvp($Bzj}3XM~4q6%eP8R0S>?AH%Bs6h#mXbx3)|MoRn{ESv zK5>e9@Vkg0A##PtV7m0C_BrXyp-r}l+mUq6&JS49t=*P84r;L)&DJ)F|uegqf z8}P(Re~2z9*17BX%7O-m*DIG^g5o#6(jtBOcV@R6Q4=^z!k|zY;)b+fc2ygYaROHp znI^Db!lgB zIc`Q(B?nWgNMKu-ycumAmY2%9;#${_BzhU=*tEv4y5N^o460Ps%*eaO(N}O(__>M_ z*5ZV|VR=ce8=SI?hww6pD(kp;eK1_dEpi=eTR7|E+9j$2lYt%9M8g=BWU#;pX2!O{Qn+yPhfObF!;1Hk_&;>XQI085dI0kqN za2)V903M_4JAjjbQ-E&3X+RI)4B#x_9N;|Q0+GbL2&cV(OMpI%ygtHk9G>b#?U7LA zYKZk-W!S+G7asAV@EHCI2n~Ai7Xt2#vN4X~CdyASY$P1zLs-bmZ~tqdkudVx^STJb z55`bld-&MfT|IeKjAQ#DgJviej^>k^Xeh$uHL+19n%DIYjzx#Lymp+$pAPJ07|pwY zD}e6+;GNEf08Ic`34S|!760Td%Bzt#$`|FzXow%on-IhC;b@2t$D(4cn>fD7zBg?LjYKy>MCTi?1$B^+HqP+mTl9f7p`SN8c@ghaoHl#H3Nr&rpedbJdr|77a z9JML^ytDjvTUP(2Q}XW@oo$k{Ek(_{>hJ9pUColKIc1!u%z~x!fe{1mBGn~PT>{mW z^VZ)xD|&Yc)JECjlF)fkuw25sNcBlnpFs6J^|d}I7kz<8wW9CHie1vuF4PAEOiQ~+ zbx2f)Ky~D3Uy96`=+t+oTT(6aw0&lWNN<+t&4Rq=%$6D7^tsfz44G-aqs?f+qVB_! zH&3SU2HM)`-c)aTP+T7rlW;tzz{t zfvS?{91#2m1Ph)`K%{~a6%?poj`l83g`I9qwH8IqCGluCPoGbn&)73p?^I+eibnhY zXdO_cqNMUvc8c^aiQbhI=v}LG*(!REzRp~@={>1EMPZ@vTc$6hE@XTe?oM5%u4pPH zw8=GBt%Q1w)(KTAO1gF~cq;SmeGm4E?oP?wnKH}QWQ$1ENK}nL)jYFSW-bbKCxxn0 zqP1JHb_-PZv#w=fP^fAbtsRmTZa)s5?!VmB(BW1;c56DS^pC4aOusX4LqqtlRjiR4 zjIn(G7|*frJT9_H<8WGbUV?%t5n2lu!1fr_)9W`R)bIl?e0Z|NUb9PECR^eqyr;PF?! nW>P)bdBZS;Z5DNe%DkxRBFRJKA|d}gS7XssrBb+}lSlJ!oN2ao delta 698 zcmZqj?ljw!U-h#Q@DVn z024#1Knl|`Mh1q}Knwwl3@J>(44T|8L0nD7TWm$Cc`2zyejsK+WkF7U36RC(QBqP6 zlv-SnpI4j;vp~%NQ6M%m!(;)*tBf3*pD}u{FbZzgXDerBRNB0pb15UE z!De6Xa#khj+|-oJME&g4r2M?Zy!6t%bOlp`W&NMeZs$kB-zMM6MLx7dQf zoOIK;U7kEl3=S`u!J@&bDL}PQQ4WWftYFcQOrTgM#8^fV2e^R{@hS=L)RNTn{Gv>S zkj#|CYz3FhlGNPNY@k8LK)`2Qta>1Q&Jl$TMI8n}r!otfGgeKu7LpTASK0Ze{mbp+ z`_p@NW^?{ra31L393e^b^jR}OV5dD;zp?RUd#K1wdx)1A9>Am?!$dv+_3jb+Clm~H zuqhB1e`jJ~XkfU(t+Dxx@EInzuWSsW<{K(5ia1;macJ=UD#O6ab%9I%B8$Qm7KIBi zRHO*hswsF&ASDav`h30OjQpaKl*e5Pqa6N~9!5a$P8uWHm#YMvkG#88Q@Vp~QyLw2gr#X$lYm2-@$7p-u9s zBo)+I>Y+o&Y}GGNQCLH_`X_Xx01m>N0(43z2F{eJ$0x}J>Hs)&}q^!UzjCas*9qL`@Wsi0&aQ{)}*n2nP^5mocD|b4yEM z=@DwAUnS0l$W+HNJtMHF>oeJ*nAraQB9K1{3*+pTkfbC?6EM<5ENCecX_AOY`aoU= zU=gQaCv%WJ-x08YC7hnfV+qQDHJ84KGn}a`cg6rtmIeZU_C0>(J${w@c{7vO;@l)Z zhBKVNnhWG8a87QygI6Y(E^vyRlRxK3lhXe=W@fTF7UA8n=3)w30e=9EUSrCGWrrWL z^nJ%L2@@^cW#avvhQ#v5FrfOrM~r}AmK%7MV|YjUAvt1-Pdv-8t>=X0pAm15`b2jP zhp_Cf6?oJnE|a^|?^BP-UjuLGurx%Q8o{MH z#*ey9Tr+selmR3#tV6>EM+TF=F|-314~Zv~`xddWzuQ=0S)JFQ>rB;kn3thV0Oxi6 zhoNC7WUw-pYXwj_%VRPiE++22MSL%rL6+O*M}3e?nwN|N%ip!kJJ5t~l7p#TC^uMO z-mN)Swx1f_9Omy*Y7@g57SM3qihyfZ6R z!rJDj8`U;XQ(>(=t+k_CJ1l-aE7ijK)~FxVw@yC^>z!%66V;Q5_)>OlB~IrQ^)&+Z zCQ)&!uqq#am0aGZ%fs)&z$%#cuZj2g2j$;z-kxg-jdQO9dYf&}$Kwlc1I*;F^Phl< kQ-UDGG7=ggx_0)Oyhwg3PC literal 0 HcmV?d00001 diff --git a/RoboSoil/Robo_Soil/models.py b/RoboSoil/Robo_Soil/models.py index 71a8362..ad27a1c 100644 --- a/RoboSoil/Robo_Soil/models.py +++ b/RoboSoil/Robo_Soil/models.py @@ -1,3 +1,14 @@ from django.db import models # Create your models here. + +class Image(models.Model): + Nitrogen = models.FloatField() + Fosfor = models.FloatField() + Kalium = models.FloatField() + image = models.ImageField(upload_to='images/') # Kolom untuk gambar + tanaman = models.CharField(max_length=100) + perbaikan = models.BooleanField(default=False) + + def __str__(self): + return f"Image - Tanaman: {self.tanaman}" \ No newline at end of file diff --git a/RoboSoil/Robo_Soil/urls.py b/RoboSoil/Robo_Soil/urls.py index 862651f..f9207d7 100644 --- a/RoboSoil/Robo_Soil/urls.py +++ b/RoboSoil/Robo_Soil/urls.py @@ -5,7 +5,8 @@ from django.conf.urls.static import static urlpatterns = [ # path("", views.home, name="home"), - path("", views.lbp, name="grayscale"), + # path("", , name="grayscale"), + path('upload_image/', views.upload_image, name='upload_image'), ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/RoboSoil/Robo_Soil/views.py b/RoboSoil/Robo_Soil/views.py index 1ba097f..4ee8746 100644 --- a/RoboSoil/Robo_Soil/views.py +++ b/RoboSoil/Robo_Soil/views.py @@ -2,8 +2,9 @@ from django.shortcuts import render import cv2 import numpy as np from matplotlib import pyplot as plt -from django.http import HttpResponse -from scipy import stats +from django.http import JsonResponse +from django.views.decorators.csrf import csrf_exempt +import os def get_pixel(img, center, x, y): new_value = 0 @@ -51,7 +52,7 @@ def find_mode_pixel_value(img): return mode_value def lbp(request): - path = 'media/kebonangung 50cm.jpeg' + path = 'media/lahan 4 50 cm.jpeg' img_bgr = cv2.imread(path, 1) img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) mode_pixel = find_mode_pixel_value(img_gray) @@ -106,22 +107,79 @@ def lbp(request): print("Sangat Tinggi") else: print("Lebih dari atau sama dengan 2") - - # Hitung histogram LBP yang telah dinormalisasi lbp_histogram = calculate_normalized_lbp_histogram(img_gray) - - # Cetak nilai-nilai LBP yang telah dinormalisasi - # print("Nilai-nilai LBP yang telah dinormalisasi:") - # for i, nilai in enumerate(lbp_histogram): - # print(f'LBP Nilai {i}: {nilai}') - - # Plot histogram LBP yang telah dinormalisasi - # plt.bar(range(len(lbp_histogram)), lbp_histogram) - # plt.xlabel('Nilai LBP') - # plt.ylabel('Frekuensi yang Dinormalisasi') - # plt.title('Histogram LBP yang Dinormalisasi') - # plt.show() - print("Program LBP selesai") - lbp(None) + + +@csrf_exempt +def upload_image(request): + if request.method == 'POST' and request.FILES['image']: + uploaded_image = request.FILES['image'] + image_path = os.path.join('media', 'uploaded_images', uploaded_image.name) + + with open(image_path, 'wb+') as destination: + for chunk in uploaded_image.chunks(): + destination.write(chunk) + + path = image_path + img_bgr = cv2.imread(path, 1) + img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) + mode_pixel = find_mode_pixel_value(img_gray) + print(f"Nilai pixel yang paling sering muncul: {mode_pixel}") + normalized_mode_pixel = mode_pixel / 255.0 + print(f"Nilai yang sering muncul yang telah dinormalisasi: {normalized_mode_pixel}") + + hasil_operasi_Natrium = (normalized_mode_pixel * 0.1928 + 0.021) + print(f"hasil Nilai N (Natrium): {hasil_operasi_Natrium}") + N = hasil_operasi_Natrium + if N < 1: + print("Sangat rendah") + elif N >= 1 and N < 2: + print("Rendah") + elif N >= 2.001 and N < 3: + print("Sedang") + elif N >= 3.001 and N < 5: + print("Tinggi") + elif N >= 5.001: + print("Sangat Tinggi") + else: + print("Ketegori Tidak Ditemukan") + + hasil_operasi_fosfor = (normalized_mode_pixel * -10.725) + 16.533 + print(f"hasil Nilai P (Fosfor): {hasil_operasi_fosfor}") + P = hasil_operasi_fosfor + if P < 10: + print("Sangat rendah") + elif P >= 10 and P <= 25: + print("Rendah") + elif P >= 26 and P <= 45: + print("Sedang") + elif P >= 46 and P <= 60: + print("Tinggi") + elif P > 60: + print("Sangat Tinggi") + else: + print("Lebih dari atau sama dengan 2") + + hasil_operasi_Kalium = (normalized_mode_pixel * -0.1864 + 0.2471) + print(f"hasil Nilai K (Kalium): {hasil_operasi_Kalium}") + K = hasil_operasi_Kalium + if K < 0.1: + print("Sangat rendah") + elif K >= 0.1 and K <= 0.3: + print("Rendah") + elif K >= 0.4 and K <= 0.5: + print("Sedang") + elif K >= 0.6 and K <= 1.0: + print("Tinggi") + elif K > 1.0: + print("Sangat Tinggi") + else: + print("Lebih dari atau sama dengan 2") + lbp_histogram = calculate_normalized_lbp_histogram(img_gray) + print("Program LBP selesai") + + return JsonResponse({'message': 'Gambar berhasil diunggah dan diproses'}) + else: + return JsonResponse({'message': 'Permintaan tidak valid'}) \ No newline at end of file diff --git a/RoboSoil/db.sqlite3 b/RoboSoil/db.sqlite3 index 15ea617dd2e9ea46df3f2816d258c9fb5787f500..0708aebffb745f60e64d3712130bbbabe4c54104 100644 GIT binary patch delta 935 zcmZWnO-$2Z81CC{w5%K7*rt=MxNdP8!jugp%1`7kpoRqyFvJ70j@2>PR-A){lT&Zw z;IJ_xUJ&EOBWX+%!@+RDctMRMNJ8{th<_JJG#V4FoiKzZ-7m8a_14$aoba8lt2^bDdhGQUV8rRFb3lr(t14-;P8mj`6oyg~<&7bWS>v$6 z&X`Dy3-hEn-84lo^twnk`zU>@{xJQMUYDHgJ^K1#MvH;7f}D)-sUcO}#>Lsch*gox zuJql<$q*mqlYBvu$Nx08yk>ZWi-&h<@;I+y$`p;`7|De~g&|ys4CUKW!2ggS7{i)K z_V}n0WcX$HU|3Tk&Kk}dHQ-)>03aE)+SO`PYne3h_IAL9U>QS4N?sMO7A+Z4`b?2UJD|Bse=lyL z+UZ8(87#|3n_(X0%~4pv7hZaBd8q?x0mpj8AEaL%k3$yZ)$`B~=7UzJ6K;$pxnPv% zCXypV;Y99n3>I@|nn9GO{V-+rAZ!cMH5NajHYiikN5w6MOT;DODV~N5-iB?JY;128 zaY6JMGxC!F%;Hd;>l=m!T(>D_hhc!!U>NaD{xk|-iO!pBHEFG^gj*@qcxOHGzhVz` zw)M8R^tZG9Ev^1`*0rZAw&-iSyCTVi5a#19HoKd&xXZYBa&opL+L#km+4S8=(5$N5B%i;QuKQBV*HMin{<-u>>rlhv3=G>M@v k=nZ;~7SSBaph?N;4Iqn2c>srXC%oz-XI5a+`ygxl18?{YF8}}l delta 356 zcmZozz|qjaF+o~To`Hcu0f=G1YNC!Yqx{B%`TQKhyg)%A?tsbc0;-!86;!x42S{6q zFiK4B*7sm!n|wuIn^TAjsDzEbn_)ATK`#Hq1!9xC?JJojcoHVFI~W4>Xz*-K@L9sl zEWsx~nLPj`@|<_GeB9GQW(oe%$?O+EBDVaSOYiq5C~>h&W#CugyTo~w?GSG{PZygA zYdFhP?(ZGxb2**BkKJkGT7f-ckcLvD8gvc21fu~L{%nBg-6e->W>?^d1{T+gR-BrwWMHWcXDzAJ%o1{0(H z^x$MhYbFMU?Gut2!`WGy>!jJYzs_R(#5}o_S8%#S9;5Q~3J*r<>5QI?R~WfAGd}q5 lKWPGs02_Z71OHq8oBXHv_wdi>@7gR_P{zN#>pWwb0RW8jXQTiC