use blur slider to add blur to the expanded mask
parent
f040850244
commit
9c048654f4
|
|
@ -67,13 +67,14 @@ async def maskExpansionHandler(request:Request):
|
||||||
# keywords = json.get('keywords','cute dogs')
|
# keywords = json.get('keywords','cute dogs')
|
||||||
base64_mask_image = json['mask']
|
base64_mask_image = json['mask']
|
||||||
mask_expansion = json['mask_expansion']
|
mask_expansion = json['mask_expansion']
|
||||||
|
blur = json['blur']
|
||||||
#convert base64 to img
|
#convert base64 to img
|
||||||
|
|
||||||
await img2imgapi.base64ToPng(base64_mask_image,"original_mask.png")#save a copy of the mask
|
await img2imgapi.base64ToPng(base64_mask_image,"original_mask.png")#save a copy of the mask
|
||||||
|
|
||||||
mask_image = img2imgapi.b64_2_img(base64_mask_image)
|
mask_image = img2imgapi.b64_2_img(base64_mask_image)
|
||||||
|
|
||||||
expanded_mask_img = img2imgapi.maskExpansion(mask_image,mask_expansion)
|
expanded_mask_img = img2imgapi.maskExpansion(mask_image,mask_expansion,blur)
|
||||||
base64_expanded_mask_image = img2imgapi.img_2_b64(expanded_mask_img)
|
base64_expanded_mask_image = img2imgapi.img_2_b64(expanded_mask_img)
|
||||||
await img2imgapi.base64ToPng(base64_expanded_mask_image,"expanded_mask.png")#save a copy of the mask
|
await img2imgapi.base64ToPng(base64_expanded_mask_image,"expanded_mask.png")#save a copy of the mask
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ def reserveBorderPixels(img,dilation_img):
|
||||||
width, height = img.size
|
width, height = img.size
|
||||||
dilation_pixels = dilation_img.load()
|
dilation_pixels = dilation_img.load()
|
||||||
all_pixels = []
|
all_pixels = []
|
||||||
depth = 20 # five pixel depth
|
depth = 1 # five pixel depth
|
||||||
for x in range(width):
|
for x in range(width):
|
||||||
for d in range(depth):
|
for d in range(depth):
|
||||||
dilation_pixels[x,d] = pixels[x, d]
|
dilation_pixels[x,d] = pixels[x, d]
|
||||||
|
|
@ -44,7 +44,7 @@ def reserveBorderPixels(img,dilation_img):
|
||||||
dilation_pixels[width-(d+1),y] = pixels[width-(d+1), y]
|
dilation_pixels[width-(d+1),y] = pixels[width-(d+1), y]
|
||||||
return dilation_img
|
return dilation_img
|
||||||
|
|
||||||
def maskExpansion(mask_img,mask_expansion):
|
def maskExpansion(mask_img,mask_expansion,blur =10):
|
||||||
#only if image exist then try to open it
|
#only if image exist then try to open it
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -53,8 +53,8 @@ def maskExpansion(mask_img,mask_expansion):
|
||||||
# if(payload['use_sharp_mask'] == False):# use blurry mask
|
# if(payload['use_sharp_mask'] == False):# use blurry mask
|
||||||
iteration = mask_expansion
|
iteration = mask_expansion
|
||||||
dilated_img = applyDilation(mask_img,iteration)
|
dilated_img = applyDilation(mask_img,iteration)
|
||||||
mask_with_border = reserveBorderPixels(mask_img,dilated_img)
|
blurred_image = dilated_img.filter(ImageFilter.GaussianBlur(radius = blur))
|
||||||
mask_with_border = mask_with_border.filter(ImageFilter.GaussianBlur(radius = 10))
|
mask_with_border = reserveBorderPixels(mask_img,blurred_image)
|
||||||
return mask_with_border
|
return mask_with_border
|
||||||
|
|
||||||
async def base64ToPng(base64_image,image_path):
|
async def base64ToPng(base64_image,image_path):
|
||||||
|
|
|
||||||
|
|
@ -323,13 +323,14 @@ async def maskExpansionHandler(request:Request):
|
||||||
# keywords = json.get('keywords','cute dogs')
|
# keywords = json.get('keywords','cute dogs')
|
||||||
base64_mask_image = json['mask']
|
base64_mask_image = json['mask']
|
||||||
mask_expansion = json['mask_expansion']
|
mask_expansion = json['mask_expansion']
|
||||||
|
blur = json['blur']
|
||||||
#convert base64 to img
|
#convert base64 to img
|
||||||
|
|
||||||
await img2imgapi.base64ToPng(base64_mask_image,"original_mask.png")#save a copy of the mask for debugging
|
await img2imgapi.base64ToPng(base64_mask_image,"original_mask.png")#save a copy of the mask for debugging
|
||||||
|
|
||||||
mask_image = img2imgapi.b64_2_img(base64_mask_image)
|
mask_image = img2imgapi.b64_2_img(base64_mask_image)
|
||||||
|
|
||||||
expanded_mask_img = img2imgapi.maskExpansion(mask_image,mask_expansion)
|
expanded_mask_img = img2imgapi.maskExpansion(mask_image,mask_expansion,blur)
|
||||||
base64_expanded_mask_image = img2imgapi.img_2_b64(expanded_mask_img)
|
base64_expanded_mask_image = img2imgapi.img_2_b64(expanded_mask_img)
|
||||||
await img2imgapi.base64ToPng(base64_expanded_mask_image,"expanded_mask.png")#save a copy of the mask of the expanded_mask for debugging
|
await img2imgapi.base64ToPng(base64_expanded_mask_image,"expanded_mask.png")#save a copy of the mask of the expanded_mask for debugging
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,38 @@ const modeToClassMap: ModeToClassMap = {
|
||||||
[GenerationModeEnum.Outpaint]: OutpaintMode,
|
[GenerationModeEnum.Outpaint]: OutpaintMode,
|
||||||
[GenerationModeEnum.Upscale]: UpscaleMode,
|
[GenerationModeEnum.Upscale]: UpscaleMode,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getExpandedMask(
|
||||||
|
mask: string,
|
||||||
|
expansion_value: number,
|
||||||
|
blur: number
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
let use_sharp_mask = false
|
||||||
|
|
||||||
|
let expanded_mask = mask
|
||||||
|
|
||||||
|
if (
|
||||||
|
use_sharp_mask === false &&
|
||||||
|
mask &&
|
||||||
|
expansion_value >= 0 &&
|
||||||
|
blur >= 0
|
||||||
|
) {
|
||||||
|
//only if mask is available and sharp_mask is off
|
||||||
|
// use blurry and expanded mask
|
||||||
|
const iterations = expansion_value
|
||||||
|
expanded_mask = await python_replacement.maskExpansionRequest(
|
||||||
|
mask,
|
||||||
|
iterations,
|
||||||
|
blur
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return expanded_mask
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
export class Session {
|
export class Session {
|
||||||
constructor() {}
|
constructor() {}
|
||||||
static async initializeSession(mode: GenerationModeEnum): Promise<any> {
|
static async initializeSession(mode: GenerationModeEnum): Promise<any> {
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ async function openUrlRequest(url) {
|
||||||
console.warn(e)
|
console.warn(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async function maskExpansionRequest(original_mask, mask_expansion_value) {
|
async function maskExpansionRequest(original_mask, mask_expansion_value, blur) {
|
||||||
// const endpoint = 'sdapi/v1/img2img'
|
// const endpoint = 'sdapi/v1/img2img'
|
||||||
// const full_url = `${g_sd_url}/${endpoint}`
|
// const full_url = `${g_sd_url}/${endpoint}`
|
||||||
|
|
||||||
|
|
@ -270,6 +270,7 @@ async function maskExpansionRequest(original_mask, mask_expansion_value) {
|
||||||
const payload = {
|
const payload = {
|
||||||
mask: original_mask,
|
mask: original_mask,
|
||||||
mask_expansion: mask_expansion_value,
|
mask_expansion: mask_expansion_value,
|
||||||
|
blur: blur,
|
||||||
}
|
}
|
||||||
|
|
||||||
const extension_url = getExtensionUrl()
|
const extension_url = getExtensionUrl()
|
||||||
|
|
@ -286,7 +287,7 @@ async function maskExpansionRequest(original_mask, mask_expansion_value) {
|
||||||
|
|
||||||
let r = await request.json()
|
let r = await request.json()
|
||||||
|
|
||||||
console.log('maskExpansionRequest json:', r)
|
// console.log('maskExpansionRequest json:', r)
|
||||||
return r['mask']
|
return r['mask']
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn(e)
|
console.warn(e)
|
||||||
|
|
|
||||||
|
|
@ -374,10 +374,11 @@ async function getSettings(session_data) {
|
||||||
) {
|
) {
|
||||||
//only if mask is available and sharp_mask is off
|
//only if mask is available and sharp_mask is off
|
||||||
// use blurry and expanded mask
|
// use blurry and expanded mask
|
||||||
const iterations = payload['mask_expansion']
|
|
||||||
const expanded_mask = await py_re.maskExpansionRequest(
|
const expanded_mask = await py_re.maskExpansionRequest(
|
||||||
payload['mask'],
|
payload['mask'],
|
||||||
iterations
|
payload['mask_expansion'],
|
||||||
|
mask_blur
|
||||||
)
|
)
|
||||||
if (expanded_mask) {
|
if (expanded_mask) {
|
||||||
payload['expanded_mask'] = expanded_mask
|
payload['expanded_mask'] = expanded_mask
|
||||||
|
|
|
||||||
|
|
@ -273,23 +273,37 @@ document.getElementById('btnUpdate').addEventListener('click', async () => {
|
||||||
document
|
document
|
||||||
.getElementById('slMaskExpansion')
|
.getElementById('slMaskExpansion')
|
||||||
.addEventListener('change', async (evt) => {
|
.addEventListener('change', async (evt) => {
|
||||||
document.getElementById('slMaskExpansion')
|
const mask = session_ts.store.data.preprocessed_mask
|
||||||
const original_mask = g_generation_session.activeBase64MaskImage
|
const iterations = parseInt(evt.target.value)
|
||||||
if (original_mask) {
|
|
||||||
//only if mask is available
|
const mask_blur = html_manip.getMaskBlur()
|
||||||
// use blurry and expanded mask
|
session_ts.store.data.expanded_mask = await session_ts.getExpandedMask(
|
||||||
const iterations = evt.target.value
|
mask,
|
||||||
const modified_mask = await py_re.maskExpansionRequest(
|
iterations,
|
||||||
original_mask,
|
mask_blur
|
||||||
iterations
|
)
|
||||||
)
|
if (session_ts.store.data.expanded_mask) {
|
||||||
if (modified_mask) {
|
viewMaskExpansion()
|
||||||
g_generation_session.base64maskExpansionImage = modified_mask
|
|
||||||
viewMaskExpansion()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
document
|
||||||
|
.getElementById('slMaskBlur')
|
||||||
|
.addEventListener('change', async (evt) => {
|
||||||
|
const mask = session_ts.store.data.preprocessed_mask
|
||||||
|
const iterations = parseInt(
|
||||||
|
document.getElementById('slMaskExpansion').value
|
||||||
|
)
|
||||||
|
const mask_blur = parseInt(evt.target.value)
|
||||||
|
session_ts.store.data.expanded_mask = await session_ts.getExpandedMask(
|
||||||
|
mask,
|
||||||
|
iterations,
|
||||||
|
mask_blur
|
||||||
|
)
|
||||||
|
if (session_ts.store.data.expanded_mask) {
|
||||||
|
viewMaskExpansion()
|
||||||
|
}
|
||||||
|
})
|
||||||
document
|
document
|
||||||
.getElementById('btnInterrogate')
|
.getElementById('btnInterrogate')
|
||||||
.addEventListener('click', async () => {
|
.addEventListener('click', async () => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue