working windows-pipe duplex communication

This commit is contained in:
Nickiel12 2024-04-27 22:37:06 -07:00
parent 57724a55ab
commit fc73f8e0a3
2 changed files with 56 additions and 56 deletions

View file

@ -2,6 +2,7 @@
import cv2 import cv2
from websocket import create_connection from websocket import create_connection
import win32file import win32file
import struct
import numpy as np import numpy as np
from ultralytics import YOLO from ultralytics import YOLO
@ -20,35 +21,22 @@ classNames = ["person", "bicycle", "car", "motorbike", "aeroplane", "bus", "trai
def handle_connection(pipe): def handle_connection(pipe):
# Load YOLO model
model = YOLO('yolov8s.pt') # Load an official Detect model
print("Pipe connected!") print("Pipe connected!")
try:
while True:
data = win32file.ReadFile(pipe, 640*480*3)[1] data = win32file.ReadFile(pipe, 640*480*3)[1]
if not data: if not data:
return return
nparr = np.frombuffer(data, np.uint8) nparr = np.frombuffer(data, np.uint8).reshape((480, 640, 3))
nparr = nparr.reshape((480, 640, 3))
# frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR) # frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
frame = cv2.cvtColor(nparr, cv2.COLOR_BGR2RGB) 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)
while cap.isOpened():
ret, frame = cap.read()
frame = cv2.resize(frame, (640, 480))
if not ret:
break
# Perform object detection # Perform object detection
results = model.track(frame, persist=True) results = model.track(frame, persist=True)
@ -59,32 +47,44 @@ def handle_connection(pipe):
if box.cls[0].item() == 0 and not box.id is None: if box.cls[0].item() == 0 and not box.id is None:
# bounding box # bounding box
id = box.id.int().cpu().tolist() id = box.id.int().cpu().tolist()
x1, y1, x2, y2 = box.xyxy[0] # x1, y1, x2, y2 = box.xyxy[0]
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) # convert to int values # # 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
# put box in cam # x1, x2, y1, y2 = int(x1), int(x2), int(y1), int(y2)
cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 255), 3)
# class name # # put box in cam
cls = int(box.cls[0]) # cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 255), 3)
# object details # # class name
org = [x1, y1] # cls = int(box.cls[0])
org2 = [x1, y1+50]
font = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 1
color = (255, 0, 0)
color_w = (255, 255, 255)
thickness = 2
cv2.putText(frame, classNames[cls], org, font, fontScale, color, thickness) # # object details
cv2.putText(frame, str(id), org2, font, fontScale, color_w, thickness) # 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
# 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" lines += f"{id} {x1}:{y1} {x2}:{y2}\n"
cv2.imshow('Webcam', frame) # cv2.imshow('Webcam', frame)
if cv2.waitKey(1) == ord('q'): # if cv2.waitKey(1) == ord('q'):
break # break
cap.release() ret = lines.encode('utf-8')
cv2.destroyAllWindows() 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()

@ -1 +1 @@
Subproject commit 506ebde9f5a96aef440b98ffe214446827ba381c Subproject commit 3cb560093c6de5794cb654a46fb6dd12c8377042