91 Commits

Author SHA1 Message Date
torzdf f761a312c1 Extract - bugfix: Skip non-loaded image 2019-01-22 11:32:45 +00:00
torzdf c369cff38f Detected face NoneType bugfix 2019-01-09 18:09:37 +00:00
torzdf a0a9fd8359 Fix converter skipping frames without faces 2019-01-06 17:37:35 +00:00
torzdf b176daaf5b Fix system verbosity 2019-01-06 13:40:57 +00:00
torzdf afd4fa789b Add ability to extract from and convert from a video file (#559)
* Add ability to extract from and convert from a video file

* Update cli helptext. Add filebrowser button for GUI input

* Add video support to Alignments Tool
2018-12-22 19:29:03 +00:00
torzdf 3a41cfdcbc Add Face Hashes to Alignments (#550)
* Convert main scripts to use face hashes

* Alignment tool: Use hashes, add logging, add face rename function

* More logging. Update Manual tool to work with hashing
2018-12-14 12:49:11 +00:00
torzdf 93ab46363b Increase detector timeout. Output timeout status 2018-12-09 11:50:42 +00:00
torzdf 7f53911453 Logging (#541)
* Convert prints to logger. Further logging improvements. Tidy  up

* Fix system verbosity. Allow SystemExit

* Fix reload extract bug

* Child Traceback handling

* Safer shutdown procedure

* Add shutdown event to queue manager

* landmarks_as_xy > property. GUI notes + linting. Aligner bugfix

* fix FaceFilter. Enable nFilter when no Filter is supplied

* Fix blurry face filter

* Continue on IO error. Better error handling

* Explicitly print stack trace tocrash log

* Windows Multiprocessing bugfix

* Add git info and conda version to crash log

* Windows/Anaconda mp bugfix

* Logging fixes for training
2018-12-04 13:31:49 +00:00
torzdf 3df1371070 Fix face filter 2018-11-25 17:58:08 +00:00
torzdf 4f4fb27410 extractor fixes 2018-11-21 17:58:41 +00:00
torzdf fb76438615 Remove DetectedFace object from plugins due to multiprocess error 2018-11-20 10:20:01 +00:00
torzdf 02935a9b42 multiprocessing race condition bugfix 2018-11-19 13:18:06 +00:00
torzdf 2783c27e00 Fix convert-adjust (#531)
* Add dimensions to alignments + refactor

* Add frame_dims + funcs to DetectFaces. Add alignments lib

* Convert Adjust working

* Refactor and tidy up
2018-11-07 20:21:22 +00:00
torzdf 30678e1379 Extraction single process bugfix 2018-11-04 11:02:06 +00:00
torzdf ff10868476 Increase FAN timeout. Fallback sort and manual align to Dlib for CPU 2018-10-28 16:57:51 +00:00
torzdf 7b2cf02390 Bugfixes 2018-10-27 23:52:09 +01:00
torzdf ca63242996 Extraction - Speed improvements (#522) (#523)
* Extraction - Speed improvements (#522)

* Initial Plugin restructure

* Detectors to plugins. Detector speed improvements

* Re-implement dlib aligner, remove models, FAN to TF. Parallel processing

* Update manual, update convert, implement parallel/serial switching

* linting + fix cuda check (setup.py). requirements update keras 2.2.4

* Add extract size option. Fix dlib hog init

* GUI: Increase tooltip width

* Update alignment tool to support new DetectedFace

* Add skip existing faces option

* Fix sort tool to new plugin structure

* remove old align plugin

* fix convert -skip faces bug

* Fix convert skipping no faces frames

* Convert - draw onto transparent layer

* Fix blur threshold bug

* fix skip_faces convert bug

* Fix training
2018-10-27 10:12:08 +01:00
Tim van den Essen 6d0d2f061f Add timelapse functionality (#512)
* add new cli options

* add timelapse script

* add batch size on image generation

* fix circular dependency

* add attribute check

* refactor to 3 parameters

* fix some typos

* do not shuffle the set

* default to models folder when no timelapse output supplied

* almost forgot this
2018-10-25 17:46:24 +01:00
torzdf b26cbf5e03 Alignments Tool - Manual (#503)
* Initial alignment tool implementation

* Add face processing. Fix helptext formatting for cli and gui

* Extract faces from alignments file

* Add draw landmarks

* fix analysis hours past 24 bug

* Remove tools flag. Enlarge GUI tooltips

* Add filename extension check for image folders

* Fix folder nonetype bug and linting

* Bugfix renaming of faces

* Import alignments from DeepFaceLab

* Remove frames requirement for dfl

* Alignments Tool: Add remove frames

* Alignments: Add remove frames (#492)

* Alignments Tool: Add remove frames

* Implement Frame display for manual extract

* Alignments refactor

* Further navigation improvements

* Further navigation improvements

* Alignment Tool: Refactor

* Move rotate_image_by_angle() to utils

* Further refactoring improvements

* Reduce key bindings. Add skip to has faces, Add resize frame binding

* More navigation options. Delete faces added. Save alignments added

* Add: Reload alignments. Add extra api calls. Better redraw handling.

* Manual Alignments - Alpha Build

* Rotate landmarks for rotated images

* Rebase to remove OriginalHiRes changes
2018-09-17 16:31:43 +01:00
torzdf 3c83a068ff Add option to change dlib-cnn buffer size 2018-09-06 11:16:55 +01:00
Tim van den Essen d976b46460 alignments.json save interval for extracting (#477)
* implement save interval
2018-08-21 10:27:36 +01:00
torzdf 1e70ad1ef8 Merge staging to Master (#470)
* DLib scaling amends (#461)

* Scaling area fix and rework of frames and bounding boxes

* Update DLib scaling and initialization

* Extract - Detector reinitialization bugfix

* Slight OriginaHightRes Model re-factoring (#464)

* Model re-factoring, might fix red screen of death on multi-gpu configurations

* Limited trainer support for various INPUT_SIZE

* Auto Extraction multiprocess bugfix

* Sort tool bugfixes and linting
2018-08-09 15:24:08 +01:00
torzdf e76ab16bfe Effmpeg preview, MTCNN Extractor. HiRes model fixes (#458)
* Add preview functionality to effmpeg.  (#435)

* Add preview functionality to effmpeg.

effmpeg tool:
Preview for actions that have a video output now available.
Preview does not work when muxing audio.

* Model json unicode fix1 (#443)

* fixed Windows 10 path error while loading weights

* - fixed TypeError: the JSON object must be str, not 'bytes' with OriginalHighRes Model

* MTCNN Extractor and Extraction refactor (#453)

* implement mtcnn extractor

* mtcnn refactor and vram management changes

* cli arguments update for mtcnn/dlib split

* Add mtcnn models to gitignore

* Change multiprocessing on extract

* GUI changes to handle nargs defaults

* Early exit bugfix (#455)

* Fix extract early termination bug

* Fix extract early exit bug

* Multi face detection bugfix (#456)

* Multi face extraction fix

* Original high res cleanup 1 (#457)

* slight model re-factoring
  - removed excess threading code
  - added random kernel initialization to dense layer

* Slight OriginalHighRes re-factoring an code cleanup
2018-07-03 10:42:58 +02:00
torzdf f90cd92ec3 fix image_shape bug 2018-06-25 17:10:48 +01:00
torzdf 88094a064a Update Original Hi-Res (#438)
* Required for Shaonlu mode (#416)

Added two modes - Original and Shaonlu.
The later requires this file to function.

* model update (#417)

New, functional Original 128 model

* OriginalHighRes 128 model update (#418)

Required for OriginalHighRes Model to function

* Fixed memory usage at 6GB cards. (#423)

- Switched default encoder to ORIGINAL
- Fixed memory consumption. Tested with geforce gtx 9800 ti with 6Gb; batch_size 8 no OOM or memory warnings now.

* added new model

* ndeed for HighRes Model_OriginalHighRes

* added OriginalHighRes model state save

* changed saving routine to ThreadPoolExecutor (faster with Python3)

* altered trainer (#425)

altered trainer to accommodate with model change

* Update Model.py (#424)

- Added saving state (currently only saved epoch number, to be extended in future)
- Changed saving to ThreadPoolExecutor

* Requirements version bump (#431)

This bumps the versions of:

    scandir
    h5py
    Keras
    opencv-python

to their latest vesions.

Virtual Environment will need to be setup again to make use of these.
2018-06-21 16:39:17 +02:00
torzdf be8e235eab Gui v3.0b (#436)
* GUI version 3 (#411)

GUI version 3.0a

* Required for Shaonlu mode (#416)

Added two modes - Original and Shaonlu.
The later requires this file to function.

* model update (#417)

New, functional Original 128 model

* OriginalHighRes 128 model update (#418)

Required for OriginalHighRes Model to function

* Add OriginalHighRes 128 update to gui branch (#421)

* Required for Shaonlu mode (#416)

Added two modes - Original and Shaonlu.
The later requires this file to function.

* model update (#417)

New, functional Original 128 model

* OriginalHighRes 128 model update (#418)

Required for OriginalHighRes Model to function

* Dev gui (#420)

* reduce singletons

* Fix tooltips and screen boundaries on popup

* Remove dpi fix. Fix context filebrowsers

* fix tools.py execution and context filebrowser bugs

* Bugfixes (#422)

* Bump matplotlib requirement. Fix polyfit. Fix TQDM on sort

* Fixed memory usage at 6GB cards. (#423)

- Switched default encoder to ORIGINAL
- Fixed memory consumption. Tested with geforce gtx 9800 ti with 6Gb; batch_size 8 no OOM or memory warnings now.

* Staging (#426)

* altered trainer (#425)

altered trainer to accommodate with model change

* Update Model.py (#424)

- Added saving state (currently only saved epoch number, to be extended in future)
- Changed saving to ThreadPoolExecutor

* Add DPI Scaling (#428)

* Add dpi scaling

* Hotfix for effmpeg. (#429)

effmpeg fixed so it works both in cli and gui.
Initial work done to add previewing feature to effmpeg (currently does nothing).
Some small spacing changes in other files to improve PEP8 conformity.

* PEP8 Linting (#430)

* pep8 linting

* Requirements version bump (#432)

* altered trainer (#425)

altered trainer to accommodate with model change

* Update Model.py (#424)

- Added saving state (currently only saved epoch number, to be extended in future)
- Changed saving to ThreadPoolExecutor

* Requirements version bump (#431)

This bumps the versions of:

    scandir
    h5py
    Keras
    opencv-python

to their latest vesions.

Virtual Environment will need to be setup again to make use of these.

* High DPI Fixes (#433)

* dpi scaling

* DPI Fixes

* Fix and improve context manager. (#434)

effmpeg tool:
Context manager for GUI fixed.

Context manager in general:
Functionality extended to allow configuring the context with both:
  command -> action
  command -> variable (cli argument) -> action

* Change epoch option to iterations

* Change epochs to iterations
2018-06-20 19:25:31 +02:00
Lev Velykoivanenko 298228dc3e Fix small frame ranges bug in scripts/convert.py and tools/effmpeg.py (#410)
* Fix small frame ranges bug in scripts/convert.py and tools/effmpeg.py

scripts/convert.py:
Fix bug where frame ranges would not work properly when frame numbers were appended to an mp4 file extension.
Improve PEP8 conformity.

tools/effmpeg.py:
Add '_' as separator between frame number and video file name to avoid future frame ranges bugs.
2018-06-01 11:38:37 +01:00
torzdf da9ef09760 Merge branch 'master' into staging 2018-05-28 11:09:47 +01:00
torzdf 049a4e5736 GUI - nargs argparse processing bugfix 2018-05-28 11:09:15 +01:00
torzdf 8d9de4c205 Merge branch 'master' into staging 2018-05-19 00:49:12 +01:00
andenixa 95f8362c73 Added OriginalHighRes model converter (#389)
* Adjusted converter to work with OriginalHighRes model vector dim

* fixed field name to args

* New OriginalHighRes with lighter Encoder and decoder with more clarity
2018-05-19 00:48:50 +01:00
Lev Velykoivanenko f8bf47ad43 Refactor lib/Serializer.py, and other improvements. (#394)
All:
Set correct python3 shebang.

lib/cli.py:
Fix some help documentation formatting and typos.
Set 'json' as the default value for '--serializer' argument.

lib/Serializer.py:
Refactor to properly handle PyYAML not being available.
Add docstring at top of the file.
Improve PEP8 conformity.

scripts/fsmedia.py:
Modify lib/Serializer.py method call to match new name.
Modify lib/Serializer.py method call to match not needing a default.

tools/sort.py:
Add new group by 'face-yaw' method.
Add docstring at top of the file.
Re-arrange argument order to make more sense.
Fix typos and line length issues in help documentation.
Change to use lib/Serializer.py to set the serializer and to write the log file.
Allow sort logging to use PyYAML.
2018-05-16 23:40:15 +01:00
Lev Velykoivanenko 80cde77a6d Adding new tool effmpeg ("easy"-ffmpeg) with gui support. Extend gui functionality to support filetypes. Re-opening PR. (#373)
* Pre push commit.
Add filetypes support to gui through new classes in lib/cli.py
Add various new functions to tools/effmpeg.py

* Finish developing basic effmpeg functionality.
Ready for public alpha test.

* Add ffmpy to requirements.
Fix gen-vid to allow specifying a new file in GUI.
Fix extract throwing an error when supplied with a valid directory.

Add two new gui user pop interactions: save (allows you to create new
files/directories) and nothing (disables the prompt button when it's not
needed).
Improve logic and argument processing in effmpeg.

* Fix post merge bugs.
Reformat tools.py to match the new style of faceswap.py
Fix some whitespace issues.

* Fix matplotlib.use() being called after pyplot was imported.

* Fix various effmpeg bugs and add ability do terminate nested subprocess
to GUI.

effmpeg changes:
Fix get-fps not printing to terminal.
Fix mux-audio not working.
Add verbosity option. If verbose is not specified than ffmpeg output is
reduced with the -hide_banner flag.

scripts/gui.py changes:
Add ability to terminate nested subprocesses, i.e. the following type of
process tree should now be terminated safely:
gui -> command -> command-subprocess
               -> command-subprocess -> command-sub-subprocess

* Add functionality to tools/effmpeg.py, fix some docstring and print statement issues in some files.

tools/effmpeg.py:
Transpose choices now display detailed name in GUI, while in cli they can
still be entered as a number or the full command name.
Add quiet option to effmpeg that only shows critical ffmpeg errors.
Improve user input handling.

lib/cli.py; scripts/convert.py; scripts/extract.py; scripts/train.py:
Fix some line length issues and typos in docstrings, help text and print statements.
Fix some whitespace issues.

lib/cli.py:
Add filetypes to '--alignments' argument.
Change argument action to DirFullPaths where appropriate.

* Bug fixes and improvements to tools/effmpeg.py

Fix bug where duration would not be used even when end time was not set.
Add option to specify output filetype for extraction.
Enchance gen-vid to be able to generate a video from images that were zero padded to any arbitrary number, and not just 5.
Enchance gen-vid to be able to use any of the image formats that a video can be extracted into.
Improve gen-vid output video quality.
Minor code quality improvements and ffmpeg argument formatting improvements.

* Remove dependency on psutil in scripts/gui.py and various small improvements.

lib/utils.py:
Add _image_extensions and _video_extensions as global variables to make them easily portable across all of faceswap.
Fix lack of new lines between function and class declarions to conform to PEP8.
Fix some typos and line length issues in doctsrings and comments.

scripts/convert.py:
Make tqdm print to stdout.

scripts/extract.py:
Make tqdm print to stdout.
Apply workaround for occasional TqdmSynchronisationWarning being thrown.
Fix some typos and line length issues in doctsrings and comments.

scripts/fsmedia.py:
Did TODO in scripts/fsmedia.py in Faces.load_extractor(): TODO Pass extractor_name as argument
Fix lack of new lines between function and class declarions to conform to PEP8.
Fix some typos and line length issues in doctsrings and comments.
Change 2 print statements to use format() for string formatting instead of the old '%'.

scripts/gui.py:
Refactor subprocess generation and termination to remove dependency on psutil.
Fix some typos and line length issues in comments.

tools/effmpeg.py
Refactor DataItem class to use new lib/utils.py global media file extensions.
Improve ffmpeg subprocess termination handling.
2018-05-09 18:47:17 +01:00
torzdf 958493a64a Fix Rotation Bug (#384) 2018-04-29 19:20:25 +01:00
coldstacks 901f9dcc1c Fixed processing of rotation angle list parameter (#380) 2018-04-28 22:51:20 +01:00
torzdf 9b58b35183 Cli/Scripts Refactor (#374)
* Refactor for PEP 8 and split process function

* Remove backwards compatibility for skip frames

* Split optional functions into own class. Make functions more modular

* train.py - Fix write image bug. Make more modular

* convert.py: Extract alignments from frames if they don't exist

* BugFix: SkipExisting broken since face name refactor

* train.py - Semi-fix for hang on reaching target iteration. Now quits on preview mode
Make tensorflow / system warning less verbose

* Final bugfixes

* Add 'all' back in for selectable detectors

* Final minor tweaks
2018-04-25 08:20:33 +01:00
torzdf c3a047559b cli/scripts Refactor (#367)
* Refactor for PEP 8 and split process function

* Remove backwards compatibility for skip frames

* Split optional functions into own class. Make functions more modular

* Conform scripts folder to PEP 8

* train.py - Fix write image bug. Make more modular

* extract.py - Make more modular, Put optional actions into own class

* cli.py - start PEP 8

* cli,py - Pep 8. Refactor and make modular. Bugfixes

* 1st round refactor. Completely untested and probably broken.

* convert.py: Extract alignments from frames if they don't exist

* BugFix: SkipExisting broken since face name refactor

* Extract.py tested

* Minor formatting

* convert.py + train.py amended not tested

* train.py - Semi-fix for hang on reaching target iteration. Now quits on preview mode
Make tensorflow / system warning less verbose

* 2nd pass refactor. Semi tested

bugfixes

* Remove obsolete code. imread/write to Utils

* rename inout.py to fsmedia.py

* Final bugfixes
2018-04-23 14:57:08 +01:00
Andy (Dong Young) Kim 30de9434b1 Update train.py 2018-04-17 10:26:39 +01:00
Andy (Dong Young) Kim a8eefc93cb change to flow with abrupt stop.
Change to control flow when training is abruptly stopped.
2018-04-17 10:26:39 +01:00
andykdy 8d95c6d007 Save Model at epoch target 2018-04-17 10:25:34 +01:00
torzdf ce2aa6a7b7 GUI v0.2.1b (#352)
* Code refactor

* Console Added

* Add graphing with matplotlib

* Add GUI preview support

* Improve import handling.

* Add GUI integration for tools.py (Launch tools.py with the gui command)

* Reformat to conform to PEP8.

* Add Tooltips, 

* Make panels user adjustable

* Fix convert.py Sharpen default value
2018-04-15 17:22:51 +01:00
fakinated 8ecf36c3cb Model backups before saving (#349)
* Sort images properly (to make the frame range parameter meaningfull)

* Add backup mechanism for model weights.

* Replace 'print' call by 'tqdm.write' call.
2018-04-15 12:11:07 +01:00
torzdf 1f9176362a Fix GUI check for Windows non-use of DISPLAY environment variable (#338) 2018-04-09 17:11:17 -07:00
torzdf a18d7ef6d1 GUI v0.1.0a (#336)
* Code clean up

* Code refactor

* bugfix: Find paths to icons when launched from outside faceswap dir

* Bugfix: Disable GUI if TkInter app not available

* BugFix: Disable GUI if $DISPLAY not detected

* Minor code ammends

* Code Refactor

* DISPLAY check fix
2018-04-08 12:33:50 -07:00
torzdf 2c11eb1649 Built in GUI [ALPHA] (#325)
* Alpha Build - Pre Testing

* Minor code amends

* Add in the actual script execution
2018-04-04 14:39:23 -07:00
torzdf f16ea566f0 Only import DLIB related modules when required and minor import relocations (#315)
* Move imports to top and add conditions to load modules requiring GPU

* Fix type

* Fix typo

* Import relocation and dlib import on demand

* refactor to remove extra code lines

* remove unnecessary sys import
2018-04-04 14:35:02 -07:00
coldstacks 44dfd9d6b0 Adds support for arbitrary image rotations (#309)
* Add support for user-specified rotation angle in extract

* Added rotation-angle-list option to enumerate a list of angles to rotate through

* Adjust rotation matrix translation coords to avoid cropping

* Merged rotation-angle and rotation-angle-list options into rotate_images option

* Backwards compatibility

* Updated check whether to run image rotator

* Switched rotation convention to use positive angle = clockwise rotation, for backwards compatibility
2018-03-27 18:38:23 +02:00
bryanlyon 6ff64ef1c3 Fixed error handling in train.py (#293)
Fixed the error handling in train.py so it doesn't swallow tracelogs.
2018-03-16 17:16:17 +01:00
Othniel Cundangan b8ade19b05 Align Eyes Horizontally After Umeyama + Blur Detection (#242)
* Align eyes after umeyama

* Remove comment

* Add cli option

* Update Extract_Crop.py

* Fix convert

* Add blur threshold

* Use mask in blur detection

* Improve blur detection

* Fix indents

* Update extract.py
2018-03-13 20:35:14 -04:00
JayantPythonLover eec8636b18 Output Sharpening Added (#285)
* Updated to support Output Sharpening arguments

Two new types of output sharpening methods have been added.

One that deals with a Box Blur method and the other with a Gaussian Blur method.

Box Blur method can be called using argument '-sh bsharpen' --- This method is not dynamic and can produce strong sharpening on your images. Sometimes it can yield great results and sometimes entirely the opposite.

Gaussian Blur method can be called using argument '-sh gsharpen' --- This method is dynamic and tries to adjust to your data set. As a result, while the sharpening effect might not be as strong as bsharpen, it is bound to produce a more natural looking sharpened image.

By default the parameter is set to none which will not run any sharpening on your output.

* Output Sharpening added

Two ways of sharpening your output have been added

-sh bsharpen
-sh gsharpen

* Update convert.py
2018-03-13 23:54:09 +01:00