""" DeepLabCut Toolbox (deeplabcut.org) © A. & M. Mathis Labs Licensed under GNU Lesser General Public License v3.0 """ import sys import shutil import warnings from dlclive import benchmark_videos import urllib.request import argparse from pathlib import Path from dlclibrary.dlcmodelzoo.modelzoo_download import ( download_huggingface_model, ) def urllib_pbar(count, blockSize, totalSize): percent = int(count * blockSize * 100 / totalSize) outstr = f"{round(percent)}%" sys.stdout.write(outstr) sys.stdout.write("\b"*len(outstr)) sys.stdout.flush() def main(display:bool=None): parser = argparse.ArgumentParser( description="Test DLC-Live installation by downloading and evaluating a demo DLC project!") parser.add_argument('--nodisplay', action='store_false', help="Run the test without displaying tracking") args = parser.parse_args() if display is None: display = args.nodisplay if not display: print('Running without displaying video') # make temporary directory in $HOME print("\nCreating temporary directory...\n") tmp_dir = Path().home() / 'dlc-live-tmp' tmp_dir.mkdir(mode=0o775,exist_ok=True) video_file = str(tmp_dir / 'dog_clip.avi') model_dir = tmp_dir / 'DLC_Dog_resnet_50_iteration-0_shuffle-0' # download dog test video from github: print(f"Downloading Video to {video_file}") url_link = "https://github.com/DeepLabCut/DeepLabCut-live/blob/master/check_install/dog_clip.avi?raw=True" urllib.request.urlretrieve(url_link, video_file, reporthook=urllib_pbar) # download exported dog model from DeepLabCut Model Zoo if Path(model_dir / 'snapshot-75000.pb').exists(): print('Model already downloaded, using cached version') else: print("Downloading full_dog model from the DeepLabCut Model Zoo...") download_huggingface_model("full_dog", model_dir) # assert these things exist so we can give informative error messages assert Path(video_file).exists() assert Path(model_dir / 'snapshot-75000.pb').exists() # run benchmark videos print("\n Running inference...\n") # model_dir = "DLC_Dog_resnet_50_iteration-0_shuffle-0" # print(video_file) benchmark_videos(str(model_dir), video_file, display=display, resize=0.5, pcutoff=0.25) # deleting temporary files print("\n Deleting temporary files...\n") try: shutil.rmtree(tmp_dir) except PermissionError: warnings.warn(f'Could not delete temporary directory {str(tmp_dir)} due to a permissions error, but otherwise dlc-live seems to be working fine!') print("\nDone!\n") if __name__ == "__main__": display = args.nodisplay main(display=args.nodisplay)