#!/usr/bin/env python

from __future__ import division

import cv2
import numpy as np

from FrameProcessor import FrameProcessor

'''
Still in progress....

Filter to remove the background and only keep the parts of the video that are
actively changing.
'''

class BackgroundRemove( FrameProcessor ):

    def __init__ ( self ):
        super( BackgroundRemove, self ).__init__()
        self._name = "Background Remove"

        self._speed = 0.01
        self._avg = None

        self._fgbg = cv2.BackgroundSubtractorMOG()

    def prop_AdaptSpeed_set( self, val ):
        self._speed = float( val / 100 )
        print( self._speed )

    def prop_AdaptSpeed_get( self):
        return int( self._speed * 100 )

    def type_AdaptSpeed( self ):
        return int

    #def prop_AlgorithmV_get( self ):
    #    pass

    def processFrame( self, frame_in ):
        # version 1 - moving average
        if self._avg == None:
            self._avg = np.float32( frame_in )
        cv2.accumulateWeighted( frame_in, self._avg, self._speed )
        background = cv2.convertScaleAbs( self._avg )
        active_area = cv2.absdiff( frame_in, background )

        #version 2 - MOG - Gausian Mixture-based Background/Foreground Segmentation Algorithm
        fgmask = self._fgbg.apply( frame_in ,learningRate = 0.01 )
        #active_area = cv2.bitwise_and( frame_in, frame_in, mask = fgmask )

        return fgmask