VIRGO Architecture

A single Video Recognition Gateway (VIRGO) installation consists of the following components:

This diagram shows how those components fit together:

virgod:

virgofeedd:

virgoupdaterd:

virgo:

VIRGO File System Layout

VIRGO ships as a bundle which supports multiple versions of the VIRGO daemon. The VIRGO bundle directory contains a "versions" directory which in turn contains one sub-directory per installed VIRGO version. The name of a version sub-directory is the semantic version number of the VIRGO installation. The "versions" directory also contains a symlink named "current". This symlink points to the version sub-directory which is currently active.

The version sub-directory stores all necessary executable, library, and data files for the VIRGO version.

VIRGO bundle layout:

virgo/
   versions/
      1.0.0/
         virgo
         virgod
         virgofeedd
         virgoupdaterd
         lib/
            <shared libraries>
         model/
            <tensor flow model files>
         virgo-factory.config
      current -> ./1.0.0
   virgo -> ./versions/current/virgo

VIRGO Feeds

A single virgod instance manages a set of feeds. Each feed represents a video stream from a camera, a file, or some other video source. Each feed is associated with a set of configuration information which is stored persistently by VIRGO. The configuration information for the feeds can be managed through the VIRGO command line tool or through the video feeds window of the Desktop Client or the Web Console.

Each feed has a name which is unique among the set of feeds of a single virgod instance. These names are used as a simple and convenient way to refer to a feed and its configuration. Each feed is managed by a separate virgofeedd instance which is started and monitored by virgod. Virgod will automatically restart a virgofeedd instance if it dies for some unexpected reason.

A feed may be enabled or disabled. Only enabled feeds are associated with a virgofeedd instance. The enabled state of a feed may be changed through the VIRGO command line tool by issuing a feed start or a feed stop command. A feed may also be enabled or disabled in the video feeds windows by changing the enabled setting. This allows the system to reclaim resources like memory and network bandwidth if a feed is temporarily not needed. Feeds which are no longer needed at all should be removed altogether.

A feed has an input which connects the feed to a video stream. The two types of input currently supported are "stream" and "file". A stream input is specified by a URL which may point to a publicly accessible RTSP or HTTP video stream. Each video frame from the input is first sent through a video post-processing pipeline before it is fed into the object detector and recognizer sub-systems:

First a lens correction algorithm is applied to an incoming video frame. This step removes distortions that may be introduced by the optical system of a camera. After that the image will be rotated to compensate for any undesired rotation that may have been introduced by the physical orientation of the camera. Finally the image may be mirrored to ensure that a camera that is facing a user will produce an image that aligns with what a user expects to see.

See Also