2SR user’s guide¶
This package contains a free-software implementation of IEEE Trans. on Biomedical engineering paper “A Novel Algorithm for Remote Photoplesthymograpy: Spatial Subspace Rotation”, Wang et al [wang-tbe-2015]:
@Article{wang-tbe-2015,
Author = {Wang, W., Stuijk, S. and de Haan, G},
Title = {A Novel Algorithm for Remote Photoplesthymograpy:
Spatial Subspace Rotation}
Journal = {IEEE Trans. On Biomedical Engineering},
Volume = {PP},
Number = {99},
Pages = {},
year = 2015
}
The algorithm to retrieve the pulse signal can be divided into several steps:
Extracting skin pixels from each frame
Compute eigenvalues and eigenvectors of the skin color correlation matrix
Update the pulse signal at each frame using eigenvalues and eigenvectors
Extract the pulse signal from video sequence¶
To extract the pulse signal, we first need the set of skin-colored pixels
from each frame image. Hence, a skin color filter (bob.ip.skincolorfilter
)
is applied to retrieve a mask containing skin pixels.
After having applied the skin color filter, the full algorithm is applied, as described in Algorithm 1 in the paper. To get the pulse signals for all video in a database, do the following:
$ ./bin/bob_rppg_ssr_pulse.py config.py -v
To see the full options, including parameters and protocols, type:
$ ./bin/bob_rppg_ssr_pulse.py --help
As you can see, the script takes a configuration file as argument. This configuration file is required to at least specify the database, but can also be used to provide various parameters. A full example of configuration is given below.
import os, sys
import bob.db.hci_tagging
import bob.db.hci_tagging.driver
if os.path.isdir(bob.db.hci_tagging.driver.DATABASE_LOCATION):
dbdir = bob.db.hci_tagging.driver.DATABASE_LOCATION
if dbdir == '':
print("You should provide a directory where the DB is located")
sys.exit()
database = bob.db.hci_tagging.Database()
protocol = 'cvpr14'
basedir = 'ssr-hci-cvpr14/'
# EXTRACT PULSE
pulsedir = basedir + 'pulse'
start = 306
end = 2136
threshold = 0.1
skininit = True
stride = 30
# FREQUENCY ANALYSIS
hrdir = basedir + 'hr'
nsegments = 8
nfft = 4096
# RESULTS
resultdir = basedir + 'results'
Note
The execution of this script is very slow - mainly due to the face detection. You can speed it up using the gridtk (especially, if you’re at Idiap). For example:
$ ./bin/jman sub -t 3490 -- ./bin/bob_rppg_ssr_pulse.py config.py
The number of jobs (i.e. 3490) is given by typing:
$ ./bin/bob_rppg_ssr_pulse.py config.py --gridcount