import cv2
import numpy as np
from ultralytics import YOLO

model = YOLO("yolov8n-seg.pt")

inputfile = cv2.VideoCapture("input.mp4")
inputfile.set(cv2.CAP_PROP_POS_MSEC, 0)

while inputfile.isOpened():

    # read frame
    retval, frame = inputfile.read()

    if not retval:
        break

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

    results = model.track(
        frame,
        conf=0.4,
        persist=True,
        verbose=False,
        tracker="app.yolo.tracker.yml"
    )

    if len(results) < 1:
        print("no result in this frame")
        continue

    # get the first frame
    result = results[0]

    for index in range(len(result.boxes.id)):

        object_tracking_id = result.boxes.id[index]
        object_confiance   = result.boxes.conf[index]
        object_points      = result.masks[index].xy
        object_class_id    = result.boxes.cls[index]
        object_class_name  = model.names[int(object_class_id)]

        print(f"{index} - {object_tracking_id} - {object_class_id} - {object_confiance} - {len(object_points[0])}")

        if object_class_name == "person" and (object_confiance * 100) > 60.0:
            points = np.array(object_points, dtype=np.int32)
            cv2.fillPoly(frame, [points], (0, 255, 0))
            #cv2.putText(frame, str(int(object_tracking_id)), (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255));

    cv2.imshow("Preview", frame)


inputfile.release()

cv2.destroyAllWindows()
