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)
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)
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()
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)