import os import sys import time import datetime import json from PIL import Image import cv2 as cv import numpy as np from app.utils.im_utils import ensure_np, ensure_pil from flask import current_app as app import app.settings.app_cfg as cfg from app.server.tasks import celery from celery.utils.log import get_task_logger log = get_task_logger(__name__) import imutils @celery.task(bind=True) def blur_task(self, uuid_name, fn): """Process image and update during""" log.debug('process_image_task, uuid: {}'.format(uuid_name)) log.debug('fn: {}'.format(fn)) files = [] meta = { 'step': 0, 'total': 3, 'message': 'Starting', 'uuid': uuid_name, 'data': {}, } self.update_state(state='PROCESSING', meta=meta) im = Image.open(fn).convert('RGB') os.remove(fn) meta['step'] += 1 meta['message'] = 'Applying blur' self.update_state(state='PROCESSING', meta=meta) im_np = ensure_np(im) im_blur = cv.blur(im_np, (5,5), 1.0) im_blur_pil = ensure_pil(im_blur) fn = uuid_name + '_blur.jpg' fpath = os.path.join(cfg.DIR_SITE_USER_CONTENT, fn) im_blur_pil.save(fpath, 'JPEG', quality=80) log.debug('fpath: {}'.format(fpath)) print('fpath: {}'.format(fpath)) # files.append({ # 'title': 'Blurred image', # 'fn': render_uri + uuid_name + '_blur.jpg' # }) meta['step'] += 1 meta['message'] = 'Applying blur' meta['data']['blur_fn'] = { 'title': 'Blurred image', 'url': os.path.join('/user_content/', fn) } self.update_state(state='PROCESSING', meta=meta) time.sleep(3) if os.path.exists(fpath): os.remove(fpath) meta['step'] += 1 meta['message'] = 'Securely deleting user content' self.update_state(state='PROCESSING', meta=meta) time.sleep(2) log.debug('done!!') meta['step'] = meta['total'] meta['state'] = 'complete' return meta