카테고리 없음

[미완성, 코드만 업로드] 네트워크/통신 Jetson Nano 와 데스크탑 통신

seowit 2021. 2. 26. 10:56

 

<!-- templates/layout.html -->

<!doctype html>
<title>Flaskr</title>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
<div class=page>
  <h1>GoQba</h1>
  <div class=metanav>
  {% if not session.logged_in %}
    <a href="{{ url_for('login') }}">log in</a>
  {% else %}
    <a href="{{ url_for('logout') }}">log out</a>
  {% endif %}
  </div>
  {% for message in get_flashed_messages() %}
    <div class=flash>{{ message }}</div>
  {% endfor %}
  {% block body %}
  {% endblock %}
</div>
<!-- templates/login.html -->
{% extends "layout.html" %}
{% block body %}
  <h2>Login</h2>
  {% if error %}<p class=error><strong>Error:</strong> {{ error }}{% endif %}
  <form action="{{ url_for('login') }}" method=post>
    <dl>
      <dt>Username:
      <dd><input type=text name=username>
      <dt>Password:
      <dd><input type=password name=password>
      <dd><input type=submit value=Login>
    </dl>
  </form>
{% endblock %}
<!-- templates/show_entries.html -->
{% extends "layout.html" %}
{% block body %}
  {% if session.logged_in %}
    <form action="{{ url_for('add_entry') }}" method=post class=add-entry>
      <dl>
        <dt>Title:
        <dd><input type=text size=30 name=obj>
        <dt>Text:
        <dd><textarea name=num rows=1 cols=30></textarea>
        <dd><input type=submit value=Share>
      </dl>
    </form>
  {% endif %}
  <ul class=entries>
  {% for entry in entries %}
    <li><h2>{{ entry.obj }}</h2>{{ entry.num|safe }}
  {% else %}
    <li><em>Unbelievable.  No entries here so far</em>
  {% endfor %}
  <div>
    <h3 >Live Streaming</h3>
    <img src="{{ url_for('video_feed') }}" width="100%">
</div>
{% endblock %}
<!-- templates/session.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Chat Room</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.8/socket.io.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
var sock = io.connect('http://127.0.0.1:9999');
sock.on('connect', function(){
var connect_string = 'new_connect';
sock.send(connect_string);
});

sock.on('hello', function(msg){
$('#messages').append('<li>' +'>>Hello :'+ msg + '</li>');
console.log('Received Hello Message');
});

sock.on('message', function(msg){
// console.log(type(msg));
if(msg.type === 'normal'){
$('#messages').append('>> '+msg.message+'<br>');
}else{
$('#messages').append('<li>' + msg.message + '</li>');
}
console.log('Received Message : '+msg.type);
});



$('#sendbutton').on('click', function(){
sock.send($('#myMessage').val());
$('#myMessage').val('');
});
});


</script>
<ul id="messages"></ul>
<input type="text" id="myMessage">
<button id="sendbutton">Send</button>

</body>
</html>
​
/* static/style.css*/

body            { font-family: sans-serif; background: #eee; }
a, h1, h2       { color: #377BA8; }
h1, h2          { font-family: 'Georgia', serif; margin: 0; }
h1              { border-bottom: 2px solid #eee; }
h2              { font-size: 1.2em; }

.page           { margin: 2em auto; width: 35em; border: 5px solid #ccc;
                  padding: 0.8em; background: white; }
.entries        { list-style: none; margin: 0; padding: 0; }
.entries li     { margin: 0.8em 1.2em; }
.entries li h2  { margin-left: -1em; }
.add-entry      { font-size: 0.9em; border-bottom: 1px solid #ccc; }
.add-entry dl   { font-weight: bold; }
.metanav        { text-align: right; font-size: 0.8em; padding: 0.3em;
                  margin-bottom: 1em; background: #fafafa; }
.flash          { background: #CEE5F5; padding: 0.5em;
                  border: 1px solid #AACBE2; }
.error          { background: #F0D6D6; padding: 0.5em; }

 

 

## admin.py

from __future__ import with_statement
from contextlib import closing
import sqlite3
import cv2
from imutils.video import VideoStream
import imutils
import time
#from camera import VideoCamera
from camera_test import VideoCamera
import socket
import numpy as np
from flask import Flask, request, session, g, redirect, url_for, \
     abort, render_template, flash, Response

# configuration
DATABASE = '/tmp/admin_page.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

# create our little application :)
app = Flask(__name__)
app.config.from_object(__name__)
# socket_io=SocketIO(app)

def gen(camera_test):
    frame = camera_test.get_frame()
    yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
    # while True:
    #     #get camera frame
    #     frame = camera_test.get_frame()
    #     yield (b'--frame\r\n'
    #            b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

@app.route('/video_feed')
def video_feed():
    return Response(gen(VideoCamera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame')
# @app.route('/video_feed')
# def video_feed():
#     return Response(gen(VideoCamera()),
#                     mimetype='multipart/x-mixed-replace; boundary=frame')
# def gen_frames():  
#     while True:
#         success, frame = camera.read()  # read the camera frame
#         if not success:
#             break
#         else:
#             ret, buffer = cv2.imencode('.jpg', frame)
#             frame = buffer.tobytes()
#             yield (b'--frame\r\n'
#                    b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

# @app.route('/video_feed')
# def video_feed():
#     return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

def init_db():
    with closing(connect_db()) as db:
        with app.open_resource('schema.sql') as f:
            db.cursor().executescript(f.read().decode('utf-8'))


        db.commit()

def connect_db():
    return sqlite3.connect(app.config['DATABASE'])

@app.before_request
def before_request():
    g.db = connect_db()

@app.teardown_request
def teardown_request(exception):
    g.db.close()

@app.route('/')
def show_entries():
    cur = g.db.execute('select obj, num from entries order by id desc')
    entries = [dict(obj=row[0], num=row[1]) for row in cur.fetchall()]
    return render_template('show_entries.html', entries=entries)

# @app.route('/')
# def show_entries():
#     cur = g.db.execute('select title, text from entries order by id desc')
#     entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
#     return render_template('show_entries.html', entries=entries)

@app.route('/add', methods=['POST'])
def add_entry():
    if not session.get('logged_in'):
        abort(401)
    g.db.execute('insert into entries (obj, num) values (?, ?)',
                 [request.form['obj'], request.form['num']])
    g.db.commit()
    flash('New entry was successfully posted')
    return redirect(url_for('show_entries'))

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'
        elif request.form['password'] != app.config['PASSWORD']:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            flash('Hi, '+request.form['username']+'! You were logged in ;)')
            return redirect(url_for('show_entries'))
    return render_template('login.html', error=error)

@app.route('/logout')
def logout():
    session.pop('logged_in', None)
    flash('You were logged out')
    return redirect(url_for('show_entries'))

if __name__ == '__main__':
    #socket_io.run(app, port=9999, debug=True)
    app.run(host='0.0.0.0', debug=True)
    # app.run(debug=True)

 

## camera_test.py
import socket 
import numpy as np
import cv2


def recvall(sock, count):
    buf = b''
    while count:
        newbuf = sock.recv(count)
        if not newbuf: return None
        buf += newbuf
        count -= len(newbuf)
    return buf


HOST = '192.168.87.103'
PORT = 9999

class VideoCamera(object):
    def __init__(self):
        self.client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
        self.client_socket.connect((HOST, PORT)) 
    
    def __del__(self):
        self.client_socket.close() 

    def get_frame(self):
        # while True: 

        message = '1'
        self.client_socket.send(message.encode()) 
    
        length = recvall(self.client_socket,16)
        stringData = recvall(self.client_socket, int(length))
        data = np.frombuffer(stringData, dtype='uint8') 
        
        return stringData
        # decimg=cv2.imdecode(data,1)
        # cv2.imshow('Image',decimg)
        
        # key = cv2.waitKey(1)
        # if key == 27:
        #     break
        # #extracting frames
        # ret, frame = self.video.read()
        # frame=cv2.resize(frame,None,fx=ds_factor,fy=ds_factor,
        # interpolation=cv2.INTER_AREA)    

        # gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        # face_rects=face_cascade.detectMultiScale(gray,1.3,5)

        # for (x,y,w,h) in face_rects:
        #     cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
        #     break
        
        # # encode OpenCV raw frame to jpg and displaying it
        # ret, jpeg = cv2.imencode('.jpg', frame)
        # return jpeg.tobytes()


 

## camera.py 본인 카메라
# import the necessary packages
import cv2

# defining face detector
face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
ds_factor=0.6

class VideoCamera(object):
    def __init__(self):
       #capturing video
       self.video = cv2.VideoCapture(0)
    
    # def __del__(self):
    #     #releasing camera
    #     self.video.release()

    def get_frame(self):
        #extracting frames
        ret, frame = self.video.read()
        frame=cv2.resize(frame,None,fx=ds_factor,fy=ds_factor,
        interpolation=cv2.INTER_AREA)    

        gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        face_rects=face_cascade.detectMultiScale(gray,1.3,5)

        for (x,y,w,h) in face_rects:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
            break
        
        # encode OpenCV raw frame to jpg and displaying it
        ret, jpeg = cv2.imencode('.jpg', frame)
        return jpeg.tobytes()