From fc682dc8a73961e957c0159780edd334d9e061c3 Mon Sep 17 00:00:00 2001
From: Adam Drake <drakeadam02@gmail.com>
Date: Wed, 1 May 2024 20:00:16 +0100
Subject: [PATCH] Model photo upload working and sent to view method

---
 .../__pycache__/views.cpython-310.pyc         | Bin 6489 -> 6666 bytes
 .../templates/prediction_service/model.html   |   8 ++
 prediction_service/views.py                   | 109 ++++++++++--------
 3 files changed, 68 insertions(+), 49 deletions(-)

diff --git a/prediction_service/__pycache__/views.cpython-310.pyc b/prediction_service/__pycache__/views.cpython-310.pyc
index 2e755bf083b35911ef1295762512091c0b587d84..e9aa17e3345c700c626306adbe7ced8b8388f99c 100644
GIT binary patch
delta 2346
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
M7<m{cOH0}T0782jg8%>k

delta 2016
zcmeA&xoO0g&&$ijz`($;s?{isS9&6!3}ebfZJm0S6xJN}T#hIXMurrY6t*1BT&^fC
zFq=JxGnYGxn~@=fA%!D{Czm&hmyscrErm0MtA(MNF^VsRJB6o(A&NhRA%!W2IhQ4h
z1*{L*Jl-76T!AQoT)`;8T%jl-Murr=6#f>5DB%=_6oDL(T+#X{(Oj`8F|Z{FLl{yR
za~N_NqZo6UqL{#PV8w8?EGdFHoKORWQiNL=qQp~JQbcmtb0wlAz>a`>B$X{iG(`;T
zV96AQ6!9FXC@C;49VMN@kYX>MBNHVH7Ld!8k5T|zCZ3}hrI^ByB9Wt%s~n{a6;p{)
zNo7lsOpyW`rkWxi%%CYfc>$x$<TH$W7&#_)GU+l3Oy169%P2JYD^s=r9|HqJkpP?!
zoLs;x#wfD6omrewNeUz^&A`C0lCcOx-QrHnj8Dx=&&*3rEppRjDw3XjfF+xa9i&WR
zvLUN_hA4>1!@$6Bi!He*HL)bMNDL$*4kB1U!tBMR$;qk3#YM~@AtnX}22Hjiup1OX
z0w7z8Bta~Y-BCQH#i>Q{1x5L3nK`K_t~|hM&Zs&02dgZj_+&A*!)g*BJs^#@I0_Pr
zi_7ziQZ$($Ch35rWI=??<o|53j0%%u*#qj8KmuT0Y9N*t$Z^~t>tMEl98d&yILJRm
zav)V;FR-Q-73CK}JfIB{1^a>(;tP-yioiC4y#lrtDRjZM`1&|HPS)YjXEc}`!*Ns)
z<OnxS##?O3`MJ57B}KB6jX3ofbtflsM%04>MN^;%>{vsPT_D9p${>~shyYn~i!HIV
zBqP75NDm|ea`r8r%;Nas(t^|?kcWyut}fC5NrD627{t;C5nzWiLmUpW=@v^tesKv>
zI5P@Pw&XHnG@o3+C1uFVz`!8Gz`)?lz`#%(!pOi-!mxlbogsyB5jx2P7Ga)zl*@NA
z54Xf*EpDEAgeu8}jI~TPOj%4RqLK`?%wU$7BttDr33C=pidc$Rig=1dFLMl2Eo&`X
z4O<p#4HGCm_cAdul&~#eU&v6)Uc;KjQNx}hogxDgtzlolnIgK7k&&T<YXNr+`$EQA
z4ya1b8jdWU8qO41cZkvw-UWO$oD29DGAv|VAdn)rkg=AlL@-MzOSpzHMZTA@mb*lx
zhC55NnX#6qM68A(MWKePh9^aF4pTF8FoUL&-{gZlX_FgxBqtk)Mobpq=bx;>+sSA>
z*^p0V@-^NTM#sqqg<U4k=d*&c<oMaxJQx@lUe-=tD6BC#h(8d*wV1q6Sd+~T6bT-a
zAM!c~fD+ov=U_faxhz<DfB+k#$K->;4s4EKnaOhnjM+jU%!xb(li37C89gS;2*L$J
z1s%APK>GiH6uC}T6x8!c1o8iZh_@i(JV+)JPNaiaU>E)Z$$kKF{XwjL5GxwQ0>$~u
zmmqG|<cT~olMO`0Ci@6+OBH~GP>Giy%Zmag7YZqX{aNG&)e+9~awSMP*rraXU<7wD
zT+9+C##lU=N2HDoA~Sh{NF_p1kuyvYM63*?8zEK!;({yyt5f1-0~IbzFTtt5a<ZdX
zf-uu9_RQS$_~MeHTdX;Wm8nIV;*-ybdGJ_(vL#D?L26!+%48*RO&v~<QQ&M3DjaSx
zgLJTgbrctYGYu~!(}1$l<Ti0zvl@^I?72C)`6;P6QCwi9$@!&u$eBqHWN0q~14B7D
z12Hf#O#Uw(#L4l$2qdVfHaSK@R*)|xD={xUUoSa7ucRn5sfcCr90?V9R*><mY57ID
z#YLdf_7)r1qT(VBkeQs5?@K7igR0FUArM~#M1V_TMB%GBSx!<?3slM#fy*odkQ#7_
zVh%E!DZjX=k%56BiZ!n^x1h49ZgQfeyjKHQB)1?Z#rPI;fTvFpD4>d3L0UmhMk*-4
iMI6Y3w>WHa^HWN5QtcQ)zI0+>U=U#7VVZnK(hdOgox`{Q

diff --git a/prediction_service/templates/prediction_service/model.html b/prediction_service/templates/prediction_service/model.html
index 9303fda..1fc09a5 100644
--- a/prediction_service/templates/prediction_service/model.html
+++ b/prediction_service/templates/prediction_service/model.html
@@ -10,6 +10,14 @@
     <img src="data:image/png;base64,{{ img_str }}" alt="PIL Image">
 
     <h2>Model Layers: {{ layer }}</h2>
+
+
+    <form action="/mlmodel/{{ modelID }}/" method="post" enctype="multipart/form-data">
+
+        {% csrf_token %}
+        <input type="file" name="photo" id="photoInput" accept="image/*">
+        <button type="submit">Upload Photo</button>
+    </form>
     
 </div>
 
diff --git a/prediction_service/views.py b/prediction_service/views.py
index 31cb174..62349c9 100644
--- a/prediction_service/views.py
+++ b/prediction_service/views.py
@@ -1,5 +1,5 @@
 from django.shortcuts import render, redirect
-
+from django.http import HttpResponse
 from django.contrib import messages
 from django.contrib.auth.decorators import login_required
 # messages.debug
@@ -119,51 +119,62 @@ import base64
 @login_required
 def mlmodel(request, pk):
 
-    matrix = np.asarray([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,232,39,0,0],
-                     [0,0,0,0,62,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,180,39,0,0],
-                     [0,0,0,0,126,163,0,0,0,0,0,0,0,0,0,0,0,0,0,2,153,210,40,0,0],
-                     [0,0,0,0,220,163,0,0,0,0,0,0,0,0,0,0,0,0,0,27,254,162,0,0,0],
-                     [0,0,0,0,222,163,0,0,0,0,0,0,0,0,0,0,0,0,0,183,254,125,0,0,0],
-                     [0,0,0,0,46,245,0,0,0,0,0,0,0,0,0,0,0,0,0,198,254,56,0,0,0],
-                     [0,0,0,0,120,254,0,0,0,0,0,0,0,0,0,0,0,0,23,231,254,29,0,0,0],
-                     [0,0,0,0,159,254,0,0,0,0,0,0,0,0,0,0,0,0,163,254,216,16,0,0,0],
-                     [0,0,0,0,159,254,0,0,0,0,0,0,0,0,0,14,86,178,248,254,91,0,0,0,0],
-                     [0,0,0,0,159,254,35,0,0,47,49,116,144,150,241,243,234,179,241,252,40,0,0,0,0],
-                     [0,0,0,0,150,253,237,207,207,207,253,254,250,240,198,143,91,28,233,250,0,0,0,0,0],
-                     [0,0,0,0,119,177,177,177,177,177,98,56,0,0,0,0,0,102,254,220,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,137,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,57,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,57,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,255,94,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,96,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,153,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,255,153,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,254,153,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
-
-    # Matrix dimensions
-    raw_height = matrix.shape[0]
-    raw_width = matrix.shape[1]
-
-    fig, ax = plt.subplots(1, 1, figsize=(4, 4))
-    ax.imshow(matrix, cmap='Greys_r')
-
-    buf = io.BytesIO()
-    fig.savefig(buf, format='png')
-    buf.seek(0)
-    img = Image.open(buf)
-
-    # Convert PIL image to base64 string
-    buffered = io.BytesIO()
-    img.save(buffered, format='PNG')
-    img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')
-
-    mlmodel = MLModel.objects.get(id=pk)
-    layercount = str(mlmodel.layers)
-
-    return render(request, "prediction_service/model.html", {'img_str': img_str,
-                                                             'layer': layercount,})
\ No newline at end of file
+    if request.method == "POST":
+        # Handle form submission here
+        # For example, you can process the uploaded file
+        uploaded_file = request.FILES['photo']
+        # Process the uploaded file as needed
+
+        # Return a response indicating successful upload
+        return HttpResponse("<h1> You uploaded your photo ! </h1>")
+    else:
+
+        matrix = np.asarray([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,232,39,0,0],
+                        [0,0,0,0,62,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,180,39,0,0],
+                        [0,0,0,0,126,163,0,0,0,0,0,0,0,0,0,0,0,0,0,2,153,210,40,0,0],
+                        [0,0,0,0,220,163,0,0,0,0,0,0,0,0,0,0,0,0,0,27,254,162,0,0,0],
+                        [0,0,0,0,222,163,0,0,0,0,0,0,0,0,0,0,0,0,0,183,254,125,0,0,0],
+                        [0,0,0,0,46,245,0,0,0,0,0,0,0,0,0,0,0,0,0,198,254,56,0,0,0],
+                        [0,0,0,0,120,254,0,0,0,0,0,0,0,0,0,0,0,0,23,231,254,29,0,0,0],
+                        [0,0,0,0,159,254,0,0,0,0,0,0,0,0,0,0,0,0,163,254,216,16,0,0,0],
+                        [0,0,0,0,159,254,0,0,0,0,0,0,0,0,0,14,86,178,248,254,91,0,0,0,0],
+                        [0,0,0,0,159,254,35,0,0,47,49,116,144,150,241,243,234,179,241,252,40,0,0,0,0],
+                        [0,0,0,0,150,253,237,207,207,207,253,254,250,240,198,143,91,28,233,250,0,0,0,0,0],
+                        [0,0,0,0,119,177,177,177,177,177,98,56,0,0,0,0,0,102,254,220,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,137,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,57,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,57,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,255,94,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,96,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,254,153,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,255,153,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,254,153,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+                        [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
+
+        # Matrix dimensions
+        raw_height = matrix.shape[0]
+        raw_width = matrix.shape[1]
+
+        fig, ax = plt.subplots(1, 1, figsize=(4, 4))
+        ax.imshow(matrix, cmap='Greys_r')
+
+        buf = io.BytesIO()
+        fig.savefig(buf, format='png')
+        buf.seek(0)
+        img = Image.open(buf)
+
+        # Convert PIL image to base64 string
+        buffered = io.BytesIO()
+        img.save(buffered, format='PNG')
+        img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')
+
+        mlmodel = MLModel.objects.get(id=pk)
+        layercount = str(mlmodel.layers)
+
+        return render(request, "prediction_service/model.html", {'img_str': img_str,
+                                                                'layer': layercount,
+                                                                'modelID': pk})
\ No newline at end of file
-- 
GitLab