Jump to content

Contributions:WebcamLogger

From BCI2000 Wiki

Synopsis

An extension that records video from one or more webcams to an mp4 file, and stores frame numbers as (event-type) state variables.

Location

http://www.bci2000.org/svn/trunk/src/contrib/Extensions/WebcamLogger

Versioning

Authors

  • Adam Wilson (adam.wilson@uc.edu)
  • Alexander Belsten (belsten@neurotechcenter.org)
  • Juergen Mellinger (mellinger@neurotechcenter.org)

Version History

07/06/2011 - Full commit with support for MSVC and MinGW.

07/13/2011 - Bugfixes

11/28/2018 - Updated openCV library to v2.4.3 for x86/x64 Windows and added functionality for recording from multiple cameras

3/16/2021 - Updated openCV library to v4.5.1 for x86/x64 Windows.

2/2/2022 - Rewrite WebcamLogger to use a helper app that records camera data to a file and allows previewing

2/28/2023 - Add support for Webcam URLs.

Source Code Revisions

  • Initial development: --
  • Tested under: 7227
  • Known to compile under: 7227
  • Broken since: 5828 for MinGW

Known Issues

None.

Functional Description

For many experiments, visual information about how a subject is behaving during an experiment is desired. This extension acquires video from most webcams, and writes to an MP4 video file. It also records the current frame number as a state variable, so that the video can be synchronized with brain data at sample resolution (max. 1ms). Other options include the ability to overlay the date and time directly on the video (useful for long-term monitoring), and time decimation (i.e., save every Nth frame).

PROTIP: This module can also be used to perform screen capture with the proper virtual screencast webcam driver. Dubious website, but this product works well: http://www.pcwinsoft.com/screencamera/

Integration into BCI2000

Compile the extension into your source module by enabling contributed extensions in your CMake configuration. In your root build folder, run Configure.sh.cmd in order to bring up the CMake GUI; there, enable EXTENSIONS_WEBCAMLOGGER.

Once the extension is built into the source module, enable it by starting the source module with the --LogWebcam=1 command line argument.

Usage

Webcams should be installed and configured per the device instructions. The Webcam logger uses the Windows Media Foundation (WMF) library for display and saving. Desired resolution may be chosen per webcam, and will be matched agains available resolutions.

Camera options are found in the Source tab of the Configuration window.

Parameters

The Webcam logger is configured in the Source tab within the WebcamLogger section. The configurable parameters are:

LogWebcam

Enables/Disables logging of Webcam states.

CameraNumber

Used to select one camera to record from on systems with multiple cameras. Use value 0 for the default camera.

RecordAll

Enables the recording of cameras from StartIndex to EndIndex. Note that, unlike other indices in BCI2000, camera indices are 0-based rather than 1-based.

StartIndex

Index to start searching for cameras at.

EndIndex

Index to stop searching for cameras at.

Decimation

The decimation factor for saving and viewing video; the logger saves/displays every Nth frame.

DateTimeLocation

The location of the date/time overlay in saved video (0: none, 1: UpperRight, 2: UpperLeft, 3: LowerRight, 4: LowerLeft).

DisplayStream

Display the video stream from each connected camera. Display stream is identical to what is being recorded in the .mp4 file.

WebcamFormat

For each camera index, you may specify a video width, height, and fps. These are matched against the formats provided by the camera, and the closest one is chosen.

WebcamURL

In the first column of the WebcamURL matrix parameter, you may specify a camera index, and a corresponding URL in the second column. If a URL is given for a certain index, video data will be acquired from the URL rather than a webcam with the specified index attached to the machine.

When reading video data from an URL, only streaming formats supported by the Microsoft Media Foundation library are supported. Currently, this includes the MPEG4 codec but not h.264.

Event Variables

WebcamFrame<0-n>

The frame number of the video recorded on camera with index i. i must be less than or equal to n due to the nature of event declarations. The default value of n is 3, allowing for the recording of up to 4 cameras. To record from more cameras, change the NUM_OF_WEBCAM_EVENTS macro in WebcamLogger.cpp to the number of cameras you want to record from and recompile. Event values can be used to synchronize the video with the recorded neural data. It is a 32-bit value, allowing 4294967295 frames before overflowing. If the webcam can capture at 30 frames/sec, this allows more than four years of video before it will go back to frame 0. In other words, this should not be an issue for most users.

See also

User Reference:Logging Input, Contributions:Extensions, Programming Reference:Events