async def upload(file: UploadFile = File(...), dm=Form(...), lowmem=Form(...)): lowmem = True if lowmem == 'True' else False filename = file.filename content = await file.read() with open(filename, 'wb') as file: file.write(content) try: set_global_filedetail(filename=filename, dm=dm, lowmem=lowmem) try: os.remove(filename) except: print("Can't delete, file is in current directory...") return { 'filename': filedetail.filename, 'filetype': filedetail.filetype, 'verify': "Validated" } except Exception as e: return {'filename': "Error", 'filetype': "Error", 'verify': str(e)}
def anonymize_video(self, video: UploadFile = File(...), configuration: UploadFile = File(...)): result = None configuration_path = '../jsonFiles/user_configuration.json' with open(configuration_path, 'wb') as config: config.write(configuration.file.read()) try: users_models = get_user_models(configuration_path) except ApplicationError as e: raise e response = [] with open('video.mp4', 'wb') as v: try: v.write(video.file.read()) except Exception as e: raise InvalidInputData(e) initial_video = moviepy.editor.VideoFileClip("video.mp4") initial_video_audio = initial_video.audio cap = cv2.VideoCapture('video.mp4') fps = cap.get(cv2.CAP_PROP_FPS) i = 0 while cap.isOpened(): ret, frame = cap.read() if ret is True: im = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) img = Image.fromarray(im) bgr_image_0 = cv2.cvtColor(im, cv2.COLOR_RGB2BGR) _, im_png = cv2.imencode(".png", bgr_image_0) path = os.getcwd() + "/frames/" + str(i) + ".jpg" i = i + 1 errors = [] n = 0 for each in users_models: n = n + 1 result = None try: response, mask = getattr(helpers, "parse_" + each["model_type"] + "_response")(each, im_png, n, errors) except Exception as e: errors.append("The model type <" + each["model_type"] + "> in sensitive info <" + str( n) + "> is not supported.") if response: if not errors: for r in response: inference_type = r['type'] technique = r['technique'] box = r['boxes'] degree = r['degree'] label_id = r['label_id'] anonymization_name = inference_type + "_anonymization" anonymization_class = anonymization_name.title().replace("_", "") try: result = self.strategy_context.anonymize( getattr(__import__(anonymization_name), anonymization_class)(), technique=technique, image=img, response=box, degree=degree, label_id=label_id, mask=mask) except ApplicationError as e: raise e result.save(path) else: return errors else: img.save(path) else: break print("Processing ...") images = [img for img in os.listdir(os.getcwd() + "/frames") if img.endswith(".jpg")] sort = [] for frame in images: name = frame.split(".")[0] image_number = int(name) sort.append(image_number) sort = sorted(sort) frame = cv2.imread(os.path.join(os.getcwd() + "/frames", str(sort[0]) + ".jpg")) height, width, layers = frame.shape fourcc = cv2.VideoWriter_fourcc(*'MP4V') output_video_dir = "Anonymized_" + video.filename.split(".")[0] + "_" + datetime.now().strftime( "%d_%m_%y_%H_%M_%S") video = cv2.VideoWriter('anonymized_video/' + output_video_dir + '.mp4', fourcc, fps, (width, height)) for image in sort: video.write(cv2.imread(os.path.join(os.getcwd() + "/frames", str(image) + ".jpg"))) os.remove(os.getcwd() + "/frames/" + str(image) + ".jpg") cv2.destroyAllWindows() video.release() anonymized_video = moviepy.editor.VideoFileClip('anonymized_video/' + output_video_dir + '.mp4') anonymized_video.audio = initial_video_audio os.remove('anonymized_video/' + output_video_dir + '.mp4') anonymized_video.write_videofile('anonymized_video/' + output_video_dir + '.mp4') os.remove(os.getcwd() + "/video.mp4") return "Done"