@@ -27,8 +27,8 @@ def deserialize(buffer):
2727 offset = 0
2828 samples = []
2929 # read header (uint8)
30- version = np .frombuffer (buffer , dtype = np .uint8 , count = 1 , offset = offset )
31- if version [ 0 ] != 1 :
30+ version = np .frombuffer (buffer , dtype = np .uint8 , count = 1 , offset = offset )[ 0 ]
31+ if not ( version in [ 2 ]): # only version 2 is supported
3232 raise ValueError ('Invalid version %d' % version [0 ])
3333 offset += 1
3434
@@ -38,6 +38,8 @@ def deserialize(buffer):
3838 offset += 36
3939 screenId = buffer [offset :offset + 36 ].decode ('utf-8' )
4040 offset += 36
41+
42+ EYE_SIZE = 32 if 1 == version else 48
4143 # read samples
4244 while offset < len (buffer ):
4345 sample = {
@@ -51,15 +53,16 @@ def deserialize(buffer):
5153 sample ['time' ] = time_data [0 ]
5254 offset += 4
5355
54- # Read leftEye (1024 uint8)
55- sample ['leftEye' ] = np .frombuffer (buffer , dtype = np .uint8 , count = 32 * 32 , offset = offset ) \
56- .reshape (32 , 32 )
57- offset += 32 * 32
56+ # Read leftEye (uint8)
57+ EYE_COUNT = EYE_SIZE * EYE_SIZE
58+ sample ['leftEye' ] = np .frombuffer (buffer , dtype = np .uint8 , count = EYE_COUNT , offset = offset ) \
59+ .reshape (EYE_SIZE , EYE_SIZE )
60+ offset += EYE_COUNT
5861
59- # Read rightEye (1024 uint8)
60- sample ['rightEye' ] = np .frombuffer (buffer , dtype = np .uint8 , count = 32 * 32 , offset = offset ) \
61- .reshape (32 , 32 )
62- offset += 32 * 32
62+ # Read rightEye (uint8)
63+ sample ['rightEye' ] = np .frombuffer (buffer , dtype = np .uint8 , count = EYE_COUNT , offset = offset ) \
64+ .reshape (EYE_SIZE , EYE_SIZE )
65+ offset += EYE_COUNT
6366
6467 # Read points (float32)
6568 sample ['points' ] = np .frombuffer (buffer , dtype = '>f4' , count = 2 * 478 , offset = offset ) \
@@ -88,6 +91,18 @@ def deserialize(buffer):
8891 # rename "leftEye" and "rightEye" to "left eye" and "right eye"
8992 res ['left eye' ] = res .pop ('leftEye' )
9093 res ['right eye' ] = res .pop ('rightEye' )
94+ if 1 == version : # upscale to 48x48
95+ import cv2
96+ res ['left eye' ] = np .stack (
97+ [cv2 .resize (img [..., None ], (48 , 48 )) for img in res ['left eye' ]]
98+ )
99+ res ['right eye' ] = np .stack ([
100+ cv2 .resize (img [..., None ], (48 , 48 )) for img in res ['right eye' ]
101+ ])
102+ pass
103+
104+ assert res ['left eye' ].shape [1 :] == (48 , 48 ), 'Invalid shape for left eye. Got %s' % str (res ['left eye' ].shape )
105+ assert res ['right eye' ].shape [1 :] == (48 , 48 ), 'Invalid shape for right eye. Got %s' % str (res ['right eye' ].shape )
91106 return res
92107
93108def find_free_name (folder , base_name , extension = ".npz" ):
@@ -158,15 +173,17 @@ def main(args):
158173 shutil .rmtree (os .path .join (folder , 'remote' ), ignore_errors = True )
159174 # get the list of files from the remote server
160175 urls = requests .get (args .url ).json ()
161- print ('Found %d files on the remote server' % len (urls ))
162- for file in urls :
176+ N = len (urls )
177+ L = len (str (N ))
178+ print ('Found %d files on the remote server' % N )
179+ for i , file in enumerate (urls ):
163180 response = requests .get (file )
164181 content = IO .BytesIO (response .content )
165182 # read first file in the gz archive
166183 with gzip .open (content , 'rb' ) as f :
167184 first_file = f .read ()
168185 samples = deserialize (first_file )
169- print ('Read %d samples from %s' % ( len (samples [' time' ]), file ) )
186+ print (f'[ { i :0{ L }d } / { N :0{ L }d } ] Read { len (samples [" time" ]) } samples from { file } ' )
170187
171188 # don't want to messing up with such cases
172189 userId = np .unique (samples ['userId' ])
@@ -182,7 +199,6 @@ def main(args):
182199 saveChunk (chunk , os .path .join (folder , 'remote' ))
183200 continue
184201 pass
185-
186202 return
187203
188204if __name__ == '__main__' :
0 commit comments