Skip to content

Commit 025cb46

Browse files
Merge pull request #34 from abhiramasonny/appcreation
appcreation
2 parents 10ef1bf + cd423b5 commit 025cb46

File tree

2 files changed

+157
-0
lines changed

2 files changed

+157
-0
lines changed

app/app.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
from flask import Flask, render_template
2+
from flask_socketio import SocketIO, emit
3+
import time
4+
import io
5+
import base64
6+
from PIL import Image
7+
import cv2
8+
import numpy as np
9+
import pyshine as ps
10+
from flask_cors import CORS, cross_origin
11+
from engineio.payload import Payload
12+
13+
Payload.max_decode_packets = 2048
14+
app = Flask(__name__)
15+
socketio = SocketIO(app, cors_allowed_origins='*')
16+
17+
@app.route('/', methods=['POST', 'GET'])
18+
def index():
19+
return render_template('index.html')
20+
21+
def readb64(base64_string):
22+
idx = base64_string.find('base64,')
23+
base64_string = base64_string[idx + 7:]
24+
25+
sbuf = io.BytesIO()
26+
sbuf.write(base64.b64decode(base64_string, ' /'))
27+
pimg = Image.open(sbuf)
28+
29+
return cv2.cvtColor(np.array(pimg), cv2.COLOR_RGB2BGR)
30+
31+
def moving_average(x):
32+
return np.mean(x)
33+
34+
@socketio.on('catch-frame')
35+
def catch_frame(data):
36+
emit('response_back', data)
37+
38+
global fps, prev_recv_time, cnt, fps_array
39+
fps = 60
40+
prev_recv_time = 0
41+
cnt = 0
42+
fps_array = [0]
43+
44+
@socketio.on('image')
45+
def image(data_image):
46+
global fps, cnt, prev_recv_time, fps_array
47+
recv_time = time.time()
48+
text = 'FPS: ' + str(fps)
49+
frame = readb64(data_image)
50+
51+
# insert logic here
52+
"""
53+
frame = gundetection...
54+
"""
55+
56+
frame = ps.putBText(frame, text, text_offset_x=20, text_offset_y=30, vspace=20, hspace=10, font_scale=1.0, background_RGB=(10, 20, 222), text_RGB=(255, 255, 255))
57+
imgencode = cv2.imencode('.jpeg', frame, [cv2.IMWRITE_JPEG_QUALITY, 40])[1]
58+
59+
stringData = base64.b64encode(imgencode).decode('utf-8')
60+
b64_src = 'data:image/jpeg;base64,'
61+
stringData = b64_src + stringData
62+
63+
emit('response_back', stringData)
64+
65+
fps = 1 / (recv_time - prev_recv_time)
66+
fps_array.append(fps)
67+
fps = round(moving_average(np.array(fps_array)), 1)
68+
prev_recv_time = recv_time
69+
70+
cnt += 1
71+
if cnt == 30:
72+
fps_array = [fps]
73+
cnt = 0
74+
75+
if __name__ == '__main__':
76+
socketio.run(app, port=9990, debug=True)

app/templates/index.html

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
2+
<!DOCTYPE html>
3+
<html lang="en">
4+
<head>
5+
<meta charset="UTF-8">
6+
<title>Title</title>
7+
8+
<style>
9+
#video {
10+
transform: rotateY(180deg);
11+
-webkit-transform:rotateY(180deg); /* Safari and Chrome */
12+
-moz-transform:rotateY(180deg); /* Firefox */
13+
14+
}
15+
</style>
16+
17+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
18+
<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.0/socket.io.js'></script>
19+
</head>
20+
21+
<body>
22+
23+
<div id="container">
24+
<video autoplay playsinline id="videoElement"></video>
25+
<canvas id="canvas" width="400" height="300"></canvas>
26+
</div>
27+
28+
<div class = 'video'>
29+
<img id="photo" width="400" height="300">
30+
<h1>video</h1>
31+
</div>
32+
33+
<script type="text/javascript" charset="utf-8">
34+
35+
var socket = io.connect(window.location.protocol + '//' + document.domain + ':' + location.port);
36+
socket.on('connect', function(){
37+
console.log("Connected...!", socket.connected)
38+
});
39+
40+
41+
var canvas = document.getElementById('canvas');
42+
var context = canvas.getContext('2d');
43+
const video = document.querySelector("#videoElement");
44+
45+
video.width = 400;
46+
video.height = 300;
47+
48+
49+
if (navigator.mediaDevices.getUserMedia) {
50+
navigator.mediaDevices.getUserMedia({ video: true })
51+
.then(function (stream) {
52+
video.srcObject = stream;
53+
video.play();
54+
})
55+
.catch(function (err0r) {
56+
57+
});
58+
}
59+
60+
const FPS = 6;
61+
setInterval(() => {
62+
width=video.width;
63+
height=video.height;
64+
context.drawImage(video, 0, 0, width , height );
65+
var data = canvas.toDataURL('image/jpeg', 0.5);
66+
context.clearRect(0, 0, width,height );
67+
socket.emit('image', data);
68+
}, 1000/FPS);
69+
70+
socket.on('response_back', function(image){
71+
photo.setAttribute('src', image );
72+
73+
});
74+
75+
</script>
76+
77+
78+
</body>
79+
80+
</html>
81+

0 commit comments

Comments
 (0)