cat > /workspace/scratch/chairfix.py <<'PY'
import cv2,numpy as np,tifffile,json
from PIL import Image
s='HH-9395';p='/workspace/scratch/finalmasks/'+s+'.png';a=tifffile.imread('/workspace/input/photos/'+s+'.tif').astype('float32')/65535;m=cv2.imread(p,0)>127;ox,oy=json.load(open('/workspace/scratch/detailboxes.json'))[s][:2]
reg=np.zeros(m.shape,'uint8');reg[oy+150:oy+340,ox+185:ox+348]=1;reg[oy+438:oy+513,ox+205:ox+325]=1
m[(reg>0)&(a[:,:,0]-a[:,:,1]<-.012)]=0
polys=[[[121,665],[135,640],[151,632],[163,629],[163,735],[121,767]],
[[190,829],[196,830],[202,833],[207,837],[209,842],[207,844],[207,848],[201,850],[190,850]],
[[217,844],[220,840],[226,836],[233,832],[240,832],[247,833],[254,837],[259,841],[260,846],[255,847],[255,850],[222,850],[222,847]],
[[274,846],[277,841],[283,838],[291,835],[298,836],[305,839],[310,843],[311,848],[310,850],[278,850]]]
m=m.astype('uint8')*255
for poly in polys:cv2.fillPoly(m,[np.array(poly,'int32')+[ox,oy]],0)
m=cv2.GaussianBlur(m,(3,3),.4);cv2.imwrite(p,m)
im=Image.open('/workspace/input/photos/'+s+'.tif');o=Image.new('RGB',im.size,(15,92,138));o.paste(im,(0,0),Image.fromarray(m));o.crop(json.load(open('/workspace/scratch/detailboxes.json'))[s]).save('/workspace/scratch/check_'+s+'.png')
PY
python /workspace/scratch/chairfix.py