From fc73f8e0a396b8d224dee8f91c57c063645d14a1 Mon Sep 17 00:00:00 2001 From: Nickiel12 <35903114+Nickiel12@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:37:06 -0700 Subject: [PATCH] working windows-pipe duplex communication --- Server/PipeServer/handle_connection.py | 110 ++++++++++++------------- joystick-controller-client | 2 +- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/Server/PipeServer/handle_connection.py b/Server/PipeServer/handle_connection.py index c1eb688..8d056ac 100644 --- a/Server/PipeServer/handle_connection.py +++ b/Server/PipeServer/handle_connection.py @@ -2,6 +2,7 @@ import cv2 from websocket import create_connection import win32file +import struct import numpy as np from ultralytics import YOLO @@ -20,71 +21,70 @@ classNames = ["person", "bicycle", "car", "motorbike", "aeroplane", "bus", "trai def handle_connection(pipe): - print("Pipe connected!") - data = win32file.ReadFile(pipe, 640*480*3)[1] - - if not data: - return - - nparr = np.frombuffer(data, np.uint8) - - nparr = nparr.reshape((480, 640, 3)) - - # frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR) - frame = cv2.cvtColor(nparr, cv2.COLOR_BGR2RGB) - - raise ValueError("There is no value running this application further") - # Load YOLO model model = YOLO('yolov8s.pt') # Load an official Detect model - # Open webcam - cap = cv2.VideoCapture(0) - cap.set(3, 640) - cap.set(4, 480) + print("Pipe connected!") + try: + while True: + data = win32file.ReadFile(pipe, 640*480*3)[1] - while cap.isOpened(): - ret, frame = cap.read() - frame = cv2.resize(frame, (640, 480)) - if not ret: - break + if not data: + return - # Perform object detection - results = model.track(frame, persist=True) + nparr = np.frombuffer(data, np.uint8).reshape((480, 640, 3)) - for r in results: - lines = "" - boxes = r.boxes - for box in boxes: - if box.cls[0].item() == 0 and not box.id is None: - # bounding box - id = box.id.int().cpu().tolist() - x1, y1, x2, y2 = box.xyxy[0] - x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) # convert to int values + # frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR) + frame = cv2.cvtColor(nparr, cv2.COLOR_BGR2RGB) - # put box in cam - cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 255), 3) + # Perform object detection + results = model.track(frame, persist=True) - # class name - cls = int(box.cls[0]) + for r in results: + lines = "" + boxes = r.boxes + for box in boxes: + if box.cls[0].item() == 0 and not box.id is None: + # bounding box + id = box.id.int().cpu().tolist() + # x1, y1, x2, y2 = box.xyxy[0] + # # 2.08333 = 1/480 * 1000 or normalize, then save 4 sig-figures and cast to int + # # 1.5625 = 1/640 * 1000 or normalize, then save 4 sig-figures and cast to int - # object details - org = [x1, y1] - org2 = [x1, y1+50] - font = cv2.FONT_HERSHEY_SIMPLEX - fontScale = 1 - color = (255, 0, 0) - color_w = (255, 255, 255) - thickness = 2 + # x1, x2, y1, y2 = int(x1), int(x2), int(y1), int(y2) - cv2.putText(frame, classNames[cls], org, font, fontScale, color, thickness) - cv2.putText(frame, str(id), org2, font, fontScale, color_w, thickness) + # # put box in cam + # cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 255), 3) - lines += f"{id} {x1}:{y1} {x2}:{y2}\n" + # # class name + # cls = int(box.cls[0]) - cv2.imshow('Webcam', frame) - if cv2.waitKey(1) == ord('q'): - break + # # object details + # org = [x1, y1] + # org2 = [x1, y1+50] + # font = cv2.FONT_HERSHEY_SIMPLEX + # fontScale = 1 + # color = (255, 0, 0) + # color_w = (255, 255, 255) + # thickness = 2 - cap.release() - cv2.destroyAllWindows() \ No newline at end of file + # cv2.putText(frame, classNames[cls], org, font, fontScale, color, thickness) + # cv2.putText(frame, str(id), org2, font, fontScale, color_w, thickness) + + x1, y1, x2, y2 = box.xyxyn[0] + x1, y1, x2, y2 = int(x1 * 1000), int(y1 * 1000), int(x2 * 1000), int(y2 * 1000) + lines += f"{id} {x1}:{y1} {x2}:{y2}\n" + + # cv2.imshow('Webcam', frame) + # if cv2.waitKey(1) == ord('q'): + # break + + ret = lines.encode('utf-8') + length_prefix = struct.pack('I', len(ret)) + + win32file.WriteFile(pipe, length_prefix+ret) + except Exception as e: + print("Pipe closed with error: " + str(e)) + return + # finally: + # cv2.destroyAllWindows() \ No newline at end of file diff --git a/joystick-controller-client b/joystick-controller-client index 506ebde..3cb5600 160000 --- a/joystick-controller-client +++ b/joystick-controller-client @@ -1 +1 @@ -Subproject commit 506ebde9f5a96aef440b98ffe214446827ba381c +Subproject commit 3cb560093c6de5794cb654a46fb6dd12c8377042