InvokeAI/invokeai/backend/image_util/patchmatch.py
2023-03-02 13:28:17 -05:00

45 lines
1.3 KiB
Python

'''
This module defines a singleton object, "patchmatch" that
wraps the actual patchmatch object. It respects the global
"try_patchmatch" attribute, so that patchmatch loading can
be suppressed or deferred
'''
from ldm.invoke.globals import Globals
import numpy as np
class PatchMatch:
'''
Thin class wrapper around the patchmatch function.
'''
patch_match = None
tried_load:bool = False
def __init__(self):
super().__init__()
@classmethod
def _load_patch_match(self):
if self.tried_load:
return
if Globals.try_patchmatch:
from patchmatch import patch_match as pm
if pm.patchmatch_available:
print('>> Patchmatch initialized')
else:
print('>> Patchmatch not loaded (nonfatal)')
self.patch_match = pm
else:
print('>> Patchmatch loading disabled')
self.tried_load = True
@classmethod
def patchmatch_available(self)->bool:
self._load_patch_match()
return self.patch_match and self.patch_match.patchmatch_available
@classmethod
def inpaint(self,*args,**kwargs)->np.ndarray:
if self.patchmatch_available():
return self.patch_match.inpaint(*args,**kwargs)