v## SW from tboy old workstation https://ctrax.sourceforge.net/ walking fly tracker HOBOWare Lite temperature logger StreamPix5 realtime digital video recording to PC memory or hdd batch processor https://www.norpix.com/products/streampix/streampix.php Matlab (.m files) any2ufmf fviewflytrax avidemux yEd - graph editor - .graphml files batchprocessor process sequence files to avi ssdcleanup ############################### ## Emilio ############################### > !! if beetle runs in circle it is in "escape mode" which doesnt represent "natural" behaviour (explore, quick move from a to b) -> think about different setup. Bigger Arena? > fps can be low. Try 3! Depends on movement speed and estimated error calc error by comparing distance of 40fps with 3fps > duration of video can be short. eg 10 minutes. -> no need for many fridges ############################### ## Software A - Frame grab ############################## # setup Vimba > see Vimba_installation_under_Linux.pdf > download and unpack Vimba SDK > tar -xzf ./Vimba.tgz > sudo ./VimbaGigETL/Install.sh ## SETUP GT1920C: > connect lap and cam directly via ethernet > set MTU to 8228 (jumbo frames/packets) > set fixed IP for eth-adapter first and then cam (use Vimbaviewer -> force IP) eth 169.254.100.1 cam 169.254.x.x # on restart will pick random IP... mac 000f310338D3 000f310338D4 sub 255.255.0.0 (gat 0.0.0.0 local / none) -> ip address of each adapter needs to be on a unique subnet -> for multiple cams calc bandwith and use switch # What bandwidth do i have? Do i need multiple ports? bandwith = fps * pixel format(bpp) * resolution (* ncams) StreamBytesPerSecond = 17 * 3 * 1936 * 1216 * 1 = 8 456 448 ~= 8,4 MBps < 125MBps 1. Determine max_speed with highest fps! 2. Take max_speed and reduce fps so it still fits 2*max_speed -> subsample same video ? 3. calc mean_err through comparing 1. and 2. -> add to 2. as it will be lower. !! exposure and fps: on 10fps exposure can't be more then 100ms! !! exposure and fps: on 17fps exposure can't be more then 59ms! Best practice: set gain to lowest possible val and increase exposure as needed !! if you use more than one cam on one interface, the available bandwidth has to be shared between interfaces. ############################### # bandwidth calculations for Alvium G1 240C MAX BANDWITH for Gigabit ethernet port ~= 125 Mbps max res: 1936x1216 max fps: 49 pixelformat: RGB8 > different options. eg 10bit/12bit RGB/MONO. 1936 * 1216 * 49 * 1 ~= 115,3 MBps >> MONO8 @ maxFPS 1936 * 1216 * 17 * 1 ~= 40,0 MBps >> MONO8 @ 17FPS @ 1 Min -> 2.4GB @ 30 Mins -> 144GB with 60 recordings: 8.6TB 1936 * 1216 * 17 * 3 ~= 120,1 MBps >> RGB8 @ 17FPS @ 1 Min -> 7.2GB @ 30 Mins -> 216.1GB with 60 recordings: 13 TB 1936 * 1216 * 10 * 3 ~= 70,6 MBps @ 1 Min -> 4.2 GB @ 30 Mins -> 127.1 GB with 60 recordings: 7.6TB Storage: ws1: 2TB: 2*1TB (7200RPM) 8Gb DDR3 RAM Intel Xeon 3.6Ghz (4 cores) ws2: 4TB: 3 (7200RPM = 6GB/s!) + 1 8GB DDR3 RAM default bandwidth:115MBps Save "reasonable" settings in XML. If dark, set ExposureTimeAbs Q: how to set fps to 3? ##################################### ## Background Substraction - BGS #################################### #define bgs_register(x) static BGS_Register<x> register_##x(quote(x)) ## >> glue together macro? quote() adds "" bgs_register(Tapter) >> static BGS_Register<Tapter> register_Tapter("Tapter") /usr/include/opencv4/opencv2/opencv.hpp PCA? > difference virtual(); virtual(){ /*empty*/ } virtual() = 0; #pure virtual > also difference > virtual dtor(): if pointer to base-class deletes object > pure virtual dtor(): need to also define function body, cuz dtor is special function whis is not overriden > interface class (needs pure virtual??) > abc - abstract base class. can't be instantiated anymore > abc <> interface? // IplImage is oldskool mat and not supported anymore.. > use smartpointer like so: auto videoAnalysis = std::make_unique<VideoAnalysis>(); videoCapture = std::make_unique<VideoCapture>(); frameProcessor = std::make_shared<FrameProcessor>(); ########### libarchive stuff archive_read_xxx() archive_write_xxx() struct archive_entry huge workaround for corrupted files clock random command arg parser ??? #if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION == 3 && CV_SUBMINOR_VERSION >= 9) IplImage _frame = cvIplImage(img_input); frame = &_frame; #else frame = new IplImage(img_input); #endif #smartpointer?? #elif CV_MAJOR_VERSION >= 3 cv::Ptr<cv::BackgroundSubtractorMOG2> mog; #endif > What Tboy do... why did he do it? > forked branch bgslib_qtgui_2.0.0 > Tapter > adapter for model > was probably copied from LBAdaptiveSOM.cpp --> which is disabled in openCV4 Which Background Subtraction Algo to use?? median, mean, framedifference + simple, fast, - not robust if light/bg changes - slow changes ? > adaptive bg? fuzzy? mixture NAMES Kernel? LBSP? Multilayer? Sigma-Delta? Vibe, T2F ,dp ,lb ,vumeter? choquet, sugeno, zivkovic, pratimediod, LOBSTER Test/Use most common >> Ground Truth Frame Difference WeightedMovingMean / Variance LBAdaptiveSOM MOG2 (Mixture Of Gaussian) MixtureOfGaussianV2.h KNN (K Nearest Neighbour) > fast for small fg obj > TRY! FuzzySugenoIntegral.h LSBP - Local Binary Similarity Patterns - (2013) LSBP-based GSoC ? SuBSENSE: improved spatiotemporal LBSP + color features (2014) Combineable with ROI Canny Edge Detection > bg modeling to update BG (eg moving trees) > pixel with threshold > optic flow (camera is also moving. ) > vectoral estimation of own movement features edge canny edge detector + calc contour > https://en.wikipedia.org/wiki/Canny_edge_detector roi crop color RGB - not so robust by itself (sensitive to illumination, shadows, oscillations ...) YUV YCrCb - brightness, chroma, color texture robust to illumination and shadow eg Local Binary Pattern (LBP) https://github.com/murari023/awesome-background-subtraction (2021 new stuff!) https://learnopencv.com/background-subtraction-with-opencv-and-bgs-libraries/ http://docs.opencv.org/2.4/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html https://hackthedeveloper.com/background-subtraction-opencv-python/ #mog2 + knn in python https://docs.opencv.org/4.3.0/d4/dd5/classcv_1_1bgsegm_1_1BackgroundSubtractorGSOC.html#details #GSOC LSBP ALGO from openCV bgsegm.hpp https://openaccess.thecvf.com/content_cvpr_workshops_2014/W12/papers/St-Charles_Flexible_Background_Subtraction_2014_CVPR_paper.pdf https://www.scitepress.org/Papers/2018/66296/66296.pdf #vehicle tracking latvia. 2018, BackgroundSubtractorMOG, BackgroundSubtractorMOG2 (zivkovic) https://www-sop.inria.fr/members/Francois.Bremond/Postscript/AnhTuanAVSS14.pdf 2014 https://arxiv.org/pdf/1803.07985.pdf # visual animal tracking (2018) https://arxiv.org/pdf/1507.06821.pdf # Multimodal Deep Learning for Robust RGB-D Object Recognition (2015) https://towardsdatascience.com/background-removal-with-deep-learning-c4f2104b3157?gi=2ef3a5272e5d (2017 Background removal with deep learning) https://opencv.org/courses/ #xpensive ai course https://www.fast.ai/ #free ai course Build with Python or C++? ################## # computervision # ################## background subtraction (bgs) segmentation Semantic Segmentation (ai) detection (feature, object) classification (category recognition) Challenges: Occlusion, (Sensor-)Noise, changing external conditions( lighting, Shadows, fog, reflection ) > pre-training if lack of data > corrupt data to guarantee robust learning ###### # AI # ###### Convolutional Neural Networks (CNNs) https://www.researchgate.net/publication/337401161_Fundamental_Concepts_of_Convolutional_Neural_Network (2020 37p) > Kernel > filter? > preprocessing > Training > Parameter init > regularization > optimize RGB-D - RGB + depth >> eg Kinect-Sensors KNN - k-nearest neighbors algorithm Monte Carlo tree search algorithm (alphaGo...) RGB-D descriptor that relies on a K-Means HMP - hierarchical matching pursuit ( hierarchical sparse-coding method; learn features from multiple channel input) encoding depth information into three channels (HHA encoding) feature hierachy cascade of Random Forest classifiers that are fused in a hierarchical manner ?? #Random Forest metrics: recall - how many relevant items are retrieved? precision - how many retrieved items are relevant? > https://en.wikipedia.org/wiki/Recall_(information_retrieval) ? automatically learn a fusion strategy for the recognition task – in contrast to simply training a linear classifier on top of features extracted from both modalities MISRE - Multiple Input Structures with Robust Estimator gradient-based learning > MNIST supervised image classification MNIST - large db of hand-written digits (used for ML and ImagePRocessing) > also see classifiers: https://en.wikipedia.org/wiki/MNIST_database#Classifiers multimodal learning the parameters of all layers were adapted using a fixed learning rate schedule At test time the task of the CNN is to assign the correct class label to a previously unseen object instance. Tasks: Classification, clustering, regression, Summarization, Categorization, Natural language processing, ################################## # STAT ################################## Regression Hadamard Product Bernoulli Distribution Discrete Uniform Distribution ################################## # CMAKE ################################## sublime: install package CMAKE (syntax hilight) apt install libarchive-dev python3-pybind11 ################################## init(img_input, img_output, img_bgmodel); #if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION == 3 && CV_SUBMINOR_VERSION >= 9) IplImage _frame = cvIplImage(img_input); frame = &_frame; #else frame = new IplImage(img_input); #endif ## hardware tower old (opt/later) setup tower1 (defunct again!) as cheap testing machine! > get NIC working > give name connect inet --> as terminal to connect to server --> later: use for DMX lighting