This commit is contained in:
z65536 2025-04-03 17:21:43 -05:00 committed by GitHub
commit d3178e0a6e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -36,7 +36,8 @@ from config import EyeTrackCameraConfig
from enum import Enum from enum import Enum
import psutil, os import psutil, os
import sys import sys
from PIL import Image
from io import BytesIO
process = psutil.Process(os.getpid()) # set process priority to low process = psutil.Process(os.getpid()) # set process priority to low
try: try:
@ -241,20 +242,22 @@ class Camera:
beg = -1 beg = -1
while beg == -1: while beg == -1:
self.buffer += self.serial_connection.read(2048) self.buffer += self.serial_connection.read(2048)
beg = self.buffer.find(ETVR_HEADER + ETVR_HEADER_FRAME) beg = self.buffer.find(b"\xff\xd8\xff")
# Discard any data before the frame header. # Discard any data before the frame header.
if beg > 0: if beg > 0:
self.buffer = self.buffer[beg:] self.buffer = self.buffer[beg:]
beg = 0 beg = 0
# We know exactly how long the jpeg packet is
end = int.from_bytes(self.buffer[4:6], signed=False, byteorder="little") end = -1
self.buffer += self.serial_connection.read(end - len(self.buffer)) while end == -1:
self.buffer += self.serial_connection.read(128)
end = self.buffer.find(b"\xff\xd9")
return beg, end return beg, end
def get_next_jpeg_frame(self): def get_next_jpeg_frame(self):
beg, end = self.get_next_packet_bounds() beg, end = self.get_next_packet_bounds()
jpeg = self.buffer[beg + ETVR_HEADER_LEN : end + ETVR_HEADER_LEN] jpeg = self.buffer[beg: end + 2]
self.buffer = self.buffer[end + ETVR_HEADER_LEN :] self.buffer = self.buffer[end + 2 :]
return jpeg return jpeg
def get_serial_camera_picture(self, should_push): def get_serial_camera_picture(self, should_push):
@ -266,8 +269,9 @@ class Camera:
jpeg = self.get_next_jpeg_frame() jpeg = self.get_next_jpeg_frame()
if jpeg: if jpeg:
# Create jpeg frame from byte string # Create jpeg frame from byte string
image = cv2.imdecode(np.fromstring(jpeg, dtype=np.uint8), cv2.IMREAD_UNCHANGED) try:
if image is None: image = np.array(Image.open(BytesIO(jpeg)))
except Exception:
print(f"{Fore.YELLOW}[WARN] Frame drop. Corrupted JPEG.{Fore.RESET}") print(f"{Fore.YELLOW}[WARN] Frame drop. Corrupted JPEG.{Fore.RESET}")
return return
# Discard the serial buffer. This is due to the fact that it # Discard the serial buffer. This is due to the fact that it