mediapipe
mediapipe copied to clipboard
duplicate timestamps on calls to the live stream callback in the python tasks api (face landmarks pipeline)
Have I written custom code
Yes
OS Platform and Distribution
Ubuntu 22.04
MediaPipe Tasks SDK version
0.10.13 and 0.10.14
Task name
face landmarker
Programming Language and version (e.g. C++, Python, Java)
python 3.11.9
Describe the actual behavior
occasionally and very often the user supplied python callback for a live stream will be called twice with the same timestamp_ms value, in the face landmarks task.
Describe the expected behaviour
each timestamp given to detect_async should trigger only one instance of the result callback.
i.e., ocassionally and within less than one minute of operation at 30 fps, this pattern will occur:
pushing image number 965 having image timestamp 55418390 to mediapipe ...
callback called with timestamp 55418390 ...
pushing image number 966 having image timestamp 55418422 to mediapipe ...
callback called with timestamp 55418390 ...
(the log messages are my own).
Other info
The release notes of 0.10.14 mention some Fixed result_callback() argument. Maybe it is related.
It seems to happen circumstantially always after mediapipe has dropped images from its processing, in line with the backpressure feature which extends now to the python api as per the online doc which says:
If the detection function is called when the Face Landmarker task is busy processing another frame, the task will ignore the new input frame
But not always when it drops images, does this double call with the same timestamp happen, so this affinity is only circumstantial.
P.S. I avoid reentrancy of my callback through a python lock object, just to be on the safe side in case mediapipe would concurrently call into the callback, which I doubt it would, but just to be on the safe side. the timestamp is a plain python immutable that doesn't get overwritten by concurrent calls (which mediapipe probably doesn't do anyway). so it looks like two consecutive callback calls using the same timestamp happen.
Is that expected behavior?
Adding a minimal reproducing example:
import cv2
import time
from threading import Lock
import mediapipe as mp
from mediapipe import solutions
from mediapipe.framework.formats import landmark_pb2
import numpy as np
BaseOptions = mp.tasks.BaseOptions
FaceLandmarker = mp.tasks.vision.FaceLandmarker
FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions
FaceLandmarkerResult = mp.tasks.vision.FaceLandmarkerResult
VisionRunningMode = mp.tasks.vision.RunningMode
callback_reentrancy_lock = Lock()
timestamps_ms = set()
def handle_pipeline_prediction_callback(
inference: FaceLandmarkerResult,
output_image: mp.Image,
timestamp_ms: int):
callback_reentrancy_lock.acquire()
print(f'callback called with timestamp {timestamp_ms} ...')
if timestamp_ms in timestamps_ms:
raise ValueError(f'timestamp {timestamp_ms} has already been provided to this callback')
else:
timestamps_ms.add(timestamp_ms)
time.sleep(0.05)
callback_reentrancy_lock.release()
def main():
# downloaded from 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task':
model_path = 'models/face_landmarker.task'
options = FaceLandmarkerOptions(
base_options = BaseOptions(model_asset_path = model_path),
running_mode = VisionRunningMode.LIVE_STREAM,
result_callback = handle_pipeline_prediction_callback)
detector = FaceLandmarker.create_from_options(options)
stream = cv2.VideoCapture(0)
# noinspection PyUnresolvedReferences
stream.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
stream.set(cv2.CAP_PROP_FPS, 30)
stream.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
stream.set(cv2.CAP_PROP_BUFFERSIZE, 1)
if not stream.isOpened():
raise Exception(f'failed opening camera')
image_number = 0
last_image_timestamp = None
try:
while True:
stream.grab()
success, image = stream.retrieve()
if not success:
raise Exception(f'failed retrieving camera image')
image_timestamp = int(stream.get(cv2.CAP_PROP_POS_MSEC))
if last_image_timestamp:
if image_timestamp <= last_image_timestamp:
raise ValueError(f'camera image times are not monotonically increasing: {last_image_timestamp}, {image_timestamp}')
last_image_timestamp = image_timestamp
print(f'pushing image number {image_number} having image timestamp {image_timestamp} to mediapipe ...')
detector.detect_async(
image = mp.Image(image_format=mp.ImageFormat.SRGB, data=image),
timestamp_ms = image_timestamp)
image_number += 1
except KeyboardInterrupt as e:
detector.close()
print(f'\nexiting ...')
if __name__ == '__main__':
main()
Note that the sleep in the callback is there to abstract over other code which is not required for reproducing this behavior.
Here's example output:
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1717470465.704364 225025 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1717470465.706377 225056 gl_context.cc:357] GL version: 3.2 (OpenGL ES 3.2 Mesa 23.2.1-1ubuntu3.1~22.04.2), renderer: Mesa Intel(R) UHD Graphics 630 (CFL GT2)
W0000 00:00:1717470465.706768 225025 face_landmarker_graph.cc:174] Sets FaceBlendshapesGraph acceleration to xnnpack by default.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
W0000 00:00:1717470465.729758 225057 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1717470465.741286 225062 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
pushing image number 0 having image timestamp 57883098 to mediapipe ...
callback called with timestamp 57883098 ...
pushing image number 1 having image timestamp 57883134 to mediapipe ...
pushing image number 2 having image timestamp 57883166 to mediapipe ...
callback called with timestamp 57883134 ...
pushing image number 3 having image timestamp 57883198 to mediapipe ...
callback called with timestamp 57883198 ...
pushing image number 4 having image timestamp 57883234 to mediapipe ...
pushing image number 5 having image timestamp 57883266 to mediapipe ...
callback called with timestamp 57883234 ...
pushing image number 6 having image timestamp 57883298 to mediapipe ...
callback called with timestamp 57883298 ...
pushing image number 7 having image timestamp 57883334 to mediapipe ...
pushing image number 8 having image timestamp 57883366 to mediapipe ...
callback called with timestamp 57883334 ...
pushing image number 9 having image timestamp 57883398 to mediapipe ...
callback called with timestamp 57883398 ...
pushing image number 10 having image timestamp 57883434 to mediapipe ...
pushing image number 11 having image timestamp 57883466 to mediapipe ...
callback called with timestamp 57883434 ...
pushing image number 12 having image timestamp 57883498 to mediapipe ...
callback called with timestamp 57883498 ...
pushing image number 13 having image timestamp 57883534 to mediapipe ...
pushing image number 14 having image timestamp 57883566 to mediapipe ...
callback called with timestamp 57883534 ...
pushing image number 15 having image timestamp 57883598 to mediapipe ...
callback called with timestamp 57883598 ...
pushing image number 16 having image timestamp 57883630 to mediapipe ...
pushing image number 17 having image timestamp 57883666 to mediapipe ...
callback called with timestamp 57883630 ...
pushing image number 18 having image timestamp 57883698 to mediapipe ...
callback called with timestamp 57883698 ...
pushing image number 19 having image timestamp 57883730 to mediapipe ...
pushing image number 20 having image timestamp 57883766 to mediapipe ...
callback called with timestamp 57883730 ...
pushing image number 21 having image timestamp 57883798 to mediapipe ...
callback called with timestamp 57883798 ...
pushing image number 22 having image timestamp 57883830 to mediapipe ...
pushing image number 23 having image timestamp 57883866 to mediapipe ...
callback called with timestamp 57883830 ...
pushing image number 24 having image timestamp 57883898 to mediapipe ...
callback called with timestamp 57883898 ...
pushing image number 25 having image timestamp 57883930 to mediapipe ...
pushing image number 26 having image timestamp 57883966 to mediapipe ...
callback called with timestamp 57883930 ...
pushing image number 27 having image timestamp 57883998 to mediapipe ...
callback called with timestamp 57883998 ...
pushing image number 28 having image timestamp 57884030 to mediapipe ...
pushing image number 29 having image timestamp 57884062 to mediapipe ...
callback called with timestamp 57884062 ...
pushing image number 30 having image timestamp 57884098 to mediapipe ...
callback called with timestamp 57884098 ...
pushing image number 31 having image timestamp 57884130 to mediapipe ...
pushing image number 32 having image timestamp 57884162 to mediapipe ...
callback called with timestamp 57884162 ...
pushing image number 33 having image timestamp 57884198 to mediapipe ...
callback called with timestamp 57884198 ...
pushing image number 34 having image timestamp 57884230 to mediapipe ...
pushing image number 35 having image timestamp 57884262 to mediapipe ...
callback called with timestamp 57884262 ...
pushing image number 36 having image timestamp 57884298 to mediapipe ...
callback called with timestamp 57884298 ...
pushing image number 37 having image timestamp 57884330 to mediapipe ...
pushing image number 38 having image timestamp 57884362 to mediapipe ...
callback called with timestamp 57884362 ...
pushing image number 39 having image timestamp 57884398 to mediapipe ...
callback called with timestamp 57884398 ...
pushing image number 40 having image timestamp 57884430 to mediapipe ...
pushing image number 41 having image timestamp 57884462 to mediapipe ...
callback called with timestamp 57884462 ...
pushing image number 42 having image timestamp 57884494 to mediapipe ...
callback called with timestamp 57884494 ...
pushing image number 43 having image timestamp 57884530 to mediapipe ...
pushing image number 44 having image timestamp 57884562 to mediapipe ...
callback called with timestamp 57884562 ...
pushing image number 45 having image timestamp 57884594 to mediapipe ...
callback called with timestamp 57884594 ...
pushing image number 46 having image timestamp 57884630 to mediapipe ...
pushing image number 47 having image timestamp 57884662 to mediapipe ...
callback called with timestamp 57884662 ...
pushing image number 48 having image timestamp 57884694 to mediapipe ...
callback called with timestamp 57884694 ...
pushing image number 49 having image timestamp 57884730 to mediapipe ...
pushing image number 50 having image timestamp 57884762 to mediapipe ...
callback called with timestamp 57884762 ...
pushing image number 51 having image timestamp 57884794 to mediapipe ...
callback called with timestamp 57884794 ...
pushing image number 52 having image timestamp 57884830 to mediapipe ...
pushing image number 53 having image timestamp 57884862 to mediapipe ...
callback called with timestamp 57884862 ...
pushing image number 54 having image timestamp 57884894 to mediapipe ...
pushing image number 55 having image timestamp 57884930 to mediapipe ...
callback called with timestamp 57884894 ...
pushing image number 56 having image timestamp 57884962 to mediapipe ...
callback called with timestamp 57884962 ...
pushing image number 57 having image timestamp 57884994 to mediapipe ...
pushing image number 58 having image timestamp 57885026 to mediapipe ...
callback called with timestamp 57884994 ...
pushing image number 59 having image timestamp 57885062 to mediapipe ...
callback called with timestamp 57885062 ...
pushing image number 60 having image timestamp 57885094 to mediapipe ...
pushing image number 61 having image timestamp 57885126 to mediapipe ...
callback called with timestamp 57885094 ...
pushing image number 62 having image timestamp 57885162 to mediapipe ...
callback called with timestamp 57885162 ...
pushing image number 63 having image timestamp 57885194 to mediapipe ...
pushing image number 64 having image timestamp 57885226 to mediapipe ...
callback called with timestamp 57885194 ...
pushing image number 65 having image timestamp 57885262 to mediapipe ...
callback called with timestamp 57885262 ...
pushing image number 66 having image timestamp 57885294 to mediapipe ...
pushing image number 67 having image timestamp 57885326 to mediapipe ...
callback called with timestamp 57885294 ...
pushing image number 68 having image timestamp 57885362 to mediapipe ...
callback called with timestamp 57885362 ...
pushing image number 69 having image timestamp 57885394 to mediapipe ...
pushing image number 70 having image timestamp 57885426 to mediapipe ...
callback called with timestamp 57885394 ...
pushing image number 71 having image timestamp 57885458 to mediapipe ...
callback called with timestamp 57885458 ...
pushing image number 72 having image timestamp 57885494 to mediapipe ...
pushing image number 73 having image timestamp 57885526 to mediapipe ...
callback called with timestamp 57885494 ...
pushing image number 74 having image timestamp 57885558 to mediapipe ...
callback called with timestamp 57885558 ...
pushing image number 75 having image timestamp 57885594 to mediapipe ...
pushing image number 76 having image timestamp 57885626 to mediapipe ...
callback called with timestamp 57885594 ...
pushing image number 77 having image timestamp 57885658 to mediapipe ...
callback called with timestamp 57885658 ...
pushing image number 78 having image timestamp 57885694 to mediapipe ...
pushing image number 79 having image timestamp 57885726 to mediapipe ...
callback called with timestamp 57885694 ...
pushing image number 80 having image timestamp 57885758 to mediapipe ...
callback called with timestamp 57885758 ...
pushing image number 81 having image timestamp 57885794 to mediapipe ...
pushing image number 82 having image timestamp 57885826 to mediapipe ...
callback called with timestamp 57885794 ...
pushing image number 83 having image timestamp 57885858 to mediapipe ...
callback called with timestamp 57885858 ...
pushing image number 84 having image timestamp 57885894 to mediapipe ...
pushing image number 85 having image timestamp 57885926 to mediapipe ...
callback called with timestamp 57885894 ...
pushing image number 86 having image timestamp 57885958 to mediapipe ...
callback called with timestamp 57885958 ...
pushing image number 87 having image timestamp 57885990 to mediapipe ...
pushing image number 88 having image timestamp 57886026 to mediapipe ...
callback called with timestamp 57885990 ...
pushing image number 89 having image timestamp 57886058 to mediapipe ...
callback called with timestamp 57886058 ...
pushing image number 90 having image timestamp 57886090 to mediapipe ...
pushing image number 91 having image timestamp 57886126 to mediapipe ...
callback called with timestamp 57886090 ...
pushing image number 92 having image timestamp 57886158 to mediapipe ...
callback called with timestamp 57886158 ...
pushing image number 93 having image timestamp 57886190 to mediapipe ...
pushing image number 94 having image timestamp 57886226 to mediapipe ...
callback called with timestamp 57886190 ...
pushing image number 95 having image timestamp 57886258 to mediapipe ...
callback called with timestamp 57886258 ...
pushing image number 96 having image timestamp 57886290 to mediapipe ...
pushing image number 97 having image timestamp 57886326 to mediapipe ...
callback called with timestamp 57886290 ...
pushing image number 98 having image timestamp 57886358 to mediapipe ...
callback called with timestamp 57886358 ...
pushing image number 99 having image timestamp 57886390 to mediapipe ...
pushing image number 100 having image timestamp 57886422 to mediapipe ...
callback called with timestamp 57886422 ...
pushing image number 101 having image timestamp 57886458 to mediapipe ...
callback called with timestamp 57886458 ...
pushing image number 102 having image timestamp 57886490 to mediapipe ...
pushing image number 103 having image timestamp 57886522 to mediapipe ...
callback called with timestamp 57886490 ...
pushing image number 104 having image timestamp 57886558 to mediapipe ...
callback called with timestamp 57886558 ...
pushing image number 105 having image timestamp 57886590 to mediapipe ...
pushing image number 106 having image timestamp 57886622 to mediapipe ...
callback called with timestamp 57886622 ...
pushing image number 107 having image timestamp 57886658 to mediapipe ...
callback called with timestamp 57886658 ...
pushing image number 108 having image timestamp 57886690 to mediapipe ...
pushing image number 109 having image timestamp 57886722 to mediapipe ...
callback called with timestamp 57886722 ...
pushing image number 110 having image timestamp 57886758 to mediapipe ...
callback called with timestamp 57886758 ...
pushing image number 111 having image timestamp 57886790 to mediapipe ...
pushing image number 112 having image timestamp 57886822 to mediapipe ...
callback called with timestamp 57886822 ...
pushing image number 113 having image timestamp 57886858 to mediapipe ...
callback called with timestamp 57886858 ...
pushing image number 114 having image timestamp 57886890 to mediapipe ...
pushing image number 115 having image timestamp 57886922 to mediapipe ...
callback called with timestamp 57886922 ...
pushing image number 116 having image timestamp 57886954 to mediapipe ...
callback called with timestamp 57886954 ...
pushing image number 117 having image timestamp 57886990 to mediapipe ...
pushing image number 118 having image timestamp 57887022 to mediapipe ...
callback called with timestamp 57887022 ...
pushing image number 119 having image timestamp 57887054 to mediapipe ...
callback called with timestamp 57887054 ...
pushing image number 120 having image timestamp 57887090 to mediapipe ...
pushing image number 121 having image timestamp 57887122 to mediapipe ...
callback called with timestamp 57887122 ...
pushing image number 122 having image timestamp 57887154 to mediapipe ...
callback called with timestamp 57887154 ...
pushing image number 123 having image timestamp 57887190 to mediapipe ...
pushing image number 124 having image timestamp 57887222 to mediapipe ...
callback called with timestamp 57887222 ...
pushing image number 125 having image timestamp 57887254 to mediapipe ...
callback called with timestamp 57887254 ...
pushing image number 126 having image timestamp 57887290 to mediapipe ...
pushing image number 127 having image timestamp 57887322 to mediapipe ...
callback called with timestamp 57887322 ...
pushing image number 128 having image timestamp 57887354 to mediapipe ...
pushing image number 129 having image timestamp 57887386 to mediapipe ...
callback called with timestamp 57887354 ...
pushing image number 130 having image timestamp 57887422 to mediapipe ...
callback called with timestamp 57887422 ...
pushing image number 131 having image timestamp 57887454 to mediapipe ...
pushing image number 132 having image timestamp 57887486 to mediapipe ...
callback called with timestamp 57887454 ...
pushing image number 133 having image timestamp 57887522 to mediapipe ...
callback called with timestamp 57887522 ...
pushing image number 134 having image timestamp 57887554 to mediapipe ...
pushing image number 135 having image timestamp 57887586 to mediapipe ...
callback called with timestamp 57887554 ...
pushing image number 136 having image timestamp 57887622 to mediapipe ...
callback called with timestamp 57887622 ...
pushing image number 137 having image timestamp 57887654 to mediapipe ...
callback called with timestamp 57887654 ...
pushing image number 138 having image timestamp 57887686 to mediapipe ...
pushing image number 139 having image timestamp 57887722 to mediapipe ...
callback called with timestamp 57887686 ...
pushing image number 140 having image timestamp 57887754 to mediapipe ...
pushing image number 141 having image timestamp 57887786 to mediapipe ...
callback called with timestamp 57887754 ...
pushing image number 142 having image timestamp 57887818 to mediapipe ...
callback called with timestamp 57887818 ...
pushing image number 143 having image timestamp 57887854 to mediapipe ...
pushing image number 144 having image timestamp 57887886 to mediapipe ...
callback called with timestamp 57887854 ...
pushing image number 145 having image timestamp 57887918 to mediapipe ...
callback called with timestamp 57887918 ...
pushing image number 146 having image timestamp 57887954 to mediapipe ...
pushing image number 147 having image timestamp 57887986 to mediapipe ...
callback called with timestamp 57887954 ...
pushing image number 148 having image timestamp 57888018 to mediapipe ...
callback called with timestamp 57888018 ...
pushing image number 149 having image timestamp 57888054 to mediapipe ...
pushing image number 150 having image timestamp 57888086 to mediapipe ...
callback called with timestamp 57888054 ...
pushing image number 151 having image timestamp 57888118 to mediapipe ...
callback called with timestamp 57888118 ...
pushing image number 152 having image timestamp 57888154 to mediapipe ...
pushing image number 153 having image timestamp 57888186 to mediapipe ...
callback called with timestamp 57888154 ...
pushing image number 154 having image timestamp 57888218 to mediapipe ...
callback called with timestamp 57888218 ...
pushing image number 155 having image timestamp 57888254 to mediapipe ...
pushing image number 156 having image timestamp 57888286 to mediapipe ...
callback called with timestamp 57888254 ...
pushing image number 157 having image timestamp 57888318 to mediapipe ...
callback called with timestamp 57888318 ...
pushing image number 158 having image timestamp 57888350 to mediapipe ...
pushing image number 159 having image timestamp 57888386 to mediapipe ...
callback called with timestamp 57888350 ...
pushing image number 160 having image timestamp 57888418 to mediapipe ...
callback called with timestamp 57888418 ...
pushing image number 161 having image timestamp 57888450 to mediapipe ...
pushing image number 162 having image timestamp 57888486 to mediapipe ...
callback called with timestamp 57888450 ...
pushing image number 163 having image timestamp 57888518 to mediapipe ...
callback called with timestamp 57888518 ...
pushing image number 164 having image timestamp 57888550 to mediapipe ...
pushing image number 165 having image timestamp 57888586 to mediapipe ...
callback called with timestamp 57888550 ...
pushing image number 166 having image timestamp 57888618 to mediapipe ...
callback called with timestamp 57888618 ...
pushing image number 167 having image timestamp 57888650 to mediapipe ...
pushing image number 168 having image timestamp 57888686 to mediapipe ...
callback called with timestamp 57888650 ...
pushing image number 169 having image timestamp 57888718 to mediapipe ...
callback called with timestamp 57888685 ...
pushing image number 170 having image timestamp 57888750 to mediapipe ...
pushing image number 171 having image timestamp 57888782 to mediapipe ...
callback called with timestamp 57888685 ...
terminate called after throwing an instance of 'pybind11::error_already_set'
what(): ValueError: timestamp 57888685 has already been provided to this callback
Process finished with exit code 134 (interrupted by signal 6:SIGABRT)
And another output from running this code again:
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1717471174.296395 225928 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1717471174.298499 225964 gl_context.cc:357] GL version: 3.2 (OpenGL ES 3.2 Mesa 23.2.1-1ubuntu3.1~22.04.2), renderer: Mesa Intel(R) UHD Graphics 630 (CFL GT2)
W0000 00:00:1717471174.298933 225928 face_landmarker_graph.cc:174] Sets FaceBlendshapesGraph acceleration to xnnpack by default.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
W0000 00:00:1717471174.321809 225966 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1717471174.333302 225970 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
pushing image number 0 having image timestamp 58591691 to mediapipe ...
venv-3.11.9/lib/python3.11/site-packages/google/protobuf/symbol_database.py:55: UserWarning: SymbolDatabase.GetPrototype() is deprecated. Please use message_factory.GetMessageClass() instead. SymbolDatabase.GetPrototype() will be removed soon.
warnings.warn('SymbolDatabase.GetPrototype() is deprecated. Please '
callback called with timestamp 58591691 ...
pushing image number 1 having image timestamp 58591727 to mediapipe ...
pushing image number 2 having image timestamp 58591759 to mediapipe ...
callback called with timestamp 58591727 ...
pushing image number 3 having image timestamp 58591791 to mediapipe ...
callback called with timestamp 58591759 ...
pushing image number 4 having image timestamp 58591827 to mediapipe ...
pushing image number 5 having image timestamp 58591859 to mediapipe ...
callback called with timestamp 58591791 ...
pushing image number 6 having image timestamp 58591891 to mediapipe ...
callback called with timestamp 58591827 ...
pushing image number 7 having image timestamp 58591927 to mediapipe ...
pushing image number 8 having image timestamp 58591959 to mediapipe ...
callback called with timestamp 58591859 ...
pushing image number 9 having image timestamp 58591991 to mediapipe ...
callback called with timestamp 58591891 ...
pushing image number 10 having image timestamp 58592027 to mediapipe ...
pushing image number 11 having image timestamp 58592059 to mediapipe ...
callback called with timestamp 58591927 ...
pushing image number 12 having image timestamp 58592091 to mediapipe ...
pushing image number 13 having image timestamp 58592127 to mediapipe ...
callback called with timestamp 58591959 ...
pushing image number 14 having image timestamp 58592159 to mediapipe ...
callback called with timestamp 58591991 ...
pushing image number 15 having image timestamp 58592191 to mediapipe ...
pushing image number 16 having image timestamp 58592223 to mediapipe ...
callback called with timestamp 58592027 ...
pushing image number 17 having image timestamp 58592259 to mediapipe ...
callback called with timestamp 58592059 ...
pushing image number 18 having image timestamp 58592291 to mediapipe ...
pushing image number 19 having image timestamp 58592323 to mediapipe ...
callback called with timestamp 58592091 ...
pushing image number 20 having image timestamp 58592359 to mediapipe ...
callback called with timestamp 58592127 ...
pushing image number 21 having image timestamp 58592391 to mediapipe ...
pushing image number 22 having image timestamp 58592423 to mediapipe ...
callback called with timestamp 58592159 ...
pushing image number 23 having image timestamp 58592459 to mediapipe ...
callback called with timestamp 58592191 ...
pushing image number 24 having image timestamp 58592491 to mediapipe ...
pushing image number 25 having image timestamp 58592523 to mediapipe ...
callback called with timestamp 58592223 ...
pushing image number 26 having image timestamp 58592559 to mediapipe ...
callback called with timestamp 58592259 ...
pushing image number 27 having image timestamp 58592591 to mediapipe ...
pushing image number 28 having image timestamp 58592623 to mediapipe ...
callback called with timestamp 58592291 ...
pushing image number 29 having image timestamp 58592655 to mediapipe ...
callback called with timestamp 58592323 ...
pushing image number 30 having image timestamp 58592691 to mediapipe ...
pushing image number 31 having image timestamp 58592723 to mediapipe ...
callback called with timestamp 58592359 ...
pushing image number 32 having image timestamp 58592755 to mediapipe ...
callback called with timestamp 58592391 ...
pushing image number 33 having image timestamp 58592791 to mediapipe ...
pushing image number 34 having image timestamp 58592823 to mediapipe ...
callback called with timestamp 58592423 ...
pushing image number 35 having image timestamp 58592855 to mediapipe ...
callback called with timestamp 58592459 ...
pushing image number 36 having image timestamp 58592891 to mediapipe ...
pushing image number 37 having image timestamp 58592923 to mediapipe ...
callback called with timestamp 58592491 ...
pushing image number 38 having image timestamp 58592955 to mediapipe ...
pushing image number 39 having image timestamp 58592991 to mediapipe ...
callback called with timestamp 58592523 ...
pushing image number 40 having image timestamp 58593023 to mediapipe ...
callback called with timestamp 58592559 ...
pushing image number 41 having image timestamp 58593055 to mediapipe ...
pushing image number 42 having image timestamp 58593087 to mediapipe ...
callback called with timestamp 58592591 ...
pushing image number 43 having image timestamp 58593123 to mediapipe ...
callback called with timestamp 58592623 ...
pushing image number 44 having image timestamp 58593155 to mediapipe ...
pushing image number 45 having image timestamp 58593187 to mediapipe ...
callback called with timestamp 58592655 ...
pushing image number 46 having image timestamp 58593223 to mediapipe ...
callback called with timestamp 58592691 ...
pushing image number 47 having image timestamp 58593255 to mediapipe ...
pushing image number 48 having image timestamp 58593287 to mediapipe ...
callback called with timestamp 58592723 ...
pushing image number 49 having image timestamp 58593323 to mediapipe ...
callback called with timestamp 58592755 ...
pushing image number 50 having image timestamp 58593355 to mediapipe ...
pushing image number 51 having image timestamp 58593387 to mediapipe ...
callback called with timestamp 58592791 ...
pushing image number 52 having image timestamp 58593423 to mediapipe ...
callback called with timestamp 58592823 ...
pushing image number 53 having image timestamp 58593455 to mediapipe ...
pushing image number 54 having image timestamp 58593487 to mediapipe ...
callback called with timestamp 58592855 ...
pushing image number 55 having image timestamp 58593523 to mediapipe ...
callback called with timestamp 58592891 ...
pushing image number 56 having image timestamp 58593555 to mediapipe ...
pushing image number 57 having image timestamp 58593587 to mediapipe ...
callback called with timestamp 58592923 ...
pushing image number 58 having image timestamp 58593619 to mediapipe ...
callback called with timestamp 58592955 ...
pushing image number 59 having image timestamp 58593655 to mediapipe ...
pushing image number 60 having image timestamp 58593687 to mediapipe ...
callback called with timestamp 58592991 ...
pushing image number 61 having image timestamp 58593719 to mediapipe ...
callback called with timestamp 58593023 ...
pushing image number 62 having image timestamp 58593755 to mediapipe ...
pushing image number 63 having image timestamp 58593787 to mediapipe ...
callback called with timestamp 58593055 ...
pushing image number 64 having image timestamp 58593819 to mediapipe ...
callback called with timestamp 58593087 ...
pushing image number 65 having image timestamp 58593855 to mediapipe ...
pushing image number 66 having image timestamp 58593887 to mediapipe ...
callback called with timestamp 58593123 ...
pushing image number 67 having image timestamp 58593919 to mediapipe ...
pushing image number 68 having image timestamp 58593955 to mediapipe ...
callback called with timestamp 58593155 ...
pushing image number 69 having image timestamp 58593987 to mediapipe ...
callback called with timestamp 58593187 ...
pushing image number 70 having image timestamp 58594019 to mediapipe ...
pushing image number 71 having image timestamp 58594051 to mediapipe ...
callback called with timestamp 58593223 ...
pushing image number 72 having image timestamp 58594087 to mediapipe ...
callback called with timestamp 58593255 ...
pushing image number 73 having image timestamp 58594119 to mediapipe ...
pushing image number 74 having image timestamp 58594151 to mediapipe ...
callback called with timestamp 58593287 ...
pushing image number 75 having image timestamp 58594187 to mediapipe ...
callback called with timestamp 58593323 ...
pushing image number 76 having image timestamp 58594219 to mediapipe ...
pushing image number 77 having image timestamp 58594251 to mediapipe ...
callback called with timestamp 58593355 ...
pushing image number 78 having image timestamp 58594287 to mediapipe ...
callback called with timestamp 58593387 ...
pushing image number 79 having image timestamp 58594319 to mediapipe ...
pushing image number 80 having image timestamp 58594351 to mediapipe ...
callback called with timestamp 58593423 ...
pushing image number 81 having image timestamp 58594387 to mediapipe ...
callback called with timestamp 58593455 ...
pushing image number 82 having image timestamp 58594419 to mediapipe ...
pushing image number 83 having image timestamp 58594451 to mediapipe ...
callback called with timestamp 58593487 ...
pushing image number 84 having image timestamp 58594487 to mediapipe ...
callback called with timestamp 58593523 ...
pushing image number 85 having image timestamp 58594519 to mediapipe ...
pushing image number 86 having image timestamp 58594551 to mediapipe ...
callback called with timestamp 58593555 ...
pushing image number 87 having image timestamp 58594583 to mediapipe ...
callback called with timestamp 58593587 ...
pushing image number 88 having image timestamp 58594619 to mediapipe ...
pushing image number 89 having image timestamp 58594651 to mediapipe ...
callback called with timestamp 58593619 ...
pushing image number 90 having image timestamp 58594683 to mediapipe ...
callback called with timestamp 58593655 ...
pushing image number 91 having image timestamp 58594719 to mediapipe ...
pushing image number 92 having image timestamp 58594751 to mediapipe ...
callback called with timestamp 58593687 ...
pushing image number 93 having image timestamp 58594783 to mediapipe ...
callback called with timestamp 58594783 ...
pushing image number 94 having image timestamp 58594819 to mediapipe ...
pushing image number 95 having image timestamp 58594851 to mediapipe ...
callback called with timestamp 58594851 ...
pushing image number 96 having image timestamp 58594883 to mediapipe ...
pushing image number 97 having image timestamp 58594919 to mediapipe ...
callback called with timestamp 58594883 ...
pushing image number 98 having image timestamp 58594951 to mediapipe ...
callback called with timestamp 58594951 ...
pushing image number 99 having image timestamp 58594983 to mediapipe ...
pushing image number 100 having image timestamp 58595015 to mediapipe ...
callback called with timestamp 58594983 ...
pushing image number 101 having image timestamp 58595051 to mediapipe ...
callback called with timestamp 58595051 ...
pushing image number 102 having image timestamp 58595083 to mediapipe ...
pushing image number 103 having image timestamp 58595115 to mediapipe ...
callback called with timestamp 58595083 ...
pushing image number 104 having image timestamp 58595151 to mediapipe ...
callback called with timestamp 58595151 ...
pushing image number 105 having image timestamp 58595183 to mediapipe ...
pushing image number 106 having image timestamp 58595215 to mediapipe ...
callback called with timestamp 58595183 ...
pushing image number 107 having image timestamp 58595251 to mediapipe ...
callback called with timestamp 58595251 ...
pushing image number 108 having image timestamp 58595283 to mediapipe ...
pushing image number 109 having image timestamp 58595315 to mediapipe ...
callback called with timestamp 58595283 ...
pushing image number 110 having image timestamp 58595351 to mediapipe ...
callback called with timestamp 58595351 ...
pushing image number 111 having image timestamp 58595383 to mediapipe ...
pushing image number 112 having image timestamp 58595415 to mediapipe ...
callback called with timestamp 58595383 ...
pushing image number 113 having image timestamp 58595447 to mediapipe ...
callback called with timestamp 58595447 ...
pushing image number 114 having image timestamp 58595483 to mediapipe ...
pushing image number 115 having image timestamp 58595515 to mediapipe ...
callback called with timestamp 58595483 ...
pushing image number 116 having image timestamp 58595547 to mediapipe ...
callback called with timestamp 58595547 ...
pushing image number 117 having image timestamp 58595583 to mediapipe ...
pushing image number 118 having image timestamp 58595615 to mediapipe ...
callback called with timestamp 58595615 ...
pushing image number 119 having image timestamp 58595647 to mediapipe ...
callback called with timestamp 58595647 ...
pushing image number 120 having image timestamp 58595683 to mediapipe ...
pushing image number 121 having image timestamp 58595715 to mediapipe ...
callback called with timestamp 58595715 ...
pushing image number 122 having image timestamp 58595747 to mediapipe ...
callback called with timestamp 58595747 ...
pushing image number 123 having image timestamp 58595783 to mediapipe ...
pushing image number 124 having image timestamp 58595815 to mediapipe ...
callback called with timestamp 58595815 ...
pushing image number 125 having image timestamp 58595847 to mediapipe ...
callback called with timestamp 58595847 ...
pushing image number 126 having image timestamp 58595883 to mediapipe ...
pushing image number 127 having image timestamp 58595915 to mediapipe ...
callback called with timestamp 58595915 ...
pushing image number 128 having image timestamp 58595947 to mediapipe ...
callback called with timestamp 58595947 ...
pushing image number 129 having image timestamp 58595979 to mediapipe ...
pushing image number 130 having image timestamp 58596015 to mediapipe ...
callback called with timestamp 58596015 ...
pushing image number 131 having image timestamp 58596047 to mediapipe ...
callback called with timestamp 58596047 ...
pushing image number 132 having image timestamp 58596079 to mediapipe ...
pushing image number 133 having image timestamp 58596115 to mediapipe ...
callback called with timestamp 58596115 ...
pushing image number 134 having image timestamp 58596147 to mediapipe ...
callback called with timestamp 58596147 ...
pushing image number 135 having image timestamp 58596179 to mediapipe ...
pushing image number 136 having image timestamp 58596215 to mediapipe ...
callback called with timestamp 58596215 ...
pushing image number 137 having image timestamp 58596247 to mediapipe ...
callback called with timestamp 58596247 ...
pushing image number 138 having image timestamp 58596279 to mediapipe ...
pushing image number 139 having image timestamp 58596315 to mediapipe ...
callback called with timestamp 58596315 ...
pushing image number 140 having image timestamp 58596347 to mediapipe ...
callback called with timestamp 58596347 ...
pushing image number 141 having image timestamp 58596379 to mediapipe ...
pushing image number 142 having image timestamp 58596411 to mediapipe ...
callback called with timestamp 58596411 ...
pushing image number 143 having image timestamp 58596447 to mediapipe ...
callback called with timestamp 58596447 ...
pushing image number 144 having image timestamp 58596479 to mediapipe ...
pushing image number 145 having image timestamp 58596511 to mediapipe ...
callback called with timestamp 58596479 ...
pushing image number 146 having image timestamp 58596547 to mediapipe ...
callback called with timestamp 58596547 ...
pushing image number 147 having image timestamp 58596579 to mediapipe ...
pushing image number 148 having image timestamp 58596611 to mediapipe ...
callback called with timestamp 58596611 ...
pushing image number 149 having image timestamp 58596647 to mediapipe ...
callback called with timestamp 58596647 ...
pushing image number 150 having image timestamp 58596679 to mediapipe ...
pushing image number 151 having image timestamp 58596711 to mediapipe ...
callback called with timestamp 58596711 ...
pushing image number 152 having image timestamp 58596747 to mediapipe ...
callback called with timestamp 58596747 ...
pushing image number 153 having image timestamp 58596779 to mediapipe ...
pushing image number 154 having image timestamp 58596811 to mediapipe ...
callback called with timestamp 58596811 ...
pushing image number 155 having image timestamp 58596847 to mediapipe ...
callback called with timestamp 58596847 ...
pushing image number 156 having image timestamp 58596879 to mediapipe ...
pushing image number 157 having image timestamp 58596911 to mediapipe ...
callback called with timestamp 58596911 ...
pushing image number 158 having image timestamp 58596943 to mediapipe ...
callback called with timestamp 58596943 ...
pushing image number 159 having image timestamp 58596979 to mediapipe ...
pushing image number 160 having image timestamp 58597011 to mediapipe ...
callback called with timestamp 58597011 ...
pushing image number 161 having image timestamp 58597043 to mediapipe ...
callback called with timestamp 58597043 ...
pushing image number 162 having image timestamp 58597079 to mediapipe ...
pushing image number 163 having image timestamp 58597111 to mediapipe ...
callback called with timestamp 58597111 ...
pushing image number 164 having image timestamp 58597143 to mediapipe ...
callback called with timestamp 58597143 ...
pushing image number 165 having image timestamp 58597179 to mediapipe ...
pushing image number 166 having image timestamp 58597211 to mediapipe ...
callback called with timestamp 58597211 ...
pushing image number 167 having image timestamp 58597243 to mediapipe ...
pushing image number 168 having image timestamp 58597279 to mediapipe ...
callback called with timestamp 58597243 ...
pushing image number 169 having image timestamp 58597311 to mediapipe ...
callback called with timestamp 58597311 ...
pushing image number 170 having image timestamp 58597343 to mediapipe ...
pushing image number 171 having image timestamp 58597375 to mediapipe ...
callback called with timestamp 58597343 ...
pushing image number 172 having image timestamp 58597411 to mediapipe ...
callback called with timestamp 58597411 ...
pushing image number 173 having image timestamp 58597443 to mediapipe ...
pushing image number 174 having image timestamp 58597475 to mediapipe ...
callback called with timestamp 58597443 ...
pushing image number 175 having image timestamp 58597511 to mediapipe ...
callback called with timestamp 58597511 ...
pushing image number 176 having image timestamp 58597543 to mediapipe ...
pushing image number 177 having image timestamp 58597575 to mediapipe ...
callback called with timestamp 58597543 ...
pushing image number 178 having image timestamp 58597611 to mediapipe ...
callback called with timestamp 58597611 ...
pushing image number 179 having image timestamp 58597643 to mediapipe ...
pushing image number 180 having image timestamp 58597675 to mediapipe ...
callback called with timestamp 58597643 ...
pushing image number 181 having image timestamp 58597711 to mediapipe ...
callback called with timestamp 58597711 ...
pushing image number 182 having image timestamp 58597743 to mediapipe ...
pushing image number 183 having image timestamp 58597775 to mediapipe ...
callback called with timestamp 58597743 ...
pushing image number 184 having image timestamp 58597811 to mediapipe ...
callback called with timestamp 58597811 ...
pushing image number 185 having image timestamp 58597843 to mediapipe ...
pushing image number 186 having image timestamp 58597875 to mediapipe ...
callback called with timestamp 58597843 ...
pushing image number 187 having image timestamp 58597907 to mediapipe ...
callback called with timestamp 58597907 ...
pushing image number 188 having image timestamp 58597943 to mediapipe ...
pushing image number 189 having image timestamp 58597975 to mediapipe ...
callback called with timestamp 58597943 ...
pushing image number 190 having image timestamp 58598007 to mediapipe ...
callback called with timestamp 58598007 ...
pushing image number 191 having image timestamp 58598043 to mediapipe ...
pushing image number 192 having image timestamp 58598075 to mediapipe ...
callback called with timestamp 58598043 ...
pushing image number 193 having image timestamp 58598107 to mediapipe ...
callback called with timestamp 58598107 ...
pushing image number 194 having image timestamp 58598143 to mediapipe ...
pushing image number 195 having image timestamp 58598175 to mediapipe ...
callback called with timestamp 58598143 ...
pushing image number 196 having image timestamp 58598207 to mediapipe ...
callback called with timestamp 58598207 ...
pushing image number 197 having image timestamp 58598243 to mediapipe ...
pushing image number 198 having image timestamp 58598275 to mediapipe ...
callback called with timestamp 58598243 ...
pushing image number 199 having image timestamp 58598307 to mediapipe ...
callback called with timestamp 58598307 ...
pushing image number 200 having image timestamp 58598339 to mediapipe ...
pushing image number 201 having image timestamp 58598375 to mediapipe ...
callback called with timestamp 58598339 ...
pushing image number 202 having image timestamp 58598407 to mediapipe ...
callback called with timestamp 58598407 ...
pushing image number 203 having image timestamp 58598439 to mediapipe ...
pushing image number 204 having image timestamp 58598475 to mediapipe ...
callback called with timestamp 58598475 ...
pushing image number 205 having image timestamp 58598507 to mediapipe ...
callback called with timestamp 58598507 ...
pushing image number 206 having image timestamp 58598539 to mediapipe ...
pushing image number 207 having image timestamp 58598575 to mediapipe ...
callback called with timestamp 58598539 ...
pushing image number 208 having image timestamp 58598607 to mediapipe ...
callback called with timestamp 58598607 ...
pushing image number 209 having image timestamp 58598639 to mediapipe ...
pushing image number 210 having image timestamp 58598675 to mediapipe ...
callback called with timestamp 58598639 ...
pushing image number 211 having image timestamp 58598707 to mediapipe ...
callback called with timestamp 58598707 ...
pushing image number 212 having image timestamp 58598739 to mediapipe ...
pushing image number 213 having image timestamp 58598771 to mediapipe ...
callback called with timestamp 58598771 ...
pushing image number 214 having image timestamp 58598807 to mediapipe ...
callback called with timestamp 58598807 ...
pushing image number 215 having image timestamp 58598839 to mediapipe ...
pushing image number 216 having image timestamp 58598871 to mediapipe ...
callback called with timestamp 58598871 ...
pushing image number 217 having image timestamp 58598907 to mediapipe ...
callback called with timestamp 58598907 ...
pushing image number 218 having image timestamp 58598939 to mediapipe ...
pushing image number 219 having image timestamp 58598971 to mediapipe ...
callback called with timestamp 58598971 ...
pushing image number 220 having image timestamp 58599007 to mediapipe ...
callback called with timestamp 58599007 ...
pushing image number 221 having image timestamp 58599039 to mediapipe ...
pushing image number 222 having image timestamp 58599071 to mediapipe ...
callback called with timestamp 58599071 ...
pushing image number 223 having image timestamp 58599107 to mediapipe ...
callback called with timestamp 58599107 ...
pushing image number 224 having image timestamp 58599139 to mediapipe ...
pushing image number 225 having image timestamp 58599171 to mediapipe ...
callback called with timestamp 58599171 ...
pushing image number 226 having image timestamp 58599207 to mediapipe ...
callback called with timestamp 58599207 ...
pushing image number 227 having image timestamp 58599239 to mediapipe ...
pushing image number 228 having image timestamp 58599271 to mediapipe ...
callback called with timestamp 58599271 ...
pushing image number 229 having image timestamp 58599303 to mediapipe ...
callback called with timestamp 58599303 ...
pushing image number 230 having image timestamp 58599339 to mediapipe ...
pushing image number 231 having image timestamp 58599371 to mediapipe ...
callback called with timestamp 58599371 ...
pushing image number 232 having image timestamp 58599403 to mediapipe ...
callback called with timestamp 58599403 ...
pushing image number 233 having image timestamp 58599439 to mediapipe ...
pushing image number 234 having image timestamp 58599471 to mediapipe ...
callback called with timestamp 58599471 ...
pushing image number 235 having image timestamp 58599503 to mediapipe ...
callback called with timestamp 58599503 ...
pushing image number 236 having image timestamp 58599539 to mediapipe ...
pushing image number 237 having image timestamp 58599571 to mediapipe ...
callback called with timestamp 58599571 ...
pushing image number 238 having image timestamp 58599603 to mediapipe ...
pushing image number 239 having image timestamp 58599639 to mediapipe ...
callback called with timestamp 58599603 ...
pushing image number 240 having image timestamp 58599671 to mediapipe ...
callback called with timestamp 58599671 ...
pushing image number 241 having image timestamp 58599703 to mediapipe ...
pushing image number 242 having image timestamp 58599735 to mediapipe ...
callback called with timestamp 58599703 ...
pushing image number 243 having image timestamp 58599771 to mediapipe ...
callback called with timestamp 58599771 ...
pushing image number 244 having image timestamp 58599803 to mediapipe ...
pushing image number 245 having image timestamp 58599835 to mediapipe ...
callback called with timestamp 58599803 ...
pushing image number 246 having image timestamp 58599871 to mediapipe ...
callback called with timestamp 58599871 ...
pushing image number 247 having image timestamp 58599903 to mediapipe ...
pushing image number 248 having image timestamp 58599935 to mediapipe ...
callback called with timestamp 58599903 ...
pushing image number 249 having image timestamp 58599971 to mediapipe ...
callback called with timestamp 58599971 ...
pushing image number 250 having image timestamp 58600003 to mediapipe ...
pushing image number 251 having image timestamp 58600035 to mediapipe ...
callback called with timestamp 58600003 ...
pushing image number 252 having image timestamp 58600071 to mediapipe ...
callback called with timestamp 58600071 ...
pushing image number 253 having image timestamp 58600103 to mediapipe ...
pushing image number 254 having image timestamp 58600135 to mediapipe ...
callback called with timestamp 58600135 ...
pushing image number 255 having image timestamp 58600171 to mediapipe ...
callback called with timestamp 58600171 ...
pushing image number 256 having image timestamp 58600203 to mediapipe ...
pushing image number 257 having image timestamp 58600235 to mediapipe ...
callback called with timestamp 58600235 ...
pushing image number 258 having image timestamp 58600267 to mediapipe ...
callback called with timestamp 58600267 ...
pushing image number 259 having image timestamp 58600303 to mediapipe ...
pushing image number 260 having image timestamp 58600335 to mediapipe ...
callback called with timestamp 58600335 ...
pushing image number 261 having image timestamp 58600367 to mediapipe ...
callback called with timestamp 58600367 ...
pushing image number 262 having image timestamp 58600403 to mediapipe ...
pushing image number 263 having image timestamp 58600435 to mediapipe ...
callback called with timestamp 58600435 ...
pushing image number 264 having image timestamp 58600467 to mediapipe ...
callback called with timestamp 58600467 ...
pushing image number 265 having image timestamp 58600503 to mediapipe ...
pushing image number 266 having image timestamp 58600535 to mediapipe ...
callback called with timestamp 58600535 ...
pushing image number 267 having image timestamp 58600567 to mediapipe ...
callback called with timestamp 58600567 ...
pushing image number 268 having image timestamp 58600603 to mediapipe ...
pushing image number 269 having image timestamp 58600635 to mediapipe ...
callback called with timestamp 58600635 ...
pushing image number 270 having image timestamp 58600667 to mediapipe ...
callback called with timestamp 58600667 ...
pushing image number 271 having image timestamp 58600699 to mediapipe ...
pushing image number 272 having image timestamp 58600735 to mediapipe ...
callback called with timestamp 58600735 ...
pushing image number 273 having image timestamp 58600767 to mediapipe ...
callback called with timestamp 58600767 ...
pushing image number 274 having image timestamp 58600799 to mediapipe ...
pushing image number 275 having image timestamp 58600835 to mediapipe ...
callback called with timestamp 58600835 ...
pushing image number 276 having image timestamp 58600867 to mediapipe ...
callback called with timestamp 58600867 ...
pushing image number 277 having image timestamp 58600899 to mediapipe ...
pushing image number 278 having image timestamp 58600935 to mediapipe ...
callback called with timestamp 58600935 ...
pushing image number 279 having image timestamp 58600967 to mediapipe ...
callback called with timestamp 58600967 ...
pushing image number 280 having image timestamp 58600999 to mediapipe ...
pushing image number 281 having image timestamp 58601035 to mediapipe ...
callback called with timestamp 58601035 ...
pushing image number 282 having image timestamp 58601067 to mediapipe ...
callback called with timestamp 58601067 ...
pushing image number 283 having image timestamp 58601099 to mediapipe ...
pushing image number 284 having image timestamp 58601135 to mediapipe ...
callback called with timestamp 58601099 ...
pushing image number 285 having image timestamp 58601167 to mediapipe ...
callback called with timestamp 58601167 ...
pushing image number 286 having image timestamp 58601199 to mediapipe ...
pushing image number 287 having image timestamp 58601231 to mediapipe ...
callback called with timestamp 58601230 ...
pushing image number 288 having image timestamp 58601267 to mediapipe ...
terminate called after throwing an instance of 'pybind11::error_already_set'
what(): ValueError: timestamp 58601230 has already been provided to this callback
At: /venv-3.11.9/lib/python3.11/site-packages/mediapipe/tasks/python/vision/face_landmarker.py(3066): packets_callback
callback called with timestamp 58601230 ...
Process finished with exit code 134 (interrupted by signal 6:SIGABRT)
The timestamps seem to actually be irregular not just in being duplicately called to the callback, but with this minimally reproducing code you can also see that timestamps passed to the callback twice are not even pushed into the pipeline.
Change the exception raising to just a print() and it behaves like this:
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1717471395.513658 226326 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1717471395.515618 226361 gl_context.cc:357] GL version: 3.2 (OpenGL ES 3.2 Mesa 23.2.1-1ubuntu3.1~22.04.2), renderer: Mesa Intel(R) UHD Graphics 630 (CFL GT2)
W0000 00:00:1717471395.516063 226326 face_landmarker_graph.cc:174] Sets FaceBlendshapesGraph acceleration to xnnpack by default.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
W0000 00:00:1717471395.537840 226363 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1717471395.549349 226368 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
pushing image number 0 having image timestamp 58812907 to mediapipe ...
callback called with timestamp 58812907 ...
pushing image number 1 having image timestamp 58812943 to mediapipe ...
callback called with timestamp 58812943 ...
pushing image number 2 having image timestamp 58812975 to mediapipe ...
pushing image number 3 having image timestamp 58813007 to mediapipe ...
callback called with timestamp 58812975 ...
pushing image number 4 having image timestamp 58813043 to mediapipe ...
callback called with timestamp 58813043 ...
pushing image number 5 having image timestamp 58813075 to mediapipe ...
pushing image number 6 having image timestamp 58813107 to mediapipe ...
callback called with timestamp 58813107 ...
pushing image number 7 having image timestamp 58813143 to mediapipe ...
callback called with timestamp 58813143 ...
pushing image number 8 having image timestamp 58813175 to mediapipe ...
pushing image number 9 having image timestamp 58813207 to mediapipe ...
callback called with timestamp 58813207 ...
pushing image number 10 having image timestamp 58813243 to mediapipe ...
callback called with timestamp 58813243 ...
pushing image number 11 having image timestamp 58813275 to mediapipe ...
pushing image number 12 having image timestamp 58813307 to mediapipe ...
callback called with timestamp 58813307 ...
pushing image number 13 having image timestamp 58813339 to mediapipe ...
callback called with timestamp 58813339 ...
pushing image number 14 having image timestamp 58813375 to mediapipe ...
pushing image number 15 having image timestamp 58813407 to mediapipe ...
callback called with timestamp 58813407 ...
pushing image number 16 having image timestamp 58813439 to mediapipe ...
callback called with timestamp 58813439 ...
pushing image number 17 having image timestamp 58813475 to mediapipe ...
pushing image number 18 having image timestamp 58813507 to mediapipe ...
callback called with timestamp 58813507 ...
pushing image number 19 having image timestamp 58813539 to mediapipe ...
callback called with timestamp 58813539 ...
pushing image number 20 having image timestamp 58813575 to mediapipe ...
pushing image number 21 having image timestamp 58813607 to mediapipe ...
callback called with timestamp 58813607 ...
pushing image number 22 having image timestamp 58813639 to mediapipe ...
callback called with timestamp 58813639 ...
pushing image number 23 having image timestamp 58813675 to mediapipe ...
pushing image number 24 having image timestamp 58813707 to mediapipe ...
callback called with timestamp 58813707 ...
pushing image number 25 having image timestamp 58813739 to mediapipe ...
callback called with timestamp 58813739 ...
pushing image number 26 having image timestamp 58813775 to mediapipe ...
pushing image number 27 having image timestamp 58813807 to mediapipe ...
callback called with timestamp 58813807 ...
pushing image number 28 having image timestamp 58813839 to mediapipe ...
callback called with timestamp 58813839 ...
pushing image number 29 having image timestamp 58813871 to mediapipe ...
pushing image number 30 having image timestamp 58813907 to mediapipe ...
callback called with timestamp 58813907 ...
pushing image number 31 having image timestamp 58813939 to mediapipe ...
callback called with timestamp 58813939 ...
pushing image number 32 having image timestamp 58813971 to mediapipe ...
pushing image number 33 having image timestamp 58814007 to mediapipe ...
callback called with timestamp 58814007 ...
pushing image number 34 having image timestamp 58814039 to mediapipe ...
callback called with timestamp 58814039 ...
pushing image number 35 having image timestamp 58814071 to mediapipe ...
pushing image number 36 having image timestamp 58814107 to mediapipe ...
callback called with timestamp 58814107 ...
pushing image number 37 having image timestamp 58814139 to mediapipe ...
callback called with timestamp 58814139 ...
pushing image number 38 having image timestamp 58814171 to mediapipe ...
pushing image number 39 having image timestamp 58814207 to mediapipe ...
callback called with timestamp 58814207 ...
pushing image number 40 having image timestamp 58814239 to mediapipe ...
callback called with timestamp 58814239 ...
pushing image number 41 having image timestamp 58814271 to mediapipe ...
pushing image number 42 having image timestamp 58814303 to mediapipe ...
callback called with timestamp 58814303 ...
pushing image number 43 having image timestamp 58814339 to mediapipe ...
callback called with timestamp 58814339 ...
pushing image number 44 having image timestamp 58814371 to mediapipe ...
pushing image number 45 having image timestamp 58814403 to mediapipe ...
callback called with timestamp 58814403 ...
pushing image number 46 having image timestamp 58814439 to mediapipe ...
pushing image number 47 having image timestamp 58814471 to mediapipe ...
callback called with timestamp 58814439 ...
pushing image number 48 having image timestamp 58814503 to mediapipe ...
callback called with timestamp 58814503 ...
pushing image number 49 having image timestamp 58814539 to mediapipe ...
pushing image number 50 having image timestamp 58814571 to mediapipe ...
callback called with timestamp 58814539 ...
pushing image number 51 having image timestamp 58814603 to mediapipe ...
callback called with timestamp 58814603 ...
pushing image number 52 having image timestamp 58814639 to mediapipe ...
pushing image number 53 having image timestamp 58814671 to mediapipe ...
callback called with timestamp 58814639 ...
pushing image number 54 having image timestamp 58814703 to mediapipe ...
callback called with timestamp 58814703 ...
pushing image number 55 having image timestamp 58814739 to mediapipe ...
pushing image number 56 having image timestamp 58814771 to mediapipe ...
callback called with timestamp 58814739 ...
pushing image number 57 having image timestamp 58814803 to mediapipe ...
callback called with timestamp 58814803 ...
pushing image number 58 having image timestamp 58814835 to mediapipe ...
pushing image number 59 having image timestamp 58814871 to mediapipe ...
callback called with timestamp 58814834 ...
pushing image number 60 having image timestamp 58814903 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 61 having image timestamp 58814935 to mediapipe ...
pushing image number 62 having image timestamp 58814971 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 63 having image timestamp 58815003 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 64 having image timestamp 58815035 to mediapipe ...
pushing image number 65 having image timestamp 58815071 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 66 having image timestamp 58815103 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 67 having image timestamp 58815135 to mediapipe ...
pushing image number 68 having image timestamp 58815171 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 69 having image timestamp 58815203 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 70 having image timestamp 58815235 to mediapipe ...
pushing image number 71 having image timestamp 58815267 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 72 having image timestamp 58815303 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 73 having image timestamp 58815335 to mediapipe ...
pushing image number 74 having image timestamp 58815367 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 75 having image timestamp 58815403 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 76 having image timestamp 58815435 to mediapipe ...
pushing image number 77 having image timestamp 58815467 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 78 having image timestamp 58815503 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 79 having image timestamp 58815535 to mediapipe ...
pushing image number 80 having image timestamp 58815567 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 81 having image timestamp 58815603 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 82 having image timestamp 58815635 to mediapipe ...
pushing image number 83 having image timestamp 58815667 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 84 having image timestamp 58815703 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 85 having image timestamp 58815735 to mediapipe ...
pushing image number 86 having image timestamp 58815767 to mediapipe ...
callback called with timestamp 58814834 ...
timestamp 58814834 has already been provided to this callback
pushing image number 87 having image timestamp 58815799 to mediapipe ...
UserWarning: SymbolDatabase.GetPrototype() is deprecated. Please use message_factory.GetMessageClass() instead. SymbolDatabase.GetPrototype() will be removed soon.
warnings.warn('SymbolDatabase.GetPrototype() is deprecated. Please '
callback called with timestamp 58814835 ...
pushing image number 88 having image timestamp 58815835 to mediapipe ...
pushing image number 89 having image timestamp 58815867 to mediapipe ...
callback called with timestamp 58814871 ...
pushing image number 90 having image timestamp 58815899 to mediapipe ...
callback called with timestamp 58814903 ...
pushing image number 91 having image timestamp 58815935 to mediapipe ...
― many repetitions of the same timestamp being passed to the callback, i.e. 18 in the above run:
timestamp 58814834 has already been provided to this callback
Looks like maybe some numeric instability in converting the timestamps' precision deep within the pipeline, or something more involved.
Another run with only a 0.035 sleep in the callback:
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1717472177.437614 227759 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1717472177.439567 227790 gl_context.cc:357] GL version: 3.2 (OpenGL ES 3.2 Mesa 23.2.1-1ubuntu3.1~22.04.2), renderer: Mesa Intel(R) UHD Graphics 630 (CFL GT2)
W0000 00:00:1717472177.439975 227759 face_landmarker_graph.cc:174] Sets FaceBlendshapesGraph acceleration to xnnpack by default.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
W0000 00:00:1717472177.465879 227793 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1717472177.477584 227797 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
pushing image number 0 having image timestamp 59594836 to mediapipe ...
callback called with timestamp 59594836 ...
pushing image number 1 having image timestamp 59594872 to mediapipe ...
callback called with timestamp 59594872 ...
pushing image number 2 having image timestamp 59594904 to mediapipe ...
callback called with timestamp 59594904 ...
pushing image number 3 having image timestamp 59594936 to mediapipe ...
callback called with timestamp 59594936 ...
pushing image number 4 having image timestamp 59594972 to mediapipe ...
callback called with timestamp 59594972 ...
pushing image number 5 having image timestamp 59595004 to mediapipe ...
pushing image number 6 having image timestamp 59595036 to mediapipe ...
callback called with timestamp 59595004 ...
pushing image number 7 having image timestamp 59595072 to mediapipe ...
callback called with timestamp 59595036 ...
pushing image number 8 having image timestamp 59595104 to mediapipe ...
callback called with timestamp 59595072 ...
pushing image number 9 having image timestamp 59595136 to mediapipe ...
callback called with timestamp 59595104 ...
pushing image number 10 having image timestamp 59595172 to mediapipe ...
callback called with timestamp 59595136 ...
pushing image number 11 having image timestamp 59595204 to mediapipe ...
callback called with timestamp 59595172 ...
pushing image number 12 having image timestamp 59595236 to mediapipe ...
callback called with timestamp 59595236 ...
pushing image number 13 having image timestamp 59595268 to mediapipe ...
callback called with timestamp 59595268 ...
pushing image number 14 having image timestamp 59595304 to mediapipe ...
callback called with timestamp 59595304 ...
pushing image number 15 having image timestamp 59595336 to mediapipe ...
callback called with timestamp 59595336 ...
pushing image number 16 having image timestamp 59595368 to mediapipe ...
callback called with timestamp 59595368 ...
pushing image number 17 having image timestamp 59595404 to mediapipe ...
callback called with timestamp 59595404 ...
pushing image number 18 having image timestamp 59595436 to mediapipe ...
callback called with timestamp 59595436 ...
pushing image number 19 having image timestamp 59595468 to mediapipe ...
callback called with timestamp 59595468 ...
pushing image number 20 having image timestamp 59595504 to mediapipe ...
callback called with timestamp 59595504 ...
pushing image number 21 having image timestamp 59595536 to mediapipe ...
callback called with timestamp 59595536 ...
pushing image number 22 having image timestamp 59595568 to mediapipe ...
pushing image number 23 having image timestamp 59595604 to mediapipe ...
callback called with timestamp 59595568 ...
pushing image number 24 having image timestamp 59595636 to mediapipe ...
callback called with timestamp 59595604 ...
pushing image number 25 having image timestamp 59595668 to mediapipe ...
callback called with timestamp 59595636 ...
pushing image number 26 having image timestamp 59595704 to mediapipe ...
callback called with timestamp 59595668 ...
pushing image number 27 having image timestamp 59595736 to mediapipe ...
callback called with timestamp 59595704 ...
pushing image number 28 having image timestamp 59595768 to mediapipe ...
callback called with timestamp 59595736 ...
pushing image number 29 having image timestamp 59595800 to mediapipe ...
callback called with timestamp 59595800 ...
pushing image number 30 having image timestamp 59595836 to mediapipe ...
callback called with timestamp 59595836 ...
pushing image number 31 having image timestamp 59595868 to mediapipe ...
callback called with timestamp 59595868 ...
pushing image number 32 having image timestamp 59595900 to mediapipe ...
callback called with timestamp 59595900 ...
pushing image number 33 having image timestamp 59595936 to mediapipe ...
callback called with timestamp 59595936 ...
pushing image number 34 having image timestamp 59595968 to mediapipe ...
callback called with timestamp 59595968 ...
pushing image number 35 having image timestamp 59596000 to mediapipe ...
callback called with timestamp 59596000 ...
pushing image number 36 having image timestamp 59596036 to mediapipe ...
callback called with timestamp 59596036 ...
pushing image number 37 having image timestamp 59596068 to mediapipe ...
callback called with timestamp 59596068 ...
pushing image number 38 having image timestamp 59596100 to mediapipe ...
callback called with timestamp 59596100 ...
pushing image number 39 having image timestamp 59596136 to mediapipe ...
callback called with timestamp 59596136 ...
pushing image number 40 having image timestamp 59596168 to mediapipe ...
pushing image number 41 having image timestamp 59596200 to mediapipe ...
callback called with timestamp 59596168 ...
pushing image number 42 having image timestamp 59596232 to mediapipe ...
callback called with timestamp 59596200 ...
pushing image number 43 having image timestamp 59596268 to mediapipe ...
callback called with timestamp 59596232 ...
pushing image number 44 having image timestamp 59596300 to mediapipe ...
callback called with timestamp 59596268 ...
pushing image number 45 having image timestamp 59596332 to mediapipe ...
callback called with timestamp 59596300 ...
pushing image number 46 having image timestamp 59596368 to mediapipe ...
callback called with timestamp 59596332 ...
pushing image number 47 having image timestamp 59596400 to mediapipe ...
callback called with timestamp 59596400 ...
pushing image number 48 having image timestamp 59596432 to mediapipe ...
callback called with timestamp 59596432 ...
pushing image number 49 having image timestamp 59596468 to mediapipe ...
callback called with timestamp 59596468 ...
pushing image number 50 having image timestamp 59596500 to mediapipe ...
callback called with timestamp 59596500 ...
pushing image number 51 having image timestamp 59596532 to mediapipe ...
callback called with timestamp 59596532 ...
pushing image number 52 having image timestamp 59596568 to mediapipe ...
callback called with timestamp 59596568 ...
pushing image number 53 having image timestamp 59596600 to mediapipe ...
callback called with timestamp 59596600 ...
pushing image number 54 having image timestamp 59596632 to mediapipe ...
callback called with timestamp 59596632 ...
pushing image number 55 having image timestamp 59596664 to mediapipe ...
callback called with timestamp 59596664 ...
pushing image number 56 having image timestamp 59596700 to mediapipe ...
callback called with timestamp 59596700 ...
pushing image number 57 having image timestamp 59596732 to mediapipe ...
pushing image number 58 having image timestamp 59596764 to mediapipe ...
callback called with timestamp 59596732 ...
pushing image number 59 having image timestamp 59596800 to mediapipe ...
callback called with timestamp 59596764 ...
pushing image number 60 having image timestamp 59596832 to mediapipe ...
callback called with timestamp 59596800 ...
pushing image number 61 having image timestamp 59596864 to mediapipe ...
callback called with timestamp 59596864 ...
pushing image number 62 having image timestamp 59596900 to mediapipe ...
callback called with timestamp 59596864 ...
terminate called after throwing an instance of 'pybind11::error_already_set'
what(): ValueError: timestamp 59596864 has already been provided to this callbackWARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1717472177.437614 227759 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1717472177.439567 227790 gl_context.cc:357] GL version: 3.2 (OpenGL ES 3.2 Mesa 23.2.1-1ubuntu3.1~22.04.2), renderer: Mesa Intel(R) UHD Graphics 630 (CFL GT2)
W0000 00:00:1717472177.439975 227759 face_landmarker_graph.cc:174] Sets FaceBlendshapesGraph acceleration to xnnpack by default.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
W0000 00:00:1717472177.465879 227793 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1717472177.477584 227797 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
pushing image number 0 having image timestamp 59594836 to mediapipe ...
callback called with timestamp 59594836 ...
pushing image number 1 having image timestamp 59594872 to mediapipe ...
callback called with timestamp 59594872 ...
pushing image number 2 having image timestamp 59594904 to mediapipe ...
callback called with timestamp 59594904 ...
pushing image number 3 having image timestamp 59594936 to mediapipe ...
callback called with timestamp 59594936 ...
pushing image number 4 having image timestamp 59594972 to mediapipe ...
callback called with timestamp 59594972 ...
pushing image number 5 having image timestamp 59595004 to mediapipe ...
pushing image number 6 having image timestamp 59595036 to mediapipe ...
callback called with timestamp 59595004 ...
pushing image number 7 having image timestamp 59595072 to mediapipe ...
callback called with timestamp 59595036 ...
pushing image number 8 having image timestamp 59595104 to mediapipe ...
callback called with timestamp 59595072 ...
pushing image number 9 having image timestamp 59595136 to mediapipe ...
callback called with timestamp 59595104 ...
pushing image number 10 having image timestamp 59595172 to mediapipe ...
callback called with timestamp 59595136 ...
pushing image number 11 having image timestamp 59595204 to mediapipe ...
callback called with timestamp 59595172 ...
pushing image number 12 having image timestamp 59595236 to mediapipe ...
callback called with timestamp 59595236 ...
pushing image number 13 having image timestamp 59595268 to mediapipe ...
callback called with timestamp 59595268 ...
pushing image number 14 having image timestamp 59595304 to mediapipe ...
callback called with timestamp 59595304 ...
pushing image number 15 having image timestamp 59595336 to mediapipe ...
callback called with timestamp 59595336 ...
pushing image number 16 having image timestamp 59595368 to mediapipe ...
callback called with timestamp 59595368 ...
pushing image number 17 having image timestamp 59595404 to mediapipe ...
callback called with timestamp 59595404 ...
pushing image number 18 having image timestamp 59595436 to mediapipe ...
callback called with timestamp 59595436 ...
pushing image number 19 having image timestamp 59595468 to mediapipe ...
callback called with timestamp 59595468 ...
pushing image number 20 having image timestamp 59595504 to mediapipe ...
callback called with timestamp 59595504 ...
pushing image number 21 having image timestamp 59595536 to mediapipe ...
callback called with timestamp 59595536 ...
pushing image number 22 having image timestamp 59595568 to mediapipe ...
pushing image number 23 having image timestamp 59595604 to mediapipe ...
callback called with timestamp 59595568 ...
pushing image number 24 having image timestamp 59595636 to mediapipe ...
callback called with timestamp 59595604 ...
pushing image number 25 having image timestamp 59595668 to mediapipe ...
callback called with timestamp 59595636 ...
pushing image number 26 having image timestamp 59595704 to mediapipe ...
callback called with timestamp 59595668 ...
pushing image number 27 having image timestamp 59595736 to mediapipe ...
callback called with timestamp 59595704 ...
pushing image number 28 having image timestamp 59595768 to mediapipe ...
callback called with timestamp 59595736 ...
pushing image number 29 having image timestamp 59595800 to mediapipe ...
callback called with timestamp 59595800 ...
pushing image number 30 having image timestamp 59595836 to mediapipe ...
callback called with timestamp 59595836 ...
pushing image number 31 having image timestamp 59595868 to mediapipe ...
callback called with timestamp 59595868 ...
pushing image number 32 having image timestamp 59595900 to mediapipe ...
callback called with timestamp 59595900 ...
pushing image number 33 having image timestamp 59595936 to mediapipe ...
callback called with timestamp 59595936 ...
pushing image number 34 having image timestamp 59595968 to mediapipe ...
callback called with timestamp 59595968 ...
pushing image number 35 having image timestamp 59596000 to mediapipe ...
callback called with timestamp 59596000 ...
pushing image number 36 having image timestamp 59596036 to mediapipe ...
callback called with timestamp 59596036 ...
pushing image number 37 having image timestamp 59596068 to mediapipe ...
callback called with timestamp 59596068 ...
pushing image number 38 having image timestamp 59596100 to mediapipe ...
callback called with timestamp 59596100 ...
pushing image number 39 having image timestamp 59596136 to mediapipe ...
callback called with timestamp 59596136 ...
pushing image number 40 having image timestamp 59596168 to mediapipe ...
pushing image number 41 having image timestamp 59596200 to mediapipe ...
callback called with timestamp 59596168 ...
pushing image number 42 having image timestamp 59596232 to mediapipe ...
callback called with timestamp 59596200 ...
pushing image number 43 having image timestamp 59596268 to mediapipe ...
callback called with timestamp 59596232 ...
pushing image number 44 having image timestamp 59596300 to mediapipe ...
callback called with timestamp 59596268 ...
pushing image number 45 having image timestamp 59596332 to mediapipe ...
callback called with timestamp 59596300 ...
pushing image number 46 having image timestamp 59596368 to mediapipe ...
callback called with timestamp 59596332 ...
pushing image number 47 having image timestamp 59596400 to mediapipe ...
callback called with timestamp 59596400 ...
pushing image number 48 having image timestamp 59596432 to mediapipe ...
callback called with timestamp 59596432 ...
pushing image number 49 having image timestamp 59596468 to mediapipe ...
callback called with timestamp 59596468 ...
pushing image number 50 having image timestamp 59596500 to mediapipe ...
callback called with timestamp 59596500 ...
pushing image number 51 having image timestamp 59596532 to mediapipe ...
callback called with timestamp 59596532 ...
pushing image number 52 having image timestamp 59596568 to mediapipe ...
callback called with timestamp 59596568 ...
pushing image number 53 having image timestamp 59596600 to mediapipe ...
callback called with timestamp 59596600 ...
pushing image number 54 having image timestamp 59596632 to mediapipe ...
callback called with timestamp 59596632 ...
pushing image number 55 having image timestamp 59596664 to mediapipe ...
callback called with timestamp 59596664 ...
pushing image number 56 having image timestamp 59596700 to mediapipe ...
callback called with timestamp 59596700 ...
pushing image number 57 having image timestamp 59596732 to mediapipe ...
pushing image number 58 having image timestamp 59596764 to mediapipe ...
callback called with timestamp 59596732 ...
pushing image number 59 having image timestamp 59596800 to mediapipe ...
callback called with timestamp 59596764 ...
pushing image number 60 having image timestamp 59596832 to mediapipe ...
callback called with timestamp 59596800 ...
pushing image number 61 having image timestamp 59596864 to mediapipe ...
callback called with timestamp 59596864 ...
pushing image number 62 having image timestamp 59596900 to mediapipe ...
callback called with timestamp 59596864 ...
terminate called after throwing an instance of 'pybind11::error_already_set'
what(): ValueError: timestamp 59596864 has already been provided to this callback
Process finished with exit code 134 (interrupted by signal 6:SIGABRT)
This happens within a short while on every run, unless the processing time in the callback is very minimal, which kind of means that backpressure is failing in this spectacular way.
In my real proof-of-concept which this is derived from, I merely draw the landmarks on the image and save the image, nothing too fancy, but already inducing this case. So not a very contrived issue.
Following up with more ergonomic reproducing code which also saves the images.
import cv2
import time
from threading import Lock
import mediapipe as mp
from mediapipe import solutions
from mediapipe.framework.formats import landmark_pb2
import numpy as np
BaseOptions = mp.tasks.BaseOptions
FaceLandmarker = mp.tasks.vision.FaceLandmarker
FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions
FaceLandmarkerResult = mp.tasks.vision.FaceLandmarkerResult
VisionRunningMode = mp.tasks.vision.RunningMode
images_output_path = 'images'
callback_reentrancy_lock = Lock()
timestamps_ms = set()
written_image_number = 0
def handle_pipeline_prediction_callback(
inference: FaceLandmarkerResult,
output_image: mp.Image,
timestamp_ms: int):
global written_image_number
print(f'waiting to acquire lock')
callback_reentrancy_lock.acquire()
print(f'lock acquired')
print(f'callback called at image {written_image_number} with timestamp {timestamp_ms} ...')
if timestamp_ms in timestamps_ms:
print(f'timestamp {timestamp_ms} has already been provided to this callback')
else:
timestamps_ms.add(timestamp_ms)
cv2.imwrite(f'{images_output_path}/{written_image_number} : {timestamp_ms}.png', output_image.numpy_view())
written_image_number += 1
time.sleep(0.05)
callback_reentrancy_lock.release()
def main():
# downloaded from 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task':
model_path = 'models/face_landmarker.task'
options = FaceLandmarkerOptions(
base_options = BaseOptions(model_asset_path = model_path),
running_mode = VisionRunningMode.LIVE_STREAM,
result_callback = handle_pipeline_prediction_callback)
detector = FaceLandmarker.create_from_options(options)
stream = cv2.VideoCapture(0)
# noinspection PyUnresolvedReferences
stream.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
stream.set(cv2.CAP_PROP_FPS, 30)
stream.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
stream.set(cv2.CAP_PROP_BUFFERSIZE, 1)
if not stream.isOpened():
raise Exception(f'failed opening camera')
image_number = 0
last_image_timestamp = None
try:
while True:
stream.grab()
success, image = stream.retrieve()
if not success:
raise Exception(f'failed retrieving camera image')
image_timestamp = int(stream.get(cv2.CAP_PROP_POS_MSEC))
if last_image_timestamp:
if image_timestamp <= last_image_timestamp:
raise ValueError(f'camera image times are not monotonically increasing: {last_image_timestamp}, {image_timestamp}')
last_image_timestamp = image_timestamp
print(f'pushing image number {image_number} having image timestamp {image_timestamp} to mediapipe ...')
detector.detect_async(
image = mp.Image(image_format=mp.ImageFormat.SRGB, data=image),
timestamp_ms = image_timestamp)
print(f'pushed')
image_number += 1
except KeyboardInterrupt as e:
detector.close()
print(f'\nexiting ...')
if __name__ == '__main__':
main()
the images being written seem to experimentally suggest that the image provided to the callback is still correctly the next image taken from the camera stream, even when the timestamps provided to the callback begin repeating themselves. However, always receiving the correct timestamps in the callback enables various kinds of value for an application if it's not a very naive application, so this feels too broken.
Note that with the latest and greatest reproducing code (which is quite the same as the previous editions above) we will also eventually hang at or immediately after detector.detect_async() on every other run.
# reproduces https://github.com/google-ai-edge/mediapipe/issues/5457 on almost every run
from pathlib import Path
import cv2
import time
import mediapipe as mp
BaseOptions = mp.tasks.BaseOptions
FaceLandmarker = mp.tasks.vision.FaceLandmarker
FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions
FaceLandmarkerResult = mp.tasks.vision.FaceLandmarkerResult
VisionRunningMode = mp.tasks.vision.RunningMode
images_output_path = 'face landmarks images'
Path(images_output_path).mkdir(parents=True, exist_ok=True)
timestamps_ms = set()
written_image_number = 0
def handle_pipeline_prediction_callback(
inference: FaceLandmarkerResult,
output_image: mp.Image,
timestamp_ms: int):
global written_image_number
print(f'callback called at image {written_image_number} with timestamp {timestamp_ms} ...')
if timestamp_ms in timestamps_ms:
print(f'timestamp {timestamp_ms} has already been provided to this callback')
else:
timestamps_ms.add(timestamp_ms)
cv2.imwrite(f'{images_output_path}/{written_image_number} : {timestamp_ms}.png', output_image.numpy_view())
written_image_number += 1
time.sleep(0.025)
def main():
# downloaded from 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task':
model_path = 'models/face_landmarker.task'
options = FaceLandmarkerOptions(
base_options = BaseOptions(model_asset_path = model_path),
running_mode = VisionRunningMode.LIVE_STREAM,
result_callback = handle_pipeline_prediction_callback)
detector = FaceLandmarker.create_from_options(options)
stream = cv2.VideoCapture(0)
# noinspection PyUnresolvedReferences
stream.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
stream.set(cv2.CAP_PROP_FPS, 30)
stream.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
stream.set(cv2.CAP_PROP_BUFFERSIZE, 1)
if not stream.isOpened():
raise Exception(f'failed opening camera')
image_number = 0
last_image_timestamp = None
try:
while True:
stream.grab()
success, image = stream.retrieve()
if not success:
raise Exception(f'failed retrieving camera image')
image_timestamp = int(stream.get(cv2.CAP_PROP_POS_MSEC))
if last_image_timestamp:
if image_timestamp <= last_image_timestamp:
raise ValueError(f'camera image times are not monotonically increasing: {last_image_timestamp}, {image_timestamp}')
last_image_timestamp = image_timestamp
print(f'pushing image number {image_number} having image timestamp {image_timestamp} to mediapipe ...')
detector.detect_async(
image = mp.Image(image_format=mp.ImageFormat.SRGB, data=image),
timestamp_ms = image_timestamp)
print(f'pushed')
image_number += 1
except KeyboardInterrupt as e:
detector.close()
print(f'\nexiting ...')
if __name__ == '__main__':
main()
Hi @kinarr,
Could you please look into this issue? Duplicate timestamps are being reported when using the live stream and video modes in the Face Landmarker Python Task API.
Thank you!!
(only on the live stream api mode, as far as I know)
@kuaashish I believe it has to do with the C++ API as the python API merely relays the timestamp values from the C++ layer. It could be that there’s something is inconsistent with the C++ API.
Hi @kinarr,
Yes, we see logs coming from the C++ side. Let me find the right contact for this issue, Thank you for your input.
The issue is also on Windows It is also not limited to face landmarker. Some timestamps are skipped or duplicated. The issue seems to be more reproducible if the concurrency is high. Here is a step by step way to reproduce the issue with more consistency
# Clone the mediapipe repo
git clone https://github.com/google-ai-edge/mediapipe.git --branch v0.10.22 --depth 1
# Download needed files
curl --create-dirs -L 'https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite' -o mediapipe/tasks/testdata/vision/face_detection_short_range.tflite
curl --create-dirs -L 'https://storage.googleapis.com/mediapipe-assets/portrait.jpg' -o mediapipe/tasks/testdata/vision/portrait.jpg
curl --create-dirs -L 'https://storage.googleapis.com/mediapipe-assets/portrait_expected_detection.pbtxt' -o mediapipe/tasks/testdata/vision/portrait_expected_detection.pbtxt
curl --create-dirs -L 'https://storage.googleapis.com/mediapipe-assets/portrait_rotated.jpg' -o mediapipe/tasks/testdata/vision/portrait_rotated.jpg
curl --create-dirs -L 'https://storage.googleapis.com/mediapipe-assets/portrait_rotated_expected_detection.pbtxt' -o mediapipe/tasks/testdata/vision/portrait_rotated_expected_detection.pbtxt
curl --create-dirs -L 'https://storage.googleapis.com/mediapipe-assets/cat.jpg' -o mediapipe/tasks/testdata/vision/cat.jpg
# Patch face_detector_test in order to increase concurrency and print the timestamps
echo "diff --git a/mediapipe/tasks/python/test/vision/face_detector_test.py b/mediapipe/tasks/python/test/vision/face_detector_test.py
index c9246c0b1..40b56a036 100644
--- a/mediapipe/tasks/python/test/vision/face_detector_test.py
+++ b/mediapipe/tasks/python/test/vision/face_detector_test.py
@@ -484,7 +484,7 @@ class FaceDetectorTest(parameterized.TestCase):
# Should never happen
raise ValueError('model_file_type is invalid.')
- observed_timestamp_ms = -1
+ self.observed_timestamp_ms = -1
def check_result(
result: FaceDetectorResult,
@@ -494,7 +494,8 @@ class FaceDetectorTest(parameterized.TestCase):
self._expect_face_detector_results_correct(
result, expected_detection_result
)
- self.assertLess(observed_timestamp_ms, timestamp_ms)
+ print(self.observed_timestamp_ms, timestamp_ms)
+ self.assertLess(self.observed_timestamp_ms, timestamp_ms)
self.observed_timestamp_ms = timestamp_ms
options = _FaceDetectorOptions(
@@ -511,7 +512,7 @@ class FaceDetectorTest(parameterized.TestCase):
)
with _FaceDetector.create_from_options(options) as detector:
- for timestamp in range(0, 300, 30):
+ for timestamp in range(0, 3000, 30):
# Set the image processing options.
image_processing_options = _ImageProcessingOptions(
rotation_degrees=rotation_degrees
" | bash -c "cd mediapipe && cat | git apply"
# Patch test_utils in order to use locally downloaded files
echo 'diff --git a/mediapipe/tasks/python/test/test_utils.py b/mediapipe/tasks/python/test/test_utils.py
index e790b9156..a80edb96a 100644
--- a/mediapipe/tasks/python/test/test_utils.py
+++ b/mediapipe/tasks/python/test/test_utils.py
@@ -34,20 +34,28 @@ _RGB_CHANNELS = 3
def test_srcdir():
"""Returns the path where to look for test data files."""
if "test_srcdir" in flags.FLAGS:
- return flags.FLAGS["test_srcdir"].value
+ return flags.FLAGS["test_srcdir"].value.split(";")
elif "TEST_SRCDIR" in os.environ:
- return os.environ["TEST_SRCDIR"]
+ return os.environ["TEST_SRCDIR"].split(";")
else:
raise RuntimeError("Missing TEST_SRCDIR environment.")
def get_test_data_path(file_or_dirname_path: str) -> str:
"""Returns full test data path."""
- for directory, subdirs, files in os.walk(test_srcdir()):
- for f in subdirs + files:
- path = os.path.join(directory, f)
- if path.endswith(file_or_dirname_path):
- return path
+ if os.path.exists(file_or_dirname_path):
+ return os.path.abspath(file_or_dirname_path)
+
+ for dirname in test_srcdir():
+ for (directory, subdirs, files) in os.walk(dirname):
+ for f in subdirs + files:
+ path = os.path.join(directory, f)
+
+ if os.path.exists(os.path.join(path, file_or_dirname_path)):
+ return os.path.abspath(os.path.join(path, file_or_dirname_path))
+
+ if os.path.normpath(path).endswith(os.path.normpath(file_or_dirname_path)):
+ return path
raise ValueError(
"No %s in test directory: %s." % (file_or_dirname_path, test_srcdir())
)
' | bash -c "cd mediapipe && cat | git apply"
# Create a python virtual environment to avoid conflict with any prior python installation
python -m venv .venv
# source .venv/Scripts/activate
source .venv/bin/activate
python -m pip install --upgrade pip
# Install needed python modules
pip install absl-py mediapipe
# Copy test_utils.py to the installed mediapipe module in order to use locally downloaded files
# cp -f mediapipe/mediapipe/tasks/python/test/test_utils.py .venv/Lib/site-packages/mediapipe/tasks/python/test/test_utils.py
cp -f mediapipe/mediapipe/tasks/python/test/test_utils.py .venv/lib/*/site-packages/mediapipe/tasks/python/test/test_utils.py
# Run face_detector_test.py until it breaks.
# On my machine, the break usually occurs within the first 2 times
for i in {1..100}; do
python mediapipe/mediapipe/tasks/python/test/vision/face_detector_test.py -- -k test_detect_async_calls || break
done
At some point, there will be an error similar to
[ RUN ] FaceDetectorTest.test_detect_async_calls4 (<ModelFileType.FILE_NAME: 2>, 'cat.jpg', 0, DetectionResult(detections=[]))
W0000 00:00:1747752606.554592 29752 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
-1 0
0 90
90 120
120 120
Fatal Python error: Aborted
Current thread 0x0000a944 (most recent call first):
<no Python frame>
Thread 0x000073d8 (most recent call first):
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\mediapipe\tasks\python\vision\core\base_vision_task_api.py", line 209 in close
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\mediapipe\tasks\python\vision\core\base_vision_task_api.py", line 226 in __exit__
File "D:\Incognito\mediapipe-issue\mediapipe\mediapipe\tasks\python\test\vision\face_detector_test.py", line 516 in test_detect_async_calls
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\testing\parameterized.py", line 323 in bound_param_test
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\case.py", line 579 in _callTestMethod
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\case.py", line 623 in run
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\case.py", line 678 in __call__
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\suite.py", line 122 in run
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\suite.py", line 84 in __call__
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\suite.py", line 122 in run
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\suite.py", line 84 in __call__
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\runner.py", line 217 in run
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\testing\_pretty_print_reporter.py", line 84 in run
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\main.py", line 274 in runTests
File "C:\Users\Incognito\AppData\Local\Programs\Python\Python311\Lib\unittest\main.py", line 102 in __init__
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\testing\absltest.py", line 2793 in _run_and_get_tests_result
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\testing\absltest.py", line 2829 in run_tests
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\testing\absltest.py", line 2373 in main_function
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\app.py", line 261 in _run_main
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\app.py", line 316 in run
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\testing\absltest.py", line 2375 in _run_in_app
File "D:\Incognito\mediapipe-issue\.venv\Lib\site-packages\absl\testing\absltest.py", line 2269 in main
File "D:\Incognito\mediapipe-issue\mediapipe\mediapipe\tasks\python\test\vision\face_detector_test.py", line 526 in <module>
Extension modules: google._upb._message, numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, PIL._imaging, kiwisolver._cext, _cffi_backend (total: 17)
[ RUN ] FaceDetectorTest.test_detect_async_calls5 (<ModelFileType.FILE_CONTENT: 1>, 'cat.jpg', 0, DetectionResult(detections=[]))
I0000 00:00:1747768214.215493 82820 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1747768214.250266 82951 gl_context.cc:369] GL version: 3.1 (OpenGL ES 3.1 Mesa 23.2.1-1ubuntu3.1~22.04.3), renderer: D3D12 (AMD Radeon(TM) Graphics)
W0000 00:00:1747768214.255293 82952 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
-1 0
0 240
240 240
terminate called after throwing an instance of 'pybind11::error_already_set'
what(): AssertionError: 240 not less than 240
At:
/usr/lib/python3.10/unittest/case.py(675): fail
/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/absltest.py(2022): fail
/usr/lib/python3.10/unittest/case.py(1232): assertLess
/io/mediapipe-issue/mediapipe/mediapipe/tasks/python/test/vision/face_detector_test.py(498): check_result
/io/mediapipe-issue/.venv/lib/python3.10/site-packages/mediapipe/tasks/python/vision/face_detector.py(146): packets_callback
Fatal Python error: Aborted
Current thread 0x00007fceb27fc640 (most recent call first):
<no Python frame>
Thread 0x00007fcf208f3000 (most recent call first):
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/mediapipe/tasks/python/vision/core/base_vision_task_api.py", line 209 in close
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/mediapipe/tasks/python/vision/core/base_vision_task_api.py", line 226 in __exit__
File "/io/mediapipe-issue/mediapipe/mediapipe/tasks/python/test/vision/face_detector_test.py", line 514 in test_detect_async_calls
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/parameterized.py", line 323 in bound_param_test
File "/usr/lib/python3.10/unittest/case.py", line 549 in _callTestMethod
File "/usr/lib/python3.10/unittest/case.py", line 591 in run
File "/usr/lib/python3.10/unittest/case.py", line 650 in __call__
File "/usr/lib/python3.10/unittest/suite.py", line 122 in run
File "/usr/lib/python3.10/unittest/suite.py", line 84 in __call__
File "/usr/lib/python3.10/unittest/suite.py", line 122 in run
File "/usr/lib/python3.10/unittest/suite.py", line 84 in __call__
File "/usr/lib/python3.10/unittest/runner.py", line 184 in run
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/_pretty_print_reporter.py", line 84 in run
File "/usr/lib/python3.10/unittest/main.py", line 271 in runTests
File "/usr/lib/python3.10/unittest/main.py", line 101 in __init__
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/absltest.py", line 2793 in _run_and_get_tests_result
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/absltest.py", line 2829 in run_tests
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/absltest.py", line 2373 in main_function
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/app.py", line 261 in _run_main
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/app.py", line 316 in run
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/absltest.py", line 2375 in _run_in_app
File "/io/mediapipe-issue/.venv/lib/python3.10/site-packages/absl/testing/absltest.py", line 2269 in main
File "/io/mediapipe-issue/mediapipe/mediapipe/tasks/python/test/vision/face_detector_test.py", line 524 in <module>
Extension modules: google._upb._message, numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, PIL._imaging, kiwisolver._cext, _cffi_backend (total: 17)
Aborted (core dumped)
If the loop range is change to 30000, the program hang with no cpu usage, as if it is in a deadlock.
@smbape I doubt there is any plan there to evolve the python API, the project focus has shifted long ago. Choose your steps wisely.