|
from sys import argv |
|
from time import sleep |
|
|
|
import cv2 as cv |
|
|
|
from app.camera import Camera |
|
from app.server import HTTPDaemon |
|
from app.translator import Translator |
|
|
|
|
|
def camera_loop(camera: Camera, translator: Translator): |
|
|
|
retry_count = 0 |
|
|
|
while not camera.is_capturing(): |
|
if retry_count > 3: |
|
raise Exception("No camera frames found.") |
|
|
|
retry_count += 1 |
|
sleep(1) |
|
|
|
while True: |
|
cv.imshow('Input', camera.buffer[-1]) |
|
translator.video_to_asl(camera.buffer) |
|
|
|
if cv.waitKey(1) == 27: |
|
break |
|
|
|
cv.destroyAllWindows() |
|
|
|
|
|
def main(translator: Translator): |
|
|
|
with Camera(0, 64) as camera: |
|
camera_loop(camera, translator) |
|
|
|
|
|
def init_server(): |
|
|
|
host = 'localhost' |
|
port = parse_args() |
|
translator = Translator(confidence=0.7) |
|
|
|
with HTTPDaemon(host, port, translator): |
|
try: |
|
main(translator) |
|
|
|
except KeyboardInterrupt: |
|
print("\nManual exit detected.") |
|
|
|
finally: |
|
print("Exiting..") |
|
|
|
|
|
def parse_args() -> int: |
|
|
|
try: |
|
return 5000 if len(argv) < 2 else int(argv[1]) |
|
|
|
except ValueError: |
|
print("\nPort must be an integer.\ne.g. python server.py 5000\n") |
|
raise |