detect import done

TODO: processed video output
This commit is contained in:
Patrice 2019-06-06 19:30:40 +02:00
parent c110f1f668
commit a7dc32b970
8 changed files with 182 additions and 1 deletions

View File

@ -3,18 +3,21 @@
"id": 0,
"label": "cam1",
"ip": "http://208.72.70.171:80/mjpg/video.mjpg",
"client_id": 0,
"status": true
},
{
"id": 1,
"label": "cam2",
"ip": "http://89.29.108.38:80/mjpg/video.mjpg",
"client_id": 1,
"status": false
},
{
"id": 2,
"label": "cam3",
"ip": "http://62.99.80.154:81/mjpg/video.mjpg",
"client_id": 2,
"status": true
}
]

14
server/Dockerfile Normal file
View File

@ -0,0 +1,14 @@
FROM python:3.7
RUN apt-get update
RUN apt-get install -y gcc libevent-dev python-dev
COPY ./requirements.txt /
RUN pip install -r /requirements.txt
COPY ./ /app
WORKDIR /app
EXPOSE 5000
CMD ["gunicorn", "-b", "0.0.0.0:5000", "app"]

Binary file not shown.

117
server/app.py Normal file
View File

@ -0,0 +1,117 @@
import json
import time
import requests
import detector as dt
import cv2
import _thread
from flask import Flask, jsonify, Response
######### ###########
### Init ###
######### ###########
application = Flask(__name__)
clients = []
cams = []
with open("./server/clients.json", 'r', encoding='utf-8') as f:
array = f.read()
clients = json.loads(array)
with open("./server/cams.json", 'r', encoding='utf-8') as f:
array = f.read()
cams = json.loads(array)
class VideoCamera(object):
"""Video stream object"""
def __init__(self, url):
self.video = cv2.VideoCapture(url)
def __del__(self):
self.video.release()
def get_frame(self):
success, image = self.video.read()
ret, jpeg = cv2.imencode('.jpg', image)
return jpeg.tobytes()
def gen(camera):
"""Video streaming generator function."""
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
######### ###########
### Core ###
######### ###########
def main():
for cam in cams:
t = 1 # seconds a person can leave the room for
t0 = time.time()
time.clock()
elapsed = 0
stream = cam["ip"]
detector = dt.Detector(stream)
music_playing = client_ip = clients[cam["client_id"]]["status"]
client_ip = "http://" + clients[cam["client_id"]]["ip"]
while True:
elapsed = time.time() - t0
if elapsed > t and music_playing:
r = requests.get(client_ip + "/stop")
if r.status_code == 200:
clients[cam["client_id"]]["status"] = False
tmp = time.time()
img = detector.detect()
print(time.time()-tmp)
if img is not None and not music_playing:
r = requests.get(client_ip + "/play")
if r.status_code == 200:
clients[cam["client_id"]]["status"] = True
t0 = time.time()
# TODO noch nicht sicher wie ich das verarbeirtete Bild ausgebe
#cv2.imshow("preview", img)
#cv2.waitKey(1)
######### ###########
### Routes ###
######### ###########
@application.route('/client/')
def client_list():
json = clients
return jsonify(json)
@application.route('/client/<num>/info')
def client_info(num):
json = clients[int(num)]
return jsonify(json)
@application.route('/cam/')
def cam_list():
json = cams
return jsonify(json)
@application.route('/cam/<num>/info')
def cam_info(num):
json = cams[int(num)]
return jsonify(json)
@application.route('/cam/<num>/stream')
def cam_stream(num):
return Response(gen(VideoCamera(cams[int(num)]["ip"])),
mimetype='multipart/x-mixed-replace; boundary=frame')
######### ###########
### Start ###
######### ###########
if __name__ == '__main__':
_thread.start_new_thread(main, () )
application.run(host='127.0.0.1', port=80)

23
server/cams.json Normal file
View File

@ -0,0 +1,23 @@
[
{
"id": 0,
"label": "cam1",
"ip": "http://208.72.70.171:80/mjpg/video.mjpg",
"client_id": 0,
"status": true
},
{
"id": 1,
"label": "cam2",
"ip": "http://89.29.108.38:80/mjpg/video.mjpg",
"client_id": 1,
"status": false
},
{
"id": 2,
"label": "cam3",
"ip": "http://62.99.80.154:81/mjpg/video.mjpg",
"client_id": 2,
"status": true
}
]

20
server/clients.json Normal file
View File

@ -0,0 +1,20 @@
[
{
"id": 0,
"label": "name1",
"ip": "127.0.0.1",
"status": true
},
{
"id": 1,
"label": "name2",
"ip": "127.0.0.1",
"status": false
},
{
"id": 2,
"label": "name3",
"ip": "127.0.0.1",
"status": true
}
]

View File

@ -60,7 +60,7 @@ class DetectorAPI:
class Detector:
def __init__(self, stream):
self.model_path = "./model.pb"
self.model_path = "./server/model.pb"
self.odapi = DetectorAPI(path_to_ckpt=self.model_path)
self.threshold = 0.8
self.stream = stream

4
server/requirements.txt Normal file
View File

@ -0,0 +1,4 @@
requests
flask
gunicorn
opencv-python