videopath = '../Video/素材/大威天龙!最全法海纯素材.mp4' music_path = './music/黑人抬棺.mp3' Hfreq = 20 LfreqMix = 0.1 OriMix = 0.1 EnergyAlpha = 0.3 STEP = ['generate_video'] #'preprocess','matchtest','generate_video' or 'full' FPS = 24 CorrectFreq = False CorrectEnergy = True ShowPeak = True SamplingRate = 44100 IntervalTime = 0.07 util.clean_tempfiles(tmp_init=True) ''' ---------------------------------Video Preprocess--------------------------------- ''' fps, endtime, height, width = ffmpeg.get_video_infos(videopath) print(fps, endtime, height, width) ffmpeg.video2voice(videopath, './tmp/video_tmp.wav', samplingrate=44100) _, audio = sound.load('./tmp/video_tmp.wav', ch=0) energy = dsp.energy(audio, 4410, 441, 4410) indexs = arrop.findpeak(energy, interval=int(IntervalTime * 100)) reverse_indexs = arrop.findpeak(energy, interval=int(IntervalTime * 100 * 0.5), reverse=True)
def main(): if opt.mode == 'add': net = loadmodel.unet(opt) path = opt.media_path if util.is_img(path): print('Add Mosaic:', path) img = impro.imread(path) mask = runmodel.get_ROI_position(img, net, opt)[0] img = mosaic.addmosaic(img, mask, opt) cv2.imwrite(os.path.join(opt.result_dir, os.path.basename(path)), img) elif util.is_video(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: imagepath = os.path.join('./tmp/video2image', imagepath) print('Find ROI location:', imagepath) img = impro.imread(imagepath) mask, x, y, area = runmodel.get_ROI_position(img, net, opt) positions.append([x, y, area]) cv2.imwrite( os.path.join('./tmp/ROI_mask', os.path.basename(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_path = os.path.join('./tmp/ROI_mask', imagepaths[mask_index[i]]) mask = impro.imread(mask_path) img = impro.imread( os.path.join('./tmp/video2image', imagepaths[i])) img = mosaic.addmosaic(img, mask, opt) cv2.imwrite( os.path.join('./tmp/addmosaic_image', os.path.basename(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')) elif opt.mode == 'clean': netG = loadmodel.pix2pix(opt) net_mosaic_pos = loadmodel.unet_clean(opt) path = opt.media_path if util.is_img(path): print('Clean Mosaic:', path) img_origin = impro.imread(path) x, y, size = runmodel.get_mosaic_position(img_origin, net_mosaic_pos, opt) 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(opt.result_dir, os.path.basename(path)), img_result) elif util.is_video(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: imagepath = os.path.join('./tmp/video2image', imagepath) img_origin = impro.imread(imagepath) x, y, size = runmodel.get_mosaic_position( img_origin, net_mosaic_pos, opt) 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): imagepath = os.path.join('./tmp/video2image', imagepath) x, y, size = positions[i][0], positions[i][1], positions[i][2] img_origin = impro.imread(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', os.path.basename(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')) util.clean_tempfiles(tmp_init=False)
filepaths = util.Traversal(opt.input_dir) for path in filepaths: if util.is_img(path): print('Clean Mosaic:',path) img_origin = cv2.imread(path) x,y,size = get_mosaic_position(img_origin) 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,use_gpu = opt.use_gpu) img_result = replace_mosaic(img_origin,img_fake,x,y,size) cv2.imwrite(os.path.join(opt.result_dir,os.path.basename(path)),img_result) elif util.is_video(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() for imagepath in imagepaths: imagepath=os.path.join('./tmp/video2image',imagepath) img_origin = cv2.imread(imagepath) x,y,size = get_mosaic_position(img_origin) positions.append([x,y,size]) print('Find Positions:',imagepath) positions =np.array(positions) for i in range(3):positions[:,i] =signal.medfilt(positions[:,i],opt.medfilt_num)
img_origin = impro.imread(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', os.path.basename(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')) util.clean_tempfiles(tmp_init=False) if __name__ == '__main__': try: main() except Exception as e: print('Error:', e) input('Please press any key to exit.\n') util.clean_tempfiles(tmp_init=False) exit(0)