use blur slider to add blur to the expanded mask

pull/330/head
Abdullah Alfaraj 2023-07-06 11:52:47 +03:00
parent f040850244
commit 9c048654f4
7 changed files with 74 additions and 24 deletions

View File

@ -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

View File

@ -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):

View File

@ -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

View File

@ -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> {

View File

@ -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)

View File

@ -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

View File

@ -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 () => {