Esempio n. 1
0
def process_item(row):
    '''Face Counting needs to be integrated here'''
    try:
        logger.info('Processing: <{0}> <{1}> <{2}> <{3}> <{4}>'.format(row['RASP_NAME'],
                                                                 row['START_TIME'],
                                                                 row['PROCESSED'],
                                                                 row['S3_BUCKET'],
                                                                 row['S3_KEY']))
        # Download File from S3
        ret_status, local_file = misc.download_from_s3(row['S3_BUCKET'], row['S3_KEY'], OUTPUT_DIR)
        if ret_status:
            logger.info('[{0}][{1}] Video File: {2}'.format(row['RASP_NAME'],row['START_TIME'],local_file))
            #time.sleep(10)

            # Run Face Count
            report = fd.process(local_file)
            pprint.pprint(report)

            # Update Fields in DB
            update_record(row, report)

            #Delete the file
            os.remove(local_file)
        else:
            logger.info('[{0}][{1}] FAILED Downloading File: {2}/{3}'.format(row['RASP_NAME'],row['START_TIME'],row['S3_BUCKET'],row['S3_KEY']))
    except Exception as e:
        logger.error(e)
        logger.info('[{0}][{1}] FAILED Processing Video: {2}/{3}'.format(row['RASP_NAME'],row['START_TIME'],row['S3_BUCKET'],row['S3_KEY']))
        #Delete the file
        os.remove(local_file)
Esempio n. 2
0
def process_item(row):
    '''Face Counting needs to be integrated here'''
    try:
        logger.info('Processing: <{0}> <{1}> <{2}> <{3}> <{4}>'.format(
            row['RASP_NAME'], row['START_TIME'], row['PROCESSED'],
            row['S3_BUCKET'], row['S3_KEY']))
        # Download File from S3
        ret_status, local_file = misc.download_from_s3(row['S3_BUCKET'],
                                                       row['S3_KEY'],
                                                       OUTPUT_DIR)
        if ret_status:
            logger.info('[{0}][{1}] Video File: {2}'.format(
                row['RASP_NAME'], row['START_TIME'], local_file))
            #time.sleep(10)

            # Run Face Count
            report = fd.process(local_file)
            pprint.pprint(report)

            # Update Fields in DB
            update_record(row, report)

            #Delete the file
            os.remove(local_file)
        else:
            logger.info('[{0}][{1}] FAILED Downloading File: {2}/{3}'.format(
                row['RASP_NAME'], row['START_TIME'], row['S3_BUCKET'],
                row['S3_KEY']))
    except Exception as e:
        logger.error(e)
        logger.info('[{0}][{1}] FAILED Processing Video: {2}/{3}'.format(
            row['RASP_NAME'], row['START_TIME'], row['S3_BUCKET'],
            row['S3_KEY']))
        #Delete the file
        os.remove(local_file)
Esempio n. 3
0
    def queryDB(self):
        # run through each of the cameras
        for rasp in self.rasp_names:
            print "processing " + rasp
            ret = self.sc.query_2(RASP_NAME__eq=rasp)

            # only process videos that have not been looked at AND have
            # non-zero face count
            for item in ret:
                print "processing " + item['S3_KEY'][7:]
                if ('FACE_COMPLETE' not in item or item['FACE_COMPLETE'] != 1) and item['FACE_COUNT'] > 0:

                    # download video to local directory
                    ret_status, local_file = misc.download_from_s3(item['S3_BUCKET'], item['S3_KEY'], OUTPUT_DIR)
                    if ret_status:

                        # run facial recognition
                        faces = self.process(local_file)
                        os.remove(local_file)

                        # if there are matches, write back to dynamo
                        if faces:
                            item['FACES'] = ','.join(faces)
                            item['FACE_COMPLETE'] = 1
                            print item['FACES'], item['FACE_COMPLETE']
                            item.save()
Esempio n. 4
0
def process_item(row):
    try:
        logger.info('Processing: <{0}> <{1}> <{2}> <{3}> <{4}>'.format(
            row['RASP_NAME'], row['START_TIME'], row['PROCESSED'],
            row['S3_BUCKET'], row['S3_KEY']))
        # Download File from S3
        ret_status, local_file = misc.download_from_s3(row['S3_BUCKET'],
                                                       row['S3_KEY'],
                                                       OUTPUT_DIR)
        if ret_status:
            local_file_basename = os.path.basename(local_file)
            logger.info('[{0}]'.format(local_file_basename))

            local_dir = local_file + ".D"

            # Create a dir
            os.makedirs(local_dir)

            # Dump the frames
            cap = cv2.VideoCapture(local_file)
            cnt = 0
            while cap.isOpened():
                ret, frame = cap.read()
                if not ret:
                    break
                if cnt % 5 == 0:
                    image_file = '{0}/frame_{1}.png'.format(local_dir, cnt)
                    cv2.imwrite(image_file, frame)
                    logger.info('[{0}] Image File Written: {1}'.format(
                        local_file_basename, image_file))
                cnt += 1

            output_file = local_dir + '/tf.class.out'

            # Run Image Classification
            #for f in glob.glob(local_dir + '/*'):
            s = set()
            for x in xrange(0, 100, 5):
                f = '{0}/frame_{1}.png'.format(local_dir, x)
                logger.info('[{0}] Image Classification: {1}'.format(
                    local_file_basename, f))
                frame_id = os.path.basename(f).split(".")[0].split("_")[1]
                rc = subprocess.call(['./util/tf_classify.sh', f, output_file])
                with open(output_file, 'r') as f:
                    for l in f.readlines():
                        t = l.split(":")
                        cat = t[0].strip().split()[0]
                        prob = t[1].strip()
                        # Append as example: person(0.825)
                        s.add(cat)
                        break  # Just first line (Dominant Cat)
                print s

            nn_categories = ",".join(s)
            logger.info('[{0}] NN Dominant CATs: {1}'.format(
                local_file_basename, nn_categories))

            # Update Fields in DB
            update_record(row, nn_categories)

            #Delete the file/folder
            os.remove(local_file)
            shutil.rmtree(local_dir)
            #print '### Sleeping for 100 secs ###'
            #time.sleep(100)
        else:
            logger.info('[{0}][{1}] FAILED Downloading File: {2}/{3}'.format(
                row['RASP_NAME'], row['START_TIME'], row['S3_BUCKET'],
                row['S3_KEY']))
    except Exception as e:
        logger.error(e)
        logger.info('[{0}][{1}] FAILED Classifying Video: {2}/{3}'.format(
            row['RASP_NAME'], row['START_TIME'], row['S3_BUCKET'],
            row['S3_KEY']))
        #Delete the file
        os.remove(local_file)
        sys.exit(1)
def process_item(row):
    try:
        logger.info(
            "Processing: <{0}> <{1}> <{2}> <{3}> <{4}>".format(
                row["RASP_NAME"], row["START_TIME"], row["PROCESSED"], row["S3_BUCKET"], row["S3_KEY"]
            )
        )
        # Download File from S3
        ret_status, local_file = misc.download_from_s3(row["S3_BUCKET"], row["S3_KEY"], OUTPUT_DIR)
        if ret_status:
            local_file_basename = os.path.basename(local_file)
            logger.info("[{0}]".format(local_file_basename))

            local_dir = local_file + ".D"

            # Create a dir
            os.makedirs(local_dir)

            # Dump the frames
            cap = cv2.VideoCapture(local_file)
            cnt = 0
            while cap.isOpened():
                ret, frame = cap.read()
                if not ret:
                    break
                if cnt % 5 == 0:
                    image_file = "{0}/frame_{1}.png".format(local_dir, cnt)
                    cv2.imwrite(image_file, frame)
                    logger.info("[{0}] Image File Written: {1}".format(local_file_basename, image_file))
                cnt += 1

            output_file = local_dir + "/tf.class.out"

            # Run Image Classification
            # for f in glob.glob(local_dir + '/*'):
            s = set()
            for x in xrange(0, 100, 5):
                f = "{0}/frame_{1}.png".format(local_dir, x)
                logger.info("[{0}] Image Classification: {1}".format(local_file_basename, f))
                frame_id = os.path.basename(f).split(".")[0].split("_")[1]
                rc = subprocess.call(["./util/tf_classify.sh", f, output_file])
                with open(output_file, "r") as f:
                    for l in f.readlines():
                        t = l.split(":")
                        cat = t[0].strip().split()[0]
                        prob = t[1].strip()
                        # Append as example: person(0.825)
                        s.add(cat)
                        break  # Just first line (Dominant Cat)
                print s

            nn_categories = ",".join(s)
            logger.info("[{0}] NN Dominant CATs: {1}".format(local_file_basename, nn_categories))

            # Update Fields in DB
            update_record(row, nn_categories)

            # Delete the file/folder
            os.remove(local_file)
            shutil.rmtree(local_dir)
            # print '### Sleeping for 100 secs ###'
            # time.sleep(100)
        else:
            logger.info(
                "[{0}][{1}] FAILED Downloading File: {2}/{3}".format(
                    row["RASP_NAME"], row["START_TIME"], row["S3_BUCKET"], row["S3_KEY"]
                )
            )
    except Exception as e:
        logger.error(e)
        logger.info(
            "[{0}][{1}] FAILED Classifying Video: {2}/{3}".format(
                row["RASP_NAME"], row["START_TIME"], row["S3_BUCKET"], row["S3_KEY"]
            )
        )
        # Delete the file
        os.remove(local_file)
        sys.exit(1)