Commit 0f45059bf7eb1ff628616b9bc1a332522fb4cff0

Authored by Austin Blanton
1 parent 34a914c4

Add some landmarks HTML visualizations

Showing 1 changed file with 35 additions and 2 deletions
scripts/brpy/html_viz.py
... ... @@ -8,12 +8,46 @@ and host them as long as the relative paths remain the same on ya serva.
8 8  
9 9 from PIL import Image
10 10  
  11 +LMSIZE = 8
  12 +
  13 +def landmarks_on_crop(landmarks, x, y, width, height, imname, maxheight=None, color='green'):
  14 + '''
  15 + Generates an HTML string that shows landmarks within a given cropped image.
  16 + When two landmarked crops are put next to each other, they will be inline. To make each crop its own line, wrap it in a div.
  17 + '''
  18 + html = _bbcrop(x, y, width, height, imname, maxheight)
  19 + if not maxheight:
  20 + maxheight = height
  21 + ratio = float(maxheight) / height
  22 + print(ratio)
  23 + if len(landmarks) > 0 and len(landmarks[0]) != 3:
  24 + landmarks = [ lm + (color,) for lm in landmarks ]
  25 + for lmx,lmy,col in landmarks:
  26 + html += landmark((lmx-x)*ratio - (LMSIZE/2), (lmy-y)*ratio - (LMSIZE/2), col)
  27 + html += '</div>'
  28 + return html
  29 +
  30 +def landmark_img(x, y, img, color='green'):
  31 + html = '<div style="position:relative;">'
  32 + html += '<img src="%s" />' % img
  33 + html += landmark(x,y,color)
  34 + html += '</div>'
  35 + return html
  36 +
  37 +def landmark(x, y, color='green'):
  38 + return '<div style="position:absolute; top:{0}px; left:{1}px; color:{2}; background-color:{2}; width:{3}px; height:{3}px;"></div>'.format(y,x,color,LMSIZE)
  39 +
11 40 def crop_to_bb(x, y, width, height, imname, maxheight=None):
12 41 '''
13 42 Generates an HTML string that crops to a given bounding box and resizes to maxheight pixels.
14 43 A maxheight of None will keep the original size (default).
15 44 When two crops are put next to each other, they will be inline. To make each crop its own line, wrap it in a div.
16 45 '''
  46 + html = _bbcrop(x, y, width, height, imname, maxheight)
  47 + html += '</div>'
  48 + return html
  49 +
  50 +def _bbcrop(x, y, width, height, imname, maxheight):
17 51 img = Image.open(imname)
18 52 imwidth, imheight = img.size
19 53 if not maxheight:
... ... @@ -23,9 +57,8 @@ def crop_to_bb(x, y, width, height, imname, maxheight=None):
23 57 # image is cropped with div width/height + overflow:hidden,
24 58 # resized with img height,
25 59 # and positioned with img margin
26   - html = '<div style="overflow:hidden; display:inline-block; width:%ipx; height:%ipx;">' % (width*ratio, maxheight)
  60 + html = '<div style="overflow:hidden; display:inline-block; position:relative; width:%ipx; height:%ipx;">' % (width*ratio, maxheight)
27 61 html += '<img src="%s" style="height:%ipx; margin:-%ipx 0 0 -%ipx;"/>' % (imname, imheight*ratio, y*ratio, x*ratio)
28   - html += '</div>'
29 62 return html
30 63  
31 64 def bbs_for_image(imname, bbs, maxheight=None, colors=None):
... ...