Spaces:
Paused
Paused
| import numpy as np | |
| import pandas | |
| import cv2 | |
| from PIL import Image | |
| from Detected import Image_Processor | |
| import os | |
| import re | |
| class Data_Processor(object): | |
| def __init__(self,dirname,mask_model="pose2seg_release.pkl", | |
| keypoints_model = "COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml"): | |
| self._dirname = dirname | |
| self._img_pro = Image_Processor(mask_model,keypoints_model) | |
| # self._dataframe = self.Process() | |
| def Data_check(self,figure,img_info): | |
| pass | |
| # if figure.WTR > 7 or figure.WHpR > 2 or figure.WHdR > 5 or figure.HpHdR > 7 : | |
| # raise Exception("InvalidData!") | |
| # if img_info.age < 13 or img_info.age > 60 or img_info.height < 1 or img_info.height > 2 or img_info.weight < 30 or img_info.weight > 500: | |
| # raise Exception("InvalidData!") | |
| def Process(self): | |
| path =os.path.join(self._dirname) | |
| img_names =os.listdir(path) | |
| Data_list = [] | |
| columns=['WTR','WHpR','WHdR','HpHdR','Area','H2W','WSR','sex','age','height','weight','BMI'] | |
| for img_name in img_names: | |
| try: | |
| print("processing the picture: %s"%img_name) | |
| ret = re.match(r"\d+?_([FMfm])_(\d+?)_(\d+?)_(\d+).+",img_name) | |
| sex = 0 if (ret.group(1) == 'F' or ret.group(1) == 'f') else 1 | |
| img_info = Img_info(sex,int(ret.group(2)),int(ret.group(3))/100000,int(ret.group(4))/100000) | |
| img_path = os.path.join(path,img_name) | |
| # img = Image.open(img_path) | |
| # img = np.array(img) | |
| img = cv2.imread(img_path) | |
| figure = self._img_pro.Process(img) | |
| self.Data_check(figure,img_info) | |
| Data_list.append([figure.WTR,figure.WHpR,figure.WHdR,figure.HpHdR,figure.Area,figure.H2W,figure.WSR, | |
| img_info.sex,img_info.age,img_info.height,img_info.weight,img_info.BMI]) | |
| except AssertionError as ae: | |
| print('!' * 50) | |
| print("%s in picture: %s"%(ae,img_name)) | |
| print('!' * 50) | |
| except Exception as ep: | |
| print('!'*50) | |
| print("%s : %s"%(ep,img_name)) | |
| print('!'*50) | |
| DataFrame = pandas.DataFrame(data=Data_list,columns=columns) | |
| return DataFrame | |
| # @property | |
| # def DataFrame(self): | |
| # return self._dataframe | |
| # @property | |
| # def Img_info(self): | |
| # pass | |
| class Img_info(object): | |
| def __init__(self,sex,age,height,weight): | |
| self._sex = sex | |
| self._age = age | |
| self._height = height | |
| self._weight = weight | |
| def BMI(self): | |
| return self._weight / self._height**2 | |
| def sex(self): | |
| return self._sex | |
| def age(self): | |
| return self._age | |
| def weight(self): | |
| return self._weight | |
| def height(self): | |
| return self._height | |