piyush3 commited on
Commit
fa898f6
·
verified ·
1 Parent(s): c1151f9

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +121 -0
app.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>OSMF Detection</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap" rel="stylesheet">
9
+ </head>
10
+ <body>
11
+ <div class="container">
12
+ <h1>OSMF Classification : OcanPredict</h1>
13
+
14
+ <div class="main-content">
15
+ <div class="left-panel">
16
+ <div class="upload-section">
17
+ <h2>Upload Image</h2>
18
+ <div class="file-upload">
19
+ <input type="file" id="fileInput" accept="image/*">
20
+ <label for="fileInput">Choose File</label>
21
+ </div>
22
+ <button id="uploadPredict" disabled>Analyze Upload</button>
23
+ </div>
24
+
25
+ <div class="separator">
26
+ <span>OR</span>
27
+ </div>
28
+
29
+ <div class="camera-section">
30
+ <h2>Capture Image</h2>
31
+ <video id="video" autoplay playsinline></video>
32
+ <canvas id="canvas" style="display: none;"></canvas>
33
+ <button id="capture">Capture Image</button>
34
+ </div>
35
+ </div>
36
+
37
+ <div class="right-panel">
38
+ <div class="preview-section">
39
+ <h2>Preview</h2>
40
+ <img id="preview" style="display: none;">
41
+ <button id="predict" disabled>Analyze Capture</button>
42
+ </div>
43
+ <div id="result" class="result-container"></div>
44
+ </div>
45
+ </div>
46
+ </div>
47
+ <script>
48
+ const video = document.getElementById('video');
49
+ const canvas = document.getElementById('canvas');
50
+ const preview = document.getElementById('preview');
51
+ const captureBtn = document.getElementById('capture');
52
+ const predictBtn = document.getElementById('predict');
53
+ const result = document.getElementById('result');
54
+ const fileInput = document.getElementById('fileInput');
55
+ const uploadPredict = document.getElementById('uploadPredict');
56
+
57
+ // Access webcam
58
+ navigator.mediaDevices.getUserMedia({ video: true })
59
+ .then(stream => {
60
+ video.srcObject = stream;
61
+ });
62
+
63
+ // File upload handling
64
+ fileInput.addEventListener('change', (e) => {
65
+ const file = e.target.files[0];
66
+ if (file) {
67
+ const reader = new FileReader();
68
+ reader.onload = (e) => {
69
+ preview.src = e.target.result;
70
+ preview.style.display = 'block';
71
+ uploadPredict.disabled = false;
72
+ predictBtn.disabled = true;
73
+ };
74
+ reader.readAsDataURL(file);
75
+ }
76
+ });
77
+
78
+ captureBtn.addEventListener('click', () => {
79
+ canvas.width = video.videoWidth;
80
+ canvas.height = video.videoHeight;
81
+ canvas.getContext('2d').drawImage(video, 0, 0);
82
+
83
+ preview.src = canvas.toDataURL('image/png');
84
+ preview.style.display = 'block';
85
+ predictBtn.disabled = false;
86
+ uploadPredict.disabled = true;
87
+ fileInput.value = '';
88
+ });
89
+
90
+ async function predict(formData) {
91
+ try {
92
+ const response = await fetch('/predict', {
93
+ method: 'POST',
94
+ body: formData
95
+ });
96
+ const data = await response.json();
97
+
98
+ result.innerHTML = `
99
+ <h2>Results:</h2>
100
+ <p>Classification: ${data.class}</p>
101
+ `;
102
+ } catch (error) {
103
+ result.innerHTML = 'Error during prediction';
104
+ }
105
+ }
106
+
107
+ predictBtn.addEventListener('click', async () => {
108
+ const blob = await (await fetch(preview.src)).blob();
109
+ const formData = new FormData();
110
+ formData.append('image', blob, 'capture.png');
111
+ await predict(formData);
112
+ });
113
+
114
+ uploadPredict.addEventListener('click', async () => {
115
+ const formData = new FormData();
116
+ formData.append('image', fileInput.files[0]);
117
+ await predict(formData);
118
+ });
119
+ </script>
120
+ </body>
121
+ </html>