core.py 7.0 KB
Newer Older
H
hypox64 已提交
1 2 3 4 5 6 7 8
import os
import numpy as np
import cv2

from models import runmodel,loadmodel
from util import mosaic,util,ffmpeg,filt,data
from util import image_processing as impro

H
hypox64 已提交
9
def addmosaic_img(opt,netS):
H
hypox64 已提交
10 11 12
    path = opt.media_path
    print('Add Mosaic:',path)
    img = impro.imread(path)
H
hypox64 已提交
13
    mask = runmodel.get_ROI_position(img,netS,opt)[0]
H
hypox64 已提交
14 15 16
    img = mosaic.addmosaic(img,mask,opt)
    cv2.imwrite(os.path.join(opt.result_dir,os.path.splitext(os.path.basename(path))[0]+'_add.jpg'),img)

H
hypox64 已提交
17
def addmosaic_video(opt,netS):
H
hypox64 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30
    path = opt.media_path
    util.clean_tempfiles()
    fps = ffmpeg.get_video_infos(path)[0]
    ffmpeg.video2voice(path,'./tmp/voice_tmp.mp3')
    ffmpeg.video2image(path,'./tmp/video2image/output_%05d.'+opt.tempimage_type)
    imagepaths=os.listdir('./tmp/video2image')
    imagepaths.sort()

    # get position
    positions = []
    for imagepath in imagepaths:
        print('Find ROI location:',imagepath)
        img = impro.imread(os.path.join('./tmp/video2image',imagepath))
H
hypox64 已提交
31
        mask,x,y,area = runmodel.get_ROI_position(img,netS,opt)
H
hypox64 已提交
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
        positions.append([x,y,area])      
        cv2.imwrite(os.path.join('./tmp/ROI_mask',imagepath),mask)
    print('Optimize ROI locations...')
    mask_index = filt.position_medfilt(np.array(positions), 7)

    # add mosaic
    print('Add mosaic to images...')
    for i in range(len(imagepaths)):
        mask = impro.imread(os.path.join('./tmp/ROI_mask',imagepaths[mask_index[i]]))
        img = impro.imread(os.path.join('./tmp/video2image',imagepaths[i]))
        img = mosaic.addmosaic(img, mask, opt)
        cv2.imwrite(os.path.join('./tmp/addmosaic_image',imagepaths[i]),img)

    ffmpeg.image2video( fps,
                        './tmp/addmosaic_image/output_%05d.'+opt.tempimage_type,
                        './tmp/voice_tmp.mp3',
                         os.path.join(opt.result_dir,os.path.splitext(os.path.basename(path))[0]+'_add.mp4'))

H
hypox64 已提交
50 51
def cleanmosaic_img(opt,netG,netM):

H
hypox64 已提交
52 53 54
    path = opt.media_path
    print('Clean Mosaic:',path)
    img_origin = impro.imread(path)
H
hypox64 已提交
55 56
    x,y,size,mask = runmodel.get_mosaic_position(img_origin,netM,opt)
    cv2.imwrite('./mask/'+os.path.basename(path), mask)
H
hypox64 已提交
57 58 59 60 61 62 63 64 65
    img_result = img_origin.copy()
    if size != 0 :
        img_mosaic = img_origin[y-size:y+size,x-size:x+size]
        img_fake = runmodel.run_pix2pix(img_mosaic,netG,opt)
        img_result = impro.replace_mosaic(img_origin,img_fake,x,y,size,opt.no_feather)
    else:
        print('Do not find mosaic')
    cv2.imwrite(os.path.join(opt.result_dir,os.path.splitext(os.path.basename(path))[0]+'_clean.jpg'),img_result)

H
hypox64 已提交
66
def cleanmosaic_video_byframe(opt,netG,netM):
H
hypox64 已提交
67 68 69 70 71 72 73 74 75 76 77 78
    path = opt.media_path
    util.clean_tempfiles()
    fps = ffmpeg.get_video_infos(path)[0]
    ffmpeg.video2voice(path,'./tmp/voice_tmp.mp3')
    ffmpeg.video2image(path,'./tmp/video2image/output_%05d.'+opt.tempimage_type)
    positions = []
    imagepaths=os.listdir('./tmp/video2image')
    imagepaths.sort()

    # get position
    for imagepath in imagepaths:
        img_origin = impro.imread(os.path.join('./tmp/video2image',imagepath))
H
hypox64 已提交
79
        x,y,size = runmodel.get_mosaic_position(img_origin,netM,opt)[:3]
H
hypox64 已提交
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
        positions.append([x,y,size])
        print('Find mosaic location:',imagepath)
    print('Optimize mosaic locations...')
    positions =np.array(positions)
    for i in range(3):positions[:,i] = filt.medfilt(positions[:,i],opt.medfilt_num)

    # clean mosaic
    for i,imagepath in enumerate(imagepaths,0):
        x,y,size = positions[i][0],positions[i][1],positions[i][2]
        img_origin = impro.imread(os.path.join('./tmp/video2image',imagepath))
        img_result = img_origin.copy()
        if size != 0:
            img_mosaic = img_origin[y-size:y+size,x-size:x+size]
            img_fake = runmodel.run_pix2pix(img_mosaic,netG,opt)
            img_result = impro.replace_mosaic(img_origin,img_fake,x,y,size,opt.no_feather)
        cv2.imwrite(os.path.join('./tmp/replace_mosaic',imagepath),img_result)
        print('Clean Mosaic:',imagepath)
    ffmpeg.image2video( fps,
                './tmp/replace_mosaic/output_%05d.'+opt.tempimage_type,
                './tmp/voice_tmp.mp3',
                 os.path.join(opt.result_dir,os.path.splitext(os.path.basename(path))[0]+'_clean.mp4'))  

H
hypox64 已提交
102
def cleanmosaic_video_fusion(opt,netG,netM):
H
hypox64 已提交
103 104
    path = opt.media_path
    N = 25
H
hypox64 已提交
105
    INPUT_SIZE = 128
H
hypox64 已提交
106 107 108 109 110 111 112 113 114 115 116 117 118

    util.clean_tempfiles()
    fps = ffmpeg.get_video_infos(path)[0]
    ffmpeg.video2voice(path,'./tmp/voice_tmp.mp3')
    ffmpeg.video2image(path,'./tmp/video2image/output_%05d.'+opt.tempimage_type)
    positions = []
    imagepaths=os.listdir('./tmp/video2image')
    imagepaths.sort()

    # get position
    for imagepath in imagepaths:
        img_origin = impro.imread(os.path.join('./tmp/video2image',imagepath))
        # x,y,size = runmodel.get_mosaic_position(img_origin,net_mosaic_pos,opt)[:3]
H
hypox64 已提交
119
        x,y,size,mask = runmodel.get_mosaic_position(img_origin,netM,opt)
H
hypox64 已提交
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
        cv2.imwrite(os.path.join('./tmp/mosaic_mask',imagepath), mask)
        positions.append([x,y,size])
        print('Find mosaic location:',imagepath)
    print('Optimize mosaic locations...')
    positions =np.array(positions)
    for i in range(3):positions[:,i] = filt.medfilt(positions[:,i],opt.medfilt_num)

    # clean mosaic
    print('Clean mosaic...')
    for i,imagepath in enumerate(imagepaths,0):
        print('Clean mosaic:',imagepath)
        x,y,size = positions[i][0],positions[i][1],positions[i][2]
        img_origin = impro.imread(os.path.join('./tmp/video2image',imagepath))
        mask = cv2.imread(os.path.join('./tmp/mosaic_mask',imagepath),0)
        
        if size==0:
            cv2.imwrite(os.path.join('./tmp/replace_mosaic',imagepath),img_origin)
        else:
H
hypox64 已提交
138
            mosaic_input = np.zeros((INPUT_SIZE,INPUT_SIZE,3*N+1), dtype='uint8')
H
hypox64 已提交
139 140 141
            for j in range(0,N):
                img = impro.imread(os.path.join('./tmp/video2image',imagepaths[np.clip(i+j-12,0,len(imagepaths)-1)]))
                img = img[y-size:y+size,x-size:x+size]
H
hypox64 已提交
142
                img = impro.resize(img,INPUT_SIZE)
H
hypox64 已提交
143 144 145
                mosaic_input[:,:,j*3:(j+1)*3] = img
            mask = impro.resize(mask,np.min(img_origin.shape[:2]))
            mask = mask[y-size:y+size,x-size:x+size]
H
hypox64 已提交
146
            mask = impro.resize(mask, INPUT_SIZE)
H
hypox64 已提交
147
            mosaic_input[:,:,-1] = mask
H
hypox64 已提交
148 149
            mosaic_input = data.im2tensor(mosaic_input,bgr2rgb=False,use_gpu=opt.use_gpu,use_transform = False,is0_1 = False)
            unmosaic_pred = netG(mosaic_input)
H
hypox64 已提交
150
            
H
hypox64 已提交
151 152 153
            #unmosaic_pred = (unmosaic_pred.cpu().detach().numpy()*255)[0]
            #img_fake = unmosaic_pred.transpose((1, 2, 0))
            img_fake = data.tensor2im(unmosaic_pred,rgb2bgr = False ,is0_1 = False)
H
hypox64 已提交
154 155 156 157 158 159 160
            img_result = impro.replace_mosaic(img_origin,img_fake,x,y,size,opt.no_feather)
            cv2.imwrite(os.path.join('./tmp/replace_mosaic',imagepath),img_result)

    ffmpeg.image2video( fps,
                './tmp/replace_mosaic/output_%05d.'+opt.tempimage_type,
                './tmp/voice_tmp.mp3',
                 os.path.join(opt.result_dir,os.path.splitext(os.path.basename(path))[0]+'_clean.mp4'))