From 4aef96334587efcf0f5c6452721ca296a682fed7 Mon Sep 17 00:00:00 2001 From: hypox64 Date: Fri, 2 Aug 2019 22:09:29 +0800 Subject: [PATCH] Update a GUI version --- README.md | 35 +++++++++++++++++++++++------------ exe_GUI.png | Bin 0 -> 17638 bytes 2 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 exe_GUI.png diff --git a/README.md b/README.md index 9494759..9a5f43e 100755 --- a/README.md +++ b/README.md @@ -8,27 +8,38 @@ This porject based on ‘semantic segmentation’ and ‘Image-to-Image Translat The code do not include the part of training, I will finish it in my free time.
-## Prerequisites +## Run DeepMosaics +You can either run DeepMosaics via pre-built binary package or from source.
+ +### Pre-built binary package +For windows, we bulid a GUI version for easy test.
+![image](https://github.com/HypoX64/DeepMosaics/blob/master/exe_GUI.png)
+Download this version via [[Google Drive]](https://drive.google.com/open?id=1LTERcN33McoiztYEwBxMuRjjgxh4DEPs) [[百度云,提取码1x0a]](https://pan.baidu.com/s/10rN3U3zd5TmfGpO_PEShqQ)
+Attentions:
+1.Require Windows_x86_64, Windows10 is better.
+2.File path cannot contain spaces (" ").
+3.Run time depends on computer performance.
+4.If output video cannot be played, you can try it with [potplayer](https://daumpotplayer.com/download/).
+ +### Run from source +#### Prerequisites - Linux, Mac OS, Windows - Python 3.6+ - [ffmpeg 3.4](http://ffmpeg.org/) - [Pytorch 1.0+](https://pytorch.org/) [(Old version codes)](https://github.com/HypoX64/DeepMosaics/tree/Pytorch0.4) -- CPU or NVIDIA GPU + CUDA CuDNN - -## Getting Started -### Clone this repo: +- CPU or NVIDIA GPU + CUDA CuDNN
+#### Dependencies +This code depends on opencv-python, torchvision available via pip install. +#### Clone this repo: ```bash git clone https://github.com/HypoX64/DeepMosaics cd DeepMosaics ``` -### Get pre_trained models and test video +#### Get pre_trained models and test video You can download pre_trained models and test video and replace the files in the project.
-[[Google Drive]](https://drive.google.com/open?id=10nARsiZoZGcaKw40nQu9fJuRp1oeabPs) - [[百度云,提取码7thu]](https://pan.baidu.com/s/1IG4bdIiIC9PH9-oEyae5Sg) +[[Google Drive]](https://drive.google.com/open?id=10nARsiZoZGcaKw40nQu9fJuRp1oeabPs) [[百度云,提取码7thu]](https://pan.baidu.com/s/1IG4bdIiIC9PH9-oEyae5Sg) -### Dependencies -This code depends on opencv-python, available via pip install. -### Simple example +#### Simple example * Add Mosaic (output video will save in './result') ```bash python3 deepmosaic.py @@ -37,7 +48,7 @@ python3 deepmosaic.py ```bash python3 deepmosaic.py --mode clean --model_path ./pretrained_models/clean_hands_unet_128.pth --media_path ./result/hands_test_AddMosaic.mp4 ``` -### More parameters +#### More parameters If you want to test other image or video, please refer to this file. [[options.py]](https://github.com/HypoX64/DeepMosaics/blob/master/options.py)
diff --git a/exe_GUI.png b/exe_GUI.png new file mode 100644 index 0000000000000000000000000000000000000000..e9ffe2423665e63eb4db0e2e1e040c0dd3883508 GIT binary patch literal 17638 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