freealise commited on
Commit
16f7bdc
1 Parent(s): 5b7658f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -38
app.py CHANGED
@@ -338,11 +338,10 @@ def switch_rows(v):
338
 
339
  def draw_mask(ksize, th, v, d, evt: gr.EventData):
340
  print(v)
341
- vv = v.split(", ")
342
- x = int(vv[0])
343
- y = int(vv[1])
344
- w = int(vv[2])
345
- h = int(vv[3])
346
 
347
  img = cv2.cvtColor(d["background"], cv2.COLOR_RGB2GRAY)
348
  rows, cols = img.shape
@@ -368,7 +367,8 @@ def draw_mask(ksize, th, v, d, evt: gr.EventData):
368
  #abs_grad_y = cv2.convertScaleAbs(grad_y)
369
 
370
  #grad = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)
371
- bw = cv2.cvtColor(cv2.threshold(255-img_back, th, 255, cv2.THRESH_BINARY)[1], cv2.COLOR_GRAY2RGB)
 
372
 
373
  d["background"] = bw
374
  d["composite"] = bw
@@ -428,45 +428,27 @@ with gr.Blocks(css=css) as demo:
428
  output_mask = gr.ImageEditor(layers=True, sources=None, type="numpy", interactive=True, transforms=(None,), eraser=gr.Eraser(), brush=gr.Brush(default_size=0, colors=['black', '#505050', '#a0a0a0', 'white']), elem_id="image_edit")
429
  ksize = gr.Slider(label="Kernel", value=128, minimum=0, maximum=1024, step=1)
430
  threshold = gr.Slider(label="Threshold", value=128, minimum=0, maximum=255, step=1)
431
- selector = gr.HTML(value="""<div id='select_frame' style='position:absolute;border:1px dashed #808080;width:0;height:0'></div>
432
- <input type='number' id='mousedown' style='width:10em;color:auto;background-color:transparent;border:1px solid lightgray;'/>
433
- <input type='number' id='mouseup' style='width:10em;color:auto;background-color:transparent;border:1px solid lightgray;'/>
434
- <a href='#' id='selector' onclick='
435
- document.body.appendChild(document.getElementById(\"select_frame\"));
436
- document.getElementById(\"image_edit\").getElementsByTagName(\"canvas\")[0].onpointerdown = function(e) {
437
  var x = parseInt((e.clientX-e.target.getBoundingClientRect().x)*e.target.width/e.target.getBoundingClientRect().width);
438
  var y = parseInt((e.clientY-e.target.getBoundingClientRect().y)*e.target.height/e.target.getBoundingClientRect().height);
439
- document.getElementById(\"mousedown\").value = x + y / 10000;
440
 
441
- document.getElementById(\"select_frame\").style.left = 0;
442
- document.getElementById(\"select_frame\").style.width = 0;
443
- document.getElementById(\"select_frame\").style.top = 0;
444
- document.getElementById(\"select_frame\").style.height = 0;
445
- }
446
- document.getElementById(\"image_edit\").getElementsByTagName(\"canvas\")[0].onpointerup = function(e) {
447
- var x = parseInt((e.clientX-e.target.getBoundingClientRect().x)*e.target.width/e.target.getBoundingClientRect().width);
448
- var y = parseInt((e.clientY-e.target.getBoundingClientRect().y)*e.target.height/e.target.getBoundingClientRect().height);
449
- document.getElementById(\"mouseup\").value = x + y / 10000;
450
-
451
- var x0 = parseInt(document.getElementById(\"mousedown\").value);
452
- var x1 = parseInt(document.getElementById(\"mouseup\").value);
453
- var y0 = parseInt((parseFloat(document.getElementById(\"mousedown\").value)-x0)*10000);
454
- var y1 = parseInt((parseFloat(document.getElementById(\"mouseup\").value)-x1)*10000);
455
- var x = Math.min(x0, x1);
456
- var y = Math.min(y0, y1);
457
- var w = Math.max(x0, x1)-x;
458
- var h = Math.max(y0, y1)-y;
459
- document.getElementById(\"select_frame\").style.left = e.target.getBoundingClientRect().x + x/e.target.width*e.target.getBoundingClientRect().width + \"px\";
460
- document.getElementById(\"select_frame\").style.width = w/e.target.width*e.target.getBoundingClientRect().width + \"px\";
461
- document.getElementById(\"select_frame\").style.top = e.target.getBoundingClientRect().y + y/e.target.height*e.target.getBoundingClientRect().height + \"px\";
462
- document.getElementById(\"select_frame\").style.height = h/e.target.height*e.target.getBoundingClientRect().height + \"px\";
463
-
464
- document.getElementById(\"mouse\").getElementsByTagName(\"textarea\")[0].value = x + \", \" + y + \", \" + w + \", \" + h;
465
  var evt = document.createEvent(\"Event\");
466
  evt.initEvent(\"input\", true, false);
467
  document.getElementById(\"mouse\").getElementsByTagName(\"textarea\")[0].dispatchEvent(evt);
 
 
 
468
  }' title='select'>⬚</a>""")
469
- mouse = gr.Textbox(elem_id="mouse", value="""0, 0, 0, 0""")
470
  output_mask.apply(fn=draw_mask, inputs=[ksize, threshold, mouse, output_mask], outputs=[output_mask])
471
  submit = gr.Button("Submit")
472
  with gr.Column():
 
338
 
339
  def draw_mask(ksize, th, v, d, evt: gr.EventData):
340
  print(v)
341
+ vv = json.loads(v)
342
+ pts = np.array(vv, np.int32)
343
+ pts = pts.reshape((-1,1,2))
344
+ cv2.polylines(d["background"],[pts],True,(0,0,0))
 
345
 
346
  img = cv2.cvtColor(d["background"], cv2.COLOR_RGB2GRAY)
347
  rows, cols = img.shape
 
367
  #abs_grad_y = cv2.convertScaleAbs(grad_y)
368
 
369
  #grad = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)
370
+ #bw = cv2.cvtColor(cv2.threshold(255-img_back, th, 255, cv2.THRESH_BINARY)[1], cv2.COLOR_GRAY2RGB)
371
+ bw = cv2.cvtColor(255-img_back, cv2.COLOR_GRAY2RGB)
372
 
373
  d["background"] = bw
374
  d["composite"] = bw
 
428
  output_mask = gr.ImageEditor(layers=True, sources=None, type="numpy", interactive=True, transforms=(None,), eraser=gr.Eraser(), brush=gr.Brush(default_size=0, colors=['black', '#505050', '#a0a0a0', 'white']), elem_id="image_edit")
429
  ksize = gr.Slider(label="Kernel", value=128, minimum=0, maximum=1024, step=1)
430
  threshold = gr.Slider(label="Threshold", value=128, minimum=0, maximum=255, step=1)
431
+ selector = gr.HTML(value="""<a href='#' id='selector' onclick='
432
+ document.getElementById(\"image_edit\").getElementsByTagName(\"canvas\")[0].oncontextmenu = function(e){e.preventDefault();}
433
+ document.getElementById(\"image_edit\").getElementsByTagName(\"canvas\")[0].ondrag = function(e){e.preventDefault();}
434
+
435
+ document.getElementById(\"image_edit\").getElementsByTagName(\"canvas\")[0].onclick = function(e) {
 
436
  var x = parseInt((e.clientX-e.target.getBoundingClientRect().x)*e.target.width/e.target.getBoundingClientRect().width);
437
  var y = parseInt((e.clientY-e.target.getBoundingClientRect().y)*e.target.height/e.target.getBoundingClientRect().height);
 
438
 
439
+ var p = document.getElementById(\"mouse\").getElementsByTagName(\"textarea\")[0].value.slice(1, -1);
440
+ if (p != \"\") { p += \", \"; }
441
+ p += \"[\" + x + \", \" + y + \"]\";
442
+ document.getElementById(\"mouse\").getElementsByTagName(\"textarea\")[0].value = \"[\" + p + \"]\";
443
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444
  var evt = document.createEvent(\"Event\");
445
  evt.initEvent(\"input\", true, false);
446
  document.getElementById(\"mouse\").getElementsByTagName(\"textarea\")[0].dispatchEvent(evt);
447
+ }
448
+ document.getElementById(\"image_edit\").getElementsByTagName(\"canvas\")[0].ondblclick = function(e) {
449
+ document.getElementById(\"mouse\").getElementsByTagName(\"textarea\")[0].value = \"[]\";
450
  }' title='select'>⬚</a>""")
451
+ mouse = gr.Textbox(elem_id="mouse", value="""[]""", interactive=False)
452
  output_mask.apply(fn=draw_mask, inputs=[ksize, threshold, mouse, output_mask], outputs=[output_mask])
453
  submit = gr.Button("Submit")
454
  with gr.Column():