示例#1
0
class ProcImage():

    """
    Class to process images
    """


    #======= Process Image =======

    def proc_image(self):

        """
        Function to process image
        """

        #----- No Processing -----

        if self.procmode == 0:

            self.img_output = self.img_input


        #----- Flip Flop -----

        elif self.procmode == 1:

            self.img_output = cv2.flip(self.img_input, flipCode = 0)


        #----- Canny -----

        elif self.procmode == 2:

            self.img_output = cv2.Canny(self.img_input, 50, 150)


        #----- Face Recognition -----

        elif self.procmode == 3:


            #----- Copy Mat -----

            self.img_output = self.img_input.copy()


            #----- Get Face Object -----

            faces = self.cascade_face.detectMultiScale(
                self.img_output,
                scaleFactor=1.1,
                minNeighbors=3,
                flags=cv2.CASCADE_SCALE_IMAGE,
                minSize=(0,0)
            )

        #----- Depict Face region -----

        for x, y, w, h in faces:

            #----- Depict rectangle for each face -----

            cv2.rectangle(
                self.img_output,
                (x-self.face_margin_x, y-self.face_margin_y),
                (x+w+self.face_margin_x, y+h+self.face_margin_y),
                COLOR[2],
                self.rect_width
            )


    #======= Get Movies =======

    def get_movie(self):

        """
        Function to get video
        """

        #======= Start Message =======

        self.log.output_msg(1, 1, "ProcImage.get_movie() started")


        #======= Open Camera =======

        with picamera.PiCamera() as camera:


            #======= Open Window =======

            cv2.namedWindow('input')
            cv2.namedWindow('output')


            #======= Prepare Video Recorder =======

            video = cv2.VideoWriter(
                self.output_video,
                cv2.VideoWriter_fourcc('H','2','6','4'),
                30,
                camera.resolution,
                self.isColor
            )


            #======= Capture Movie =======

            with picamera.array.PiRGBArray(camera) as stream:

                #======= Prepare Stream =======

                time.sleep(0.1)

                #======= Get Frame Info =======

                camera.capture(stream, format='bgr')
                self.img_input = stream.array
                
                self.input_height, self.input_width, self.input_channels = self.img_input.shape

                #======= Read Stream =======

                for frame in camera.capture_continuous(
                    stream,
                    format='bgr',
                    use_video_port=True
                ):

                    #======= Read Image =======

                    self.img_input = frame.array


                    #======= Write File =======

                    video.write(self.img_input)


    #======= Get Image =======

    def get_image(self):

        """
        Function to capture image
        """

        #======= Start Message =======
        self.log.output_msg(1, 1, "ProcImage.get_image() started")


        #======= Open Camera =======

        with picamera.PiCamera() as camera:


            #======= Setup Camera Configuration =======

            #----- Setup Resolution -----

            if self.resolution == 3:
                camera.resolution = (1024, 768)

            elif self.resolution == 2:
                camera.resolution = (640, 480)

            else:
                camera.resolution = (320, 240)

            #----- Setup Framerate -----

            camera.framerate = self.framerate


            #----- Read HAAR files -----

            if self.procmode == 3:

                self.cascade_face = cv2.CascadeClassifier(self.cascade_face)

                if self.cascade_face.empty():
                    self.log.output_msg(1, 1, "Couldn\'t read HAAR file for face recognition")
                    sys.exit()


            #----- Test Image -----

            '''
            camera.start_preview()
            time.sleep(self.standby_time)
            camera.stop_preview()

            camera.capture(self.output_img)
            '''

            #======= Open WIndow =======

            cv2.namedWindow('input')
            cv2.namedWindow('output')

            #======= Capture Image =======

            with picamera.array.PiRGBArray(camera) as stream:

                #======= Read Stream =======

                camera.capture(stream, format='bgr')
                self.img_input = stream.array


                #======= Image Processing =======

                self.proc_image()


                #======= Display Image =======

                cv2.imwrite(self.output_img, self.img_output)

                cv2.imshow('input', self.img_input)
                cv2.imshow('output', self.img_output)

                cv2.waitKey(1000)

            cv2.destroyAllWindows()


        #======= End Message =======

        self.log.output_msg(1, 1, "ProcImage.get_image() ended")


    #======= Initialization =======

    def __init__(self):

        """
        Constructor
        """

        #======= Setup Log =======

        self.log = Log(os.environ.has_key('NB_LOG_LEVEL'))


        #======= Start Message =======

        self.log.output_msg(1, 1, "ProcImage.__init__() started")

        #======= Setup Resolution =======

        if os.environ.has_key('NB_RESOLUTION'):
            self.resolution = int(os.environ['NB_RESOLUTION'])
        else:
            self.resolution = 1

        self.log.output_msg(1, 1, "self.resolution = {0}".format(self.resolution))


        #======= Setup Framerate =======

        if os.environ.has_key('NB_FRAMERATE'):
            self.framerate = int(os.environ['NB_FRAMERATE'])
        else:
            self.framerate = 32

        self.log.output_msg(1, 1, "self.framerate = {0}".format(self.framerate))


        #======= Setup ProcMode =======

        if os.environ.has_key('NB_PROCMODE'):
            self.procmode = int(os.environ['NB_PROCMODE'])
        else:
            self.procmode = 32

        self.log.output_msg(1, 1, "self.procmode = {0}".format(self.procmode))



        #======= Setup Output Image =======

        if os.environ.has_key('NB_OUTPUT_IMG'):
            self.output_img = os.environ['NB_OUTPUT_IMG']
        else:
            self.output_img = 'output'

        self.log.output_msg(1, 1, "self.output_img = {0}".format(self.output_img))

        #======= Setup Standby Time =======

        if os.environ.has_key('NB_STANDBY_TIME'):
            self.standby_time = int(os.environ['NB_STANDBY_TIME'])
        else:
            self.standby_time = 1

        self.log.output_msg(1, 1, "self.standby_time = {0}".format(self.standby_time))


        #======= Setup Cascade File (Face) =======

        if os.environ.has_key('NB_CASCADE_FACE'):
            self.cascade_face = os.environ['NB_CASCADE_FACE']
        else:
            self.cascade_face = os.environ['OPENCV_HOME'] + "/data/haarcascades/haarcascade_frontalface_default.xml"

        self.log.output_msg(1, 1, "self.cascade_face = {0}".format(self.cascade_face))


        #======= Setup Face Margin X =======

        if os.environ.has_key('NB_FACE_MARGIN_X'):
            self.face_margin_x = int(os.environ['NB_FACE_MARGIN_X'])
        else:
            self.face_margin_x = 15

        self.log.output_msg(1, 1, "self.face_margin_x = {0}".format(self.face_margin_x))


        #======= Setup Face Margin Y =======

        if os.environ.has_key('NB_FACE_MARGIN_Y'):
            self.face_margin_y = int(os.environ['NB_FACE_MARGIN_Y'])
        else:
            self.face_margin_y = 30

        self.log.output_msg(1, 1, "self.face_margin_y = {0}".format(self.face_margin_y))


        #======= Setup Rectangle Width =======

        if os.environ.has_key('NB_RECT_WIDTH'):
            self.rect_width = int(os.environ['NB_RECT_WIDTH'])
        else:
            self.rect_width = 4

        self.log.output_msg(1, 1, "self.rect_width = {0}".format(self.rect_width))


        #======= End Message =======

        self.log.output_msg(1, 1, "ProcImage.__init__() ended")
示例#2
0
from common import Log
from proc_image import ProcImage


#======= Global Variable =======

log = Log(os.environ.has_key('NB_LOG_LEVEL'))


#======= Main Function =======

if __name__ == '__main__':


    #======= Start Message =======

    log.output_msg(1, 1, "main() started")
    log.output_msg(1, 1, "log.log_level = {0}".format(log.log_level))


    #======= Start Process =======

    app = ProcImage()
    app.get_image()


    #======= End Message =======

    log.output_msg(1, 1, "main() ended")

示例#3
0
class ClassifyImage():
    """
    Class to classify images
    """

    #======= Load Data =======

    def load_data(self):
        """
        Function to load datasets from cifer10
        """

        #======= Start Message =======

        self.log.output_msg(1, 1, "ClassifyImage.load_data() started")

        #======= Download Data =======

        (self.x_train, self.y_train), (self.x_test,
                                       self.y_test) = cifar10.load_data()

        #======= Convert training data into binary style =======

        self.y_train = np_utils.to_categorical(self.y_train, self.class_num)
        self.y_test = np_utils.to_categorical(self.y_test, self.class_num)

        self.log.output_msg(1, 1,
                            "x_train.shape = {0}".format(self.x_train.shape))
        self.log.output_msg(1, 1,
                            "y_train.shape = {0}".format(self.y_train.shape))
        self.log.output_msg(
            1, 1, "x_train.shape[0] = {0}".format(self.x_train.shape[0]))
        self.log.output_msg(
            1, 1, "y_train.shape[0] = {0}".format(self.y_train.shape[0]))
        self.log.output_msg(
            1, 1, "x_test.shape[0] = {0}".format(self.x_test.shape[0]))
        self.log.output_msg(
            1, 1, "y_test.shape[0] = {0}".format(self.y_test.shape[0]))

        #======= End Message =======

        self.log.output_msg(1, 1, "ClassifyImage.load_data() ended")

    #======= Preprocessing =======

    def preproc(self):

        #======= Start Message =======

        self.log.output_msg(1, 1, "ClassifyImage.preproc() started")

        self.log.output_msg(
            1, 1, "x_train[0][0][0] = {0}".format(self.x_train[0][0][0]))
        self.log.output_msg(
            1, 1, "x_test[0][0][0] = {0}".format(self.x_test[0][0][0]))

        self.x_train = self.x_train.astype('float32') / 255.0
        self.x_test = self.x_test.astype('float32') / 255.0

        self.log.output_msg(
            1, 1, "x_train[0][0][0] = {0}".format(self.x_train[0][0][0]))
        self.log.output_msg(
            1, 1, "x_test[0][0][0] = {0}".format(self.x_test[0][0][0]))

        #======= End Message =======

        self.log.output_msg(1, 1, "ClassifyImage.preproc() ended")

    #======= Classification =======

    def run(self):

        #======= Start Message =======

        self.log.output_msg(1, 1, "ClassifyImage.run() started")

        #======= Create Network Model =======

        model_module = importlib.import_module(self.model_path)
        input_shape = self.x_train.shape[1:]
        output_shape = self.class_num

        self.log.output_msg(1, 1, "input_shape = {0}".format(input_shape))
        self.log.output_msg(1, 1, "output_shape = {0}".format(output_shape))

        self.model = model_module.create_model(input_shape, output_shape)

        #======= Define Optimization Model =======

        sgd = SGD(lr=self.sgd_lr,
                  decay=self.sgd_decay,
                  momentum=self.sgd_momentum,
                  nesterov=True)

        self.model.compile(loss='categorical_crossentropy',
                           optimizer=sgd,
                           metrics=['accuracy'])

        self.model.summary()

        #======= Start Training / Validation =======

        if (self.data_aug):

            self.log.output_msg(1, 1, "Using Data Augmentation")

            #======= Data Augmentation =======

            dataaug = ImageDataGenerator(
                featurewise_center=self.data_aug_fcenter,
                samplewise_center=self.data_aug_scenter,
                featurewise_std_normalization=self.data_aug_fstdnorm,
                samplewise_std_normalization=self.data_aug_sstdnorm,
                zca_whitening=self.data_aug_zca,
                rotation_range=self.data_aug_rot_range,
                width_shift_range=self.data_aug_wshift_range,
                height_shift_range=self.data_aug_hshift_range,
                horizontal_flip=self.data_aug_hflip,
                vertical_flip=self.data_aug_vflip)

            #======= Calc Weight Matrix =======

            dataaug.fit(self.x_train)
            self.model.fit_generator(dataaug.flow(self.x_train,
                                                  self.y_train,
                                                  batch_size=self.batch_size),
                                     samples_per_epoch=self.x_train.shape[0],
                                     nb_epoch=self.epoch_num,
                                     validation_data=(self.x_test,
                                                      self.y_test))

        else:

            self.log.output_msg(1, 1, "Not using Data Augmentation")

            #======= Calc Weight Matrix =======

            self.model.fit(self.x_train,
                           self.y_train,
                           batch_size=self.batch_size,
                           nb_epoch=self.epoch_num,
                           validation_data=(self.x_test, self.y_test),
                           shuffle=True,
                           callbacks=[TensorBoard(log_dir=self.log_dir)])

        #======= Save Model =======

        self.model.save(self.model_path)

        #======= End Message =======

        self.log.output_msg(1, 1, "ClassifyImage.run() ended")

    #======= Initialization =======

    def __init__(self):
        """
        Constructor
        """

        #======= Setup Log =======

        self.log = Log(os.environ['SDL_LOG_LEVEL'])

        #======= Start Message =======

        self.log.output_msg(1, 1, "ClassifyImage.__init__() started")

        #======= Setup Log Directory =======

        if 'SDL_LOG_DIR' in os.environ:
            self.log_dir = os.environ['SDL_LOG_DIR']
        else:
            self.log_dir = './log'

        self.log.output_msg(1, 1, "self.log_dir = {0}".format(self.log_dir))

        #======= Setup Model Path =======

        if 'SDL_MODEL_PATH' in os.environ:
            self.model_path = os.environ['SDL_MODEL_PATH']
        else:
            self.model_path = "model.sample_cnn"

        self.log.output_msg(1, 1,
                            "self.model_path = {0}".format(self.model_path))

        #======= Setup Class Num =======

        if 'SDL_CLASS_NUM' in os.environ:
            self.class_num = int(os.environ['SDL_CLASS_NUM'])
        else:
            self.class_num = 10

        self.log.output_msg(1, 1,
                            "self.class_num = {0}".format(self.class_num))

        #======= Setup Row Num =======

        if 'SDL_ROW_NUM' in os.environ:
            self.row_num = int(os.environ['SDL_ROW_NUM'])
        else:
            self.row_num = 32

        self.log.output_msg(1, 1, "self.row_num = {0}".format(self.row_num))

        #======= Setup Col Num =======

        if 'SDL_COL_NUM' in os.environ:
            self.col_num = int(os.environ['SDL_COL_NUM'])
        else:
            self.col_num = 32

        self.log.output_msg(1, 1, "self.col_num = {0}".format(self.col_num))

        #======= Set Channel Num =======

        if 'SDL_CHANNEL_NUM' in os.environ:
            self.channel_num = int(os.environ['SDL_CHANNEL_NUM'])
        else:
            self.channel_num = 3

        self.log.output_msg(1, 1,
                            "self.channel_num = {0}".format(self.channel_num))

        #======= Setup Batch Size =======

        if 'SDL_BATCH_SIZE' in os.environ:
            self.batch_size = int(os.environ['SDL_BATCH_SIZE'])
        else:
            self.batch_size = 32

        self.log.output_msg(1, 1,
                            "self.batch_siize = {0}".format(self.batch_size))

        #======= Setup Epoch Number =======

        if 'SDL_EPOCH_NUM' in os.environ:
            self.epoch_num = int(os.environ['SDL_EPOCH_NUM'])
        else:
            self.epoch_num = 32

        self.log.output_msg(1, 1,
                            "self.epoch_num = {0}".format(self.epoch_num))

        #======= Setup SGD Learning Rate =======

        if 'SDL_SGD_LR' in os.environ:
            self.sgd_lr = float(os.environ['SDL_SGD_LR'])
        else:
            self.sgd_lr = 0.01

        self.log.output_msg(1, 1, "self.sgd_lr = {0}".format(self.sgd_lr))

        #======= Setup SGD Decay =======

        if 'SDL_SGD_Decay' in os.environ:
            self.sgd_decay = float(os.environ['SDL_SGD_DECAY'])
        else:
            self.sgd_decay = 1e-4

        self.log.output_msg(1, 1,
                            "self.sgd_decay = {0}".format(self.sgd_decay))

        #======= Setup SGD Momentum =======

        if 'SDL_SGD_MOMENTUM' in os.environ:
            self.sgd_momentum = float(os.environ['SDL_SGD_MOMENTUM'])
        else:
            self.sgd_momentum = 0.9

        self.log.output_msg(
            1, 1, "self.sgd_momentum = {0}".format(self.sgd_momentum))

        #======= Setup Data Augmentation =======

        if 'SDL_DATA_AUG' in os.environ:
            self.data_aug = bool(os.environ['SDL_DATA_AUG'])
        else:
            self.data_aug = True

        self.log.output_msg(1, 1, "self.data_aug = {0}".format(self.data_aug))

        #======= Setup Featurewise Center =======

        if 'SDL_DATA_AUG_FCENTER' in os.environ:
            self.data_aug_fcenter = bool(os.environ['SDL_DATA_AUG_FCENTER'])
        else:
            self.data_aug_fcenter = False

        self.log.output_msg(
            1, 1, "self.data_aug_fcenter = {0}".format(self.data_aug_fcenter))

        #======= Setup Samplewise Center =======

        if 'SDL_DATA_AUG_SCENTER' in os.environ:
            self.data_aug_scenter = bool(os.environ['SDL_DATA_AUG_SCENTER'])
        else:
            self.data_aug_scenter = False

        self.log.output_msg(
            1, 1, "self.data_aug_scenter = {0}".format(self.data_aug_scenter))

        #======= Setup Featurewise STD Normalization =======

        if 'SDL_DATA_AUG_FSTDNORM' in os.environ:
            self.data_aug_fstdnorm = bool(os.environ['SDL_DATA_AUG_FSTDNORM'])
        else:
            self.data_aug_fstdnorm = False

        self.log.output_msg(
            1, 1,
            "self.data_aug_fstdnorm = {0}".format(self.data_aug_fstdnorm))

        #======= Setup Samplewise STD Normalization =======

        if 'SDL_DATA_AUG_SSTDNORM' in os.environ:
            self.data_aug_sstdnorm = bool(os.environ['SDL_DATA_AUG_SSTDNORM'])
        else:
            self.data_aug_sstdnorm = False

        self.log.output_msg(
            1, 1,
            "self.data_aug_sstdnorm = {0}".format(self.data_aug_sstdnorm))

        #======= Setup ZCA Whitening =======

        if 'SDL_DATA_AUG_ZCA' in os.environ:
            self.data_aug_zca = bool(os.environ['SDL_DATA_AUG_ZCA'])
        else:
            self.data_aug_zca = False

        self.log.output_msg(
            1, 1, "self.data_aug_zca = {0}".format(self.data_aug_zca))

        #======= Setup Rot Range =======

        if 'SDL_DATA_AUG_ROT_RANGE' in os.environ:
            self.data_aug_rot_range = int(os.environ['SDL_DATA_AUG_ROT_RANGE'])
        else:
            self.data_aug_rot_range = 0

        self.log.output_msg(
            1, 1,
            "self.data_aug_rot_range = {0}".format(self.data_aug_rot_range))

        #======= Setup Width Shift Range =======

        if 'SDL_DATA_AUG_WSHIFT_RANGE' in os.environ:
            self.data_aug_wshift_range = int(
                os.environ['SDL_DATA_AUG_WSHIFT_RANGE'])
        else:
            self.data_aug_wshift_range = 0

        self.log.output_msg(
            1, 1, "self.data_aug_wshift_range = {0}".format(
                self.data_aug_wshift_range))

        #======= Setup Height Shift Range =======

        if 'SDL_DATA_AUG_HSHIFT_RANGE' in os.environ:
            self.data_aug_hshift_range = int(
                os.environ['SDL_DATA_AUG_HSHIFT_RANGE'])
        else:
            self.data_aug_hshift_range = 0

        self.log.output_msg(
            1, 1, "self.data_aug_hshift_range = {0}".format(
                self.data_aug_hshift_range))

        #======= Setup Horizontal Flip =======

        if 'SDL_DATA_AUG_HFLIP' in os.environ:
            self.data_aug_hflip = bool(os.environ['SDL_DATA_AUG_HFLIP'])
        else:
            self.data_aug_hflip = False

        self.log.output_msg(
            1, 1, "self.data_aug_hflip = {0}".format(self.data_aug_hflip))

        #======= Setup Vertical Flip =======

        if 'SDL_DATA_AUG_VFLIP' in os.environ:
            self.data_aug_vflip = bool(os.environ['SDL_DATA_AUG_VFLIP'])
        else:
            self.data_aug_vflip = False

        self.log.output_msg(
            1, 1, "self.data_aug_vflip = {0}".format(self.data_aug_vflip))

        #======= End Message =======

        self.log.output_msg(1, 1, "ClassifyImage.__init__() ended")
示例#4
0
#----- SDL -----
from common import Log
from classify_image import ClassifyImage


#======= Global Variable =======

log = Log(os.environ['SDL_LOG_LEVEL'])


#======= Main Function =======

if __name__ == '__main__':

	#======= Start Message =======

	log.output_msg(1, 1, "main() started")
	log.output_msg(1, 1, "log.log_level = {0}".format(log.log_level))

	#======= Start Process =======

	app = ClassifyImage()
	app.load_data()
	app.preproc()
	app.run()

	#======= End Message =======

	log.output_msg(1, 1, "main() ended")

示例#5
0
class ProcAlert():

    """
    Class to process alert
    """


    #======= alert_led =======

    def alert_led(self):

        """
        Function to light LED
        """

        #======= Start Message =======

        self.log.output_msg(1, 1, "ProcAlert.alert_led() started")


        #======= Switch LED =======

        if self.alert_flag == 1:

            GPIO.output(self.led_pos, GPIO.HIGH)

        else:
            
            GPIO.output(self.led_pos, GPIO.LOW)


        #======= End Message =======

        self.log.output_msg(1, 1, "ProcAlert.alert_led() ended")


    #======= Get Alert =======

    def get_alert(self):

        """
        Function to capture alert
        """

        #======= Start Message =======

        self.log.output_msg(1, 1, "ProcAlert.get_alert() started")


        #======= Get Alert =======

        response = requests.get( self.endpoint )
        self.alert_flag = response.json()[0]['alert_flag']

        self.log.output_msg(1, 1, "self.alert_flag = {0}".format(self.alert_flag))


        #======= End Message =======

        self.log.output_msg(1, 1, "ProcAlert.get_alert() ended")


    #======= Initialization =======

    def __init__(self):

        """
        Constructor
        """

        #======= Setup Log =======

        self.log = Log(os.environ.has_key('NB_LOG_LEVEL'))


        #======= Start Message =======

        self.log.output_msg(1, 1, "ProcAlert.__init__() started")


        #======= Setup ProcMode =======

        if os.environ.has_key('NB_PROCMODE'):
            self.procmode = int(os.environ['NB_PROCMODE'])
        else:
            self.procmode = 1

        self.log.output_msg(1, 1, "self.procmode = {0}".format(self.procmode))


        #======= Setup Waiting Time =======

        if os.environ.has_key('NB_WAITING_TIME'):
            self.waiting_time = int(os.environ['NB_WAITING_TIME'])
        else:
            self.waiting_time = 1

        self.log.output_msg(1, 1, "self.waiting_time = {0}".format(self.waiting_time))


        #======= Setup LED Position =======

        if os.environ.has_key('NB_LED_POS'):
            self.led_pos = int(os.environ['NB_LED_POS'])
        else:
            self.led_pos = 11

        self.log.output_msg(1, 1, "self.led_pos = {0}".format(self.led_pos))


        #======= Setup GPIO =======

        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(self.led_pos, GPIO.OUT, initial=GPIO.LOW)


        #======= Setup Endpoint =======

        if os.environ.has_key('NB_ENDPOINT'):
            self.endpoint = os.environ['NB_ENDPOINT']
        else:
            self.endpoint = "http://192.168.1.1:3000/alert/index.json"

        self.log.output_msg(1, 1, "self.endpoint = {0}".format(self.endpoint))


        #======= End Message =======

        self.log.output_msg(1, 1, "ProcImage.__init__() ended")