Untitled

 avatar
unknown
python
2 years ago
1.3 kB
4
Indexable
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image


app = FaceAnalysis()
app.prepare(ctx_id=0, det_size=(128,128))


def resize(info):
    im = cv2.imread(info[0])
    box = info[1]
    cname = info[0]
    angle = info[2]
    gender = info[3]    
    x1 = box[0]
    y1 = box[1]
    x2 = box[2]
    y2 = box[3]
    center = [(x2+x1)/2, (y2+y1)/2]
    w = x2 - x1
    h = y2 - y1
    d = max(w,h)
    delta_d = 1.5
    
    if angle[1] < -50:
        x1 = max(center[0] - d*0.55, 0)
        delta_d = 1.8
    elif angle[1] > 50:
        x1 = max(center[0] - d*1.25, 0)
        delta_d = 1.8
    else:
        x1 = max(center[0] - d*0.75, 0)
        
    x2 = x1 + d*delta_d

    if delta_d == 1.5:
        y1 = max(center[1] - d*0.875, 0)
    else:
        y1 = max(center[1] - d*1.05, 0)
        
    y2 = y1 + d*delta_d
    small_im = im[int(y1):int(y2), int(x1):int(x2), :]
    faces = app.get(small_im)
    
    if max(small_im.shape[0], small_im.shape[1]) > 512 and y1 > 0 and len(faces) == 1:
        cname = 'face_crops/model_{}_{}_{}_{}_'.format(angle[0], angle[1], angle[2], gender) + cname.split('/')[-1]
        small_im = cv2.resize(small_im, (512, 512))
        cv2.imwrite(cname, small_im)