12
12
from lang_manager import LocaleStringManager as lang
13
13
from colorama import Fore
14
14
from config import BabbleConfig , BabbleSettingsConfig
15
+ from PIL import Image
16
+ from io import BytesIO
15
17
from utils .misc_utils import get_camera_index_by_name , list_camera_names , os_type
16
18
17
19
from vivefacialtracker .vivetracker import ViveTracker
@@ -245,20 +247,21 @@ def get_next_packet_bounds(self):
245
247
beg = - 1
246
248
while beg == - 1 :
247
249
self .buffer += self .serial_connection .read (2048 )
248
- beg = self .buffer .find (ETVR_HEADER )
250
+ beg = self .buffer .find (b" \xff \xd8 \xff " )
249
251
# Discard any data before the frame header.
250
252
if beg > 0 :
251
253
self .buffer = self .buffer [beg :]
252
254
beg = 0
253
- # We know exactly how long the jpeg packet is
254
- end = int .from_bytes (self .buffer [4 :6 ], signed = False , byteorder = "little" )
255
- self .buffer += self .serial_connection .read (end - len (self .buffer ))
255
+ end = - 1
256
+ while end == - 1 :
257
+ self .buffer += self .serial_connection .read (128 )
258
+ end = self .buffer .find (b"\xff \xd9 " )
256
259
return beg , end
257
260
258
261
def get_next_jpeg_frame (self ):
259
262
beg , end = self .get_next_packet_bounds ()
260
- jpeg = self .buffer [beg + ETVR_HEADER_LEN : end + ETVR_HEADER_LEN ]
261
- self .buffer = self .buffer [end + ETVR_HEADER_LEN :]
263
+ jpeg = self .buffer [beg : end + 2 ]
264
+ self .buffer = self .buffer [end + 2 :]
262
265
return jpeg
263
266
264
267
def get_serial_camera_picture (self , should_push ):
@@ -271,10 +274,9 @@ def get_serial_camera_picture(self, should_push):
271
274
jpeg = self .get_next_jpeg_frame ()
272
275
if jpeg :
273
276
# Create jpeg frame from byte string
274
- image = cv2 .imdecode (
275
- np .fromstring (jpeg , dtype = np .uint8 ), cv2 .IMREAD_UNCHANGED
276
- )
277
- if image is None :
277
+ try :
278
+ image = np .array (Image .open (BytesIO (jpeg )))
279
+ except Exception :
278
280
print (
279
281
f'{ Fore .YELLOW } [{ lang ._instance .get_string ("log.warn" )} ] { lang ._instance .get_string ("warn.frameDrop" )} { Fore .RESET } '
280
282
)
0 commit comments