Akjava's picture
iniit
81e69dc
raw
history blame
1.84 kB
import os
#simple single version
def bbox_to_glandmarks(file_name,bbox,points = None):
base,ext = os.path.splitext(file_name)
glandmark = {"image":{
"boxes":[{
"left":int(bbox[0]),"top":int(bbox[1]),"width":int(bbox[2]),"height":int(bbox[3])
}],
"file":file_name,
"id":int(base)
# width,height ignore here
}}
if points is not None:
parts=[
]
for point in points:
parts.append({"x":int(point[0]),"y":int(point[1])})
glandmark["image"]["boxes"][0]["parts"] = parts
return glandmark
#technically this is not g-landmark/dlib ,
def convert_to_landmark_group_json(points):
if len(points)!=68:
print(f"points must be 68 but {len(points)}")
return None
new_points=list(points)
result = [ # possible multi person ,just possible any func support multi person
{ # index start 0 but index-number start 1
"chin":new_points[0:17],
"left_eyebrow":new_points[17:22],
"right_eyebrow":new_points[22:27],
"nose_bridge":new_points[27:31],
"nose_tip":new_points[31:36],
"left_eye":new_points[36:42],
"right_eye":new_points[42:48],
# lip points customized structure
# MIT licensed face_recognition
# https://github.com/ageitgey/face_recognition
"top_lip":new_points[48:55]+[new_points[64]]+[new_points[63]]+[new_points[62]]+[new_points[61]]+[new_points[60]],
"bottom_lip":new_points[54:60]+[new_points[48]]+[new_points[60]]+[new_points[67]]+[new_points[66]]+[new_points[65]]+[new_points[64]],
}
]
return result