mirror of
https://github.com/EyeTrackVR/EyeTrackVR.git
synced 2025-11-04 14:39:42 +08:00
Merge f4e4ac1aa0 into b001b15ed8
This commit is contained in:
commit
d3178e0a6e
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user