Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
notes 9.96 KiB
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