53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
import atexit
|
|
import jetson.utils
|
|
|
|
from flask import Flask
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
|
from multiprocessing import Manager
|
|
|
|
from model import detect
|
|
|
|
app = Flask(__name__)
|
|
scheduler = BackgroundScheduler(daemon=True)
|
|
manager = Manager()
|
|
pred = manager.dict()
|
|
|
|
|
|
@scheduler.task('interval', id='get_pred', minutes=30, misfire_grace_time=900)
|
|
def get_pred():
|
|
img = take_image('./current_image.jpg')
|
|
print('Job 1 executed')
|
|
|
|
|
|
def take_image(img_path: str):
|
|
"""Take an image with the webcam and save it to the specified
|
|
path.
|
|
|
|
:param str img_path: path image should be saved to
|
|
:returns: captured image
|
|
|
|
"""
|
|
input = jetson.utils.videoSource('csi://0')
|
|
output = jetson.utils.videoOutput(img_path)
|
|
img = input.Capture()
|
|
output.Render(img)
|
|
return img
|
|
|
|
|
|
|
|
@app.route('/')
|
|
def index():
|
|
# TODO: call script and save initial image with bounding boxes
|
|
# TODO: get predictions and output them in JSON via API
|
|
# TODO: periodically get image from webcam and go to beginning
|
|
# TODO: JSON format: [Nr, state (1-10), timestamp, time since below 3]
|
|
return 'Server works'
|
|
|
|
|
|
if __name__ == '__main__':
|
|
scheduler.add_job(func=get_pred, trigger='interval', minutes=30)
|
|
scheduler.start()
|
|
atexit.register(scheduler.shutdown())
|
|
app.run()
|