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')
|
||||
base64_mask_image = json['mask']
|
||||
mask_expansion = json['mask_expansion']
|
||||
blur = json['blur']
|
||||
#convert base64 to img
|
||||
|
||||
await img2imgapi.base64ToPng(base64_mask_image,"original_mask.png")#save a copy of the mask
|
||||
|
||||
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)
|
||||
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
|
||||
dilation_pixels = dilation_img.load()
|
||||
all_pixels = []
|
||||
depth = 20 # five pixel depth
|
||||
depth = 1 # five pixel depth
|
||||
for x in range(width):
|
||||
for d in range(depth):
|
||||
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]
|
||||
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
|
||||
|
||||
|
||||
|
|
@ -53,8 +53,8 @@ def maskExpansion(mask_img,mask_expansion):
|
|||
# if(payload['use_sharp_mask'] == False):# use blurry mask
|
||||
iteration = mask_expansion
|
||||
dilated_img = applyDilation(mask_img,iteration)
|
||||
mask_with_border = reserveBorderPixels(mask_img,dilated_img)
|
||||
mask_with_border = mask_with_border.filter(ImageFilter.GaussianBlur(radius = 10))
|
||||
blurred_image = dilated_img.filter(ImageFilter.GaussianBlur(radius = blur))
|
||||
mask_with_border = reserveBorderPixels(mask_img,blurred_image)
|
||||
return mask_with_border
|
||||
|
||||
async def base64ToPng(base64_image,image_path):
|
||||
|
|
|
|||
|
|
@ -323,13 +323,14 @@ async def maskExpansionHandler(request:Request):
|
|||
# keywords = json.get('keywords','cute dogs')
|
||||
base64_mask_image = json['mask']
|
||||
mask_expansion = json['mask_expansion']
|
||||
blur = json['blur']
|
||||
#convert base64 to img
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
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.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 {
|
||||
constructor() {}
|
||||
static async initializeSession(mode: GenerationModeEnum): Promise<any> {
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ async function openUrlRequest(url) {
|
|||
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 full_url = `${g_sd_url}/${endpoint}`
|
||||
|
||||
|
|
@ -270,6 +270,7 @@ async function maskExpansionRequest(original_mask, mask_expansion_value) {
|
|||
const payload = {
|
||||
mask: original_mask,
|
||||
mask_expansion: mask_expansion_value,
|
||||
blur: blur,
|
||||
}
|
||||
|
||||
const extension_url = getExtensionUrl()
|
||||
|
|
@ -286,7 +287,7 @@ async function maskExpansionRequest(original_mask, mask_expansion_value) {
|
|||
|
||||
let r = await request.json()
|
||||
|
||||
console.log('maskExpansionRequest json:', r)
|
||||
// console.log('maskExpansionRequest json:', r)
|
||||
return r['mask']
|
||||
} catch (e) {
|
||||
console.warn(e)
|
||||
|
|
|
|||
|
|
@ -374,10 +374,11 @@ async function getSettings(session_data) {
|
|||
) {
|
||||
//only if mask is available and sharp_mask is off
|
||||
// use blurry and expanded mask
|
||||
const iterations = payload['mask_expansion']
|
||||
|
||||
const expanded_mask = await py_re.maskExpansionRequest(
|
||||
payload['mask'],
|
||||
iterations
|
||||
payload['mask_expansion'],
|
||||
mask_blur
|
||||
)
|
||||
if (expanded_mask) {
|
||||
payload['expanded_mask'] = expanded_mask
|
||||
|
|
|
|||
|
|
@ -273,23 +273,37 @@ document.getElementById('btnUpdate').addEventListener('click', async () => {
|
|||
document
|
||||
.getElementById('slMaskExpansion')
|
||||
.addEventListener('change', async (evt) => {
|
||||
document.getElementById('slMaskExpansion')
|
||||
const original_mask = g_generation_session.activeBase64MaskImage
|
||||
if (original_mask) {
|
||||
//only if mask is available
|
||||
// use blurry and expanded mask
|
||||
const iterations = evt.target.value
|
||||
const modified_mask = await py_re.maskExpansionRequest(
|
||||
original_mask,
|
||||
iterations
|
||||
const mask = session_ts.store.data.preprocessed_mask
|
||||
const iterations = parseInt(evt.target.value)
|
||||
|
||||
const mask_blur = html_manip.getMaskBlur()
|
||||
session_ts.store.data.expanded_mask = await session_ts.getExpandedMask(
|
||||
mask,
|
||||
iterations,
|
||||
mask_blur
|
||||
)
|
||||
if (modified_mask) {
|
||||
g_generation_session.base64maskExpansionImage = modified_mask
|
||||
if (session_ts.store.data.expanded_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
|
||||
.getElementById('btnInterrogate')
|
||||
.addEventListener('click', async () => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue