preprocess frames with adaptive thresholding
code optimisation: use dict instead of pd.DFs. also use more preallocated np buffers
gitignore to ignore profiling results