import glob, json, numpy as np
from ultralytics import YOLO
from PIL import Image
m=YOLO('OrangutanNestModel.pt')
P="/mnt/user-data/uploads/OO from the sky/peerj-20333/photos"
out={}
for cls in ['With_nest','Without_nest']:
    for f in sorted(glob.glob(f"{P}/{cls}/*.JPG")):
        im=np.array(Image.open(f).convert('RGB'))
        H,W=im.shape[:2]; dets=[]
        # tiles 2000x1500 with overlap
        for y0 in [0,750,1500]:
            for x0 in [0,1000,2000]:
                t=im[y0:y0+1500,x0:x0+2000]
                r=m.predict(t,imgsz=1280,conf=0.15,verbose=False)[0]
                for b,c in zip(r.boxes.xyxy.numpy(),r.boxes.conf.numpy()):
                    dets.append([float(b[0]+x0),float(b[1]+y0),float(b[2]+x0),float(b[3]+y0),float(c)])
        # simple NMS merge
        dets=sorted(dets,key=lambda d:-d[4]); keep=[]
        for d in dets:
            if all(abs((d[0]+d[2])/2-(k[0]+k[2])/2)>40 or abs((d[1]+d[3])/2-(k[1]+k[3])/2)>40 for k in keep): keep.append(d)
        out[f]=keep
        print(cls,f.split('/')[-1],len(keep),[round(k[4],2) for k in keep][:6],flush=True)
json.dump(out,open('dets_native.json','w'))
