Spaces:
Sleeping
Sleeping
| from vidgear.gears import CamGear | |
| from flask import Flask | |
| import threading | |
| from utils import start_html_stream | |
| import os | |
| import time | |
| import cv2 | |
| import socket | |
| def get_video_file(): | |
| return os.path.join("videos", "classroom.mp4") | |
| video_file = get_video_file() | |
| cap = cv2.VideoCapture(video_file) | |
| framerate = cap.get(cv2.CAP_PROP_FPS) | |
| cap.release() | |
| stream = CamGear(source=video_file).start() | |
| app = Flask(__name__) | |
| output_frame = [None] | |
| lock = threading.Lock() | |
| PORT = 7860 | |
| def html_stream(): | |
| return start_html_stream(output_frame, lock) | |
| def start_flask(): | |
| app.run(host="0.0.0.0", port=PORT, debug=True, use_reloader=False) | |
| def process_stream(): | |
| global stream | |
| while True: | |
| start_time = time.time() | |
| frame = stream.read() | |
| if frame is None: | |
| stream.stop() | |
| stream = CamGear(source=video_file).start() | |
| continue | |
| with lock: | |
| output_frame[0] = frame.copy() | |
| elapsed_time = time.time() - start_time | |
| sleep_time = max(1.0 / framerate - elapsed_time, 0) | |
| time.sleep(sleep_time) | |
| def main(): | |
| flask_thread = threading.Thread(target=start_flask) | |
| flask_thread.daemon = True | |
| flask_thread.start() | |
| stream_thread = threading.Thread(target=process_stream) | |
| stream_thread.daemon = True | |
| stream_thread.start() | |
| flask_thread.join() | |
| stream_thread.join() | |
| if __name__ == "__main__": | |
| main() |