Replace patches of images with other images.
- breaks up an image into patches
 - for each patch:
- look up the approximate nearest neighbour in a dataset of other images
 - replace the patch with the neighbour image
 
 
Uses nmslib for a fast nearest neighbour lookup.
All of the following assume a working Python 3 installation -- it's tested against Python 3.6 currently.
pip install patchies
Should do the trick. If it doesn't, please raise an issue here.
Clone the repo:
> git clone https://github.com/pfcm/patchies
From the root of the repo, just run the setup script.
python setup.py install
Or for development:
python setup.py develop
> patches --help
Usage: patchies [OPTIONS] COMMAND [ARGS]...
  Run on some things.
Options:
  --imdir TEXT                    directory to store images
  --cores INTEGER                 number of threads to use
  --dataset [cifar100|imagenet|celeba|cats]
                                  dataset to use
  --cats_path TEXT                path to downloaded cats data
  --patch_size INTEGER            size of patches to replace
  --help                          Show this message and exit.
Commands:
  offline  Run the thing on a single image
  online   Run the thing on a video.
There are two commands online and offline. They share a bunch of arguments
as above, most notably dataset which tells it what data to expect. For
all the datasets except cats they will be downloaded. The cats dataset comes
from Kaggle so you will have to create an account and download it, supplying
the path with cats_path.
patch_size defines the size of the patches that will be replaced. At this
stage only cats supports anything apart from 32.
imdir controls where the downloaded datasets are stored, it's usually fine to
leave it at the default. cores controls roughly the parallelism of the
nearest neighbour index construction and search. Again the default value should
be fine.
> patchies online --help
Usage: patchies online [OPTIONS]
 Run the thing on a video.
Options:
 --device TEXT  video device to use
 --help         Show this message and exit.
online is designed to run
once on a stream of video and pops up a window which compares the original
frames with the transformed ones. The amount of work to do is proportional
to the resolution of the video, so framerates for big videos are unlikely to
be particularly good.
To run in as close to real time as possible on a video:
> patchies [OPTIONS] online --device /path/to/video
OpenCV is used to open the videos, so any file format supported there is supported here. It can also be run on an attached webcam -- the easiest way to do this is to give it an integer (probably 0, also the default).
> patchies [OPTIONS] online --device 0
> patchies offline --help
Usage: patchies offline [OPTIONS] FILENAME
 Run the thing on a single image
Options:
 --outfile TEXT  output path to write
 --help          Show this message and exit.
Runs on a single image. In the future will probably run on image sequences
such as gifs, but currently this is not supported. outfile controls where
to write the output and the input is specified as a positional argument at
the end:
> patches --dataset celeba offline --outfile out.png /path/to/img.png
will replace all 32x32 patches of img.png (except for a potentially a few
pixels around the edges which will be thrown away so it all fits) with faces
of celebrities from the CelebA dataset.

