mirror of
https://github.com/EyeTrackVR/EyeTrackVR.git
synced 2025-11-04 14:39:42 +08:00
More stable version ig
This commit is contained in:
parent
b6044d2276
commit
28e2204ce1
@ -19,7 +19,7 @@ from .DataPacket import PacketHeader # Python imports stupid. missed a single ".
|
|||||||
WAIT_TIME = 0.1
|
WAIT_TIME = 0.1
|
||||||
|
|
||||||
IMAGE_BUFFER_SIZE = 1024
|
IMAGE_BUFFER_SIZE = 1024
|
||||||
NUM_FRAGMENTS = 12
|
NUM_MAX_FRAGMENTS = 12
|
||||||
HEADER_FORMAT = "iiii"
|
HEADER_FORMAT = "iiii"
|
||||||
|
|
||||||
RED = "\033[91m"
|
RED = "\033[91m"
|
||||||
@ -50,10 +50,10 @@ class UDP_Camera(ICameraSource):
|
|||||||
self.host = "0.0.0.0"
|
self.host = "0.0.0.0"
|
||||||
self.port = 3333
|
self.port = 3333
|
||||||
self.num_loaded = 0
|
self.num_loaded = 0
|
||||||
self.packets = [None] * NUM_FRAGMENTS
|
self.packets = [None] * NUM_MAX_FRAGMENTS
|
||||||
self.headerSize = struct.calcsize(HEADER_FORMAT)
|
self.headerSize = struct.calcsize(HEADER_FORMAT)
|
||||||
self.rawDataBuffer = np.zeros(IMAGE_BUFFER_SIZE + self.headerSize, dtype=np.uint8)
|
self.rawDataBuffer = np.zeros(IMAGE_BUFFER_SIZE + self.headerSize, dtype=np.uint8)
|
||||||
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_FRAGMENTS, dtype=np.uint8)
|
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_MAX_FRAGMENTS, dtype=np.uint8)
|
||||||
self.imageBuffView = memoryview(self.rawFullDataBuffer)
|
self.imageBuffView = memoryview(self.rawFullDataBuffer)
|
||||||
self.currentFrameNum = 0
|
self.currentFrameNum = 0
|
||||||
self.totalDataSize = 0
|
self.totalDataSize = 0
|
||||||
@ -86,12 +86,12 @@ class UDP_Camera(ICameraSource):
|
|||||||
# print(f"Packet {packet.id}: {offset}->{offset + packet.image_buf_size}")
|
# print(f"Packet {packet.id}: {offset}->{offset + packet.image_buf_size}")
|
||||||
|
|
||||||
def resetImageBuffer(self):
|
def resetImageBuffer(self):
|
||||||
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_FRAGMENTS, dtype=np.uint8)
|
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_MAX_FRAGMENTS, dtype=np.uint8)
|
||||||
|
|
||||||
def handle_packet(self, dataSize, senderAddr):
|
def handle_packet(self, dataSize, senderAddr):
|
||||||
bufferView = memoryview(self.rawDataBuffer)
|
bufferView = memoryview(self.rawDataBuffer)
|
||||||
packet = PacketHeader(HEADER_FORMAT, bufferView, dataSize)
|
packet = PacketHeader(HEADER_FORMAT, bufferView, dataSize)
|
||||||
if packet.id < 0 or packet.id >= NUM_FRAGMENTS:
|
if packet.id < 0 or packet.id >= NUM_MAX_FRAGMENTS:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Send acknowledgment
|
# Send acknowledgment
|
||||||
@ -102,35 +102,34 @@ class UDP_Camera(ICameraSource):
|
|||||||
# self.sock.sendto(f"ERR".encode(), senderAddr)
|
# self.sock.sendto(f"ERR".encode(), senderAddr)
|
||||||
|
|
||||||
if (packet.id == 0 or packet.frame_num != self.currentFrameNum):
|
if (packet.id == 0 or packet.frame_num != self.currentFrameNum):
|
||||||
self.packets: list[PacketHeader|None] = [None] * packet.totalPackets # Reset packets
|
self.packets: list[PacketHeader|None] = [None] * NUM_MAX_FRAGMENTS # Reset packets
|
||||||
self.num_loaded = 0
|
self.num_loaded = 0
|
||||||
self.currentFrameNum = packet.frame_num
|
self.currentFrameNum = packet.frame_num
|
||||||
self.rawFullDataBuffer[:] = 0
|
self.rawFullDataBuffer[:] = 0
|
||||||
# print(f"Reset frame capture. total packets: {packet.totalPackets}")
|
# print(f"Reset frame capture. total packets: {packet.totalPackets}")
|
||||||
|
|
||||||
if (packet.id < len(self.packets)
|
# if self.packets[0] is not None:
|
||||||
and self.packets[packet.id] is None
|
# print(f"Got packet id: {packet.id} (total: {self.packets[0].totalPackets} loaded: {self.num_loaded})")
|
||||||
and self.packets[0] is not None
|
|
||||||
|
if (self.packets is not None
|
||||||
and self.currentFrameNum == packet.frame_num
|
and self.currentFrameNum == packet.frame_num
|
||||||
or packet.id == 0 ):
|
and self.packets[0] is not None
|
||||||
|
and not packet in self.packets
|
||||||
|
or packet.id == 0):
|
||||||
self.num_loaded += 1
|
self.num_loaded += 1
|
||||||
self.packets[packet.id] = packet
|
self.packets[packet.id] = packet
|
||||||
self.saveDataToBuff(bufferView, packet)
|
self.saveDataToBuff(bufferView, packet)
|
||||||
|
|
||||||
# if self.packets[0] is not None:
|
if (packet.id < len(self.packets) and self.packets[0] is not None and self.num_loaded >= self.packets[0].totalPackets
|
||||||
# print(f"Got packet id: {packet.id} (total: {self.packets[0].totalPackets} loaded: {self.num_loaded})")
|
or self.num_loaded >= NUM_MAX_FRAGMENTS):
|
||||||
# if self.packets[0] is not None:
|
# if self.packets[0] is not None:
|
||||||
# formatted_list = "[" + ", ".join(f"{RED}x{RESET}" if item is None else f"{GREEN}x{RESET}" for item in self.packets[:self.packets[0].totalPackets]) + "]"
|
# formatted_list = "[" + ", ".join(f"{RED}x{RESET}" if item is None else f"{GREEN}x{RESET}" for item in self.packets[:self.packets[0].totalPackets]) + "]"
|
||||||
# print(formatted_list)
|
# print(formatted_list)
|
||||||
|
|
||||||
|
|
||||||
if (self.packets[0] is not None and self.num_loaded >= self.packets[0].totalPackets
|
|
||||||
or self.num_loaded >= NUM_FRAGMENTS):
|
|
||||||
|
|
||||||
self.process_and_push_image()
|
self.process_and_push_image()
|
||||||
|
|
||||||
self.num_loaded = 0
|
self.num_loaded = 0
|
||||||
self.packets: list[PacketHeader|None] = [None] * NUM_FRAGMENTS # Reset packets
|
self.packets: list[PacketHeader|None] = [None] * NUM_MAX_FRAGMENTS # Reset packets
|
||||||
self.rawFullDataBuffer[:] = 0
|
self.rawFullDataBuffer[:] = 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -240,19 +240,26 @@ class Camera(ICameraSource):
|
|||||||
current_frame_time = time.time()
|
current_frame_time = time.time()
|
||||||
delta_time = current_frame_time - self.last_frame_time
|
delta_time = current_frame_time - self.last_frame_time
|
||||||
self.last_frame_time = current_frame_time
|
self.last_frame_time = current_frame_time
|
||||||
self.fps = (self.fps + self.pf_fps) / 2
|
|
||||||
self.newft = time.time()
|
# Avoid division by zero
|
||||||
self.fps = 1 / (self.newft - self.prevft)
|
if delta_time > 0:
|
||||||
self.prevft = self.newft
|
fps = 1.0 / delta_time
|
||||||
self.fps = int(self.fps)
|
|
||||||
if len(self.fl) < 60:
|
|
||||||
self.fl.append(self.fps)
|
|
||||||
else:
|
else:
|
||||||
self.fl.pop(0)
|
fps = 0
|
||||||
self.fl.append(self.fps)
|
|
||||||
|
# Smooth the FPS using a moving average
|
||||||
|
self.fl.append(fps)
|
||||||
|
if len(self.fl) > 60:
|
||||||
|
self.fl.pop(0) # Keep the list length constant
|
||||||
|
|
||||||
|
# Compute average FPS
|
||||||
self.fps = sum(self.fl) / len(self.fl)
|
self.fps = sum(self.fl) / len(self.fl)
|
||||||
|
|
||||||
|
# Compute bandwidth per second (bps)
|
||||||
self.bps = image.nbytes * self.fps
|
self.bps = image.nbytes * self.fps
|
||||||
self.frame_number = self.frame_number + 1
|
|
||||||
|
# Increment frame count
|
||||||
|
self.frame_number += 1
|
||||||
if should_push:
|
if should_push:
|
||||||
self.push_image_to_queue(image, self.frame_number, self.fps)
|
self.push_image_to_queue(image, self.frame_number, self.fps)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user