Spaces:
Configuration error
Configuration error
| import cv2 | |
| import numpy as np | |
| def class_name(classid): | |
| id_dict = {1:'Scratch', 2:'Dent', 3:'Shatter', 4:'Dislocation'} | |
| return id_dict[classid] | |
| def damage_cost(classid): | |
| # cost_dict = {1: [800, 1400], 2:[1200, 3000],3:19000, 4:17000} | |
| cost_dict = {1: 900, 2:1600, 3:19000, 4:17000} | |
| return cost_dict[classid] | |
| def area_ratio(image, roi, mask): | |
| y1, x1, y2, x2 = tuple(roi) | |
| crop_mask = mask[y1:y1+(y2-y1),x1:x1+(x2-x1)].copy() | |
| pixels = cv2.countNonZero(np.float32(crop_mask)) | |
| image_area = image.shape[0] * image.shape[1] | |
| area_ratio = 1 + (pixels / image_area) | |
| return area_ratio | |
| def costEstimate(image, rois, masks, classids): | |
| cost_id_dict = { | |
| "Shatter": {"Count": 0, "Cost": 0}, | |
| "Scratch": {"Count": 0, "Cost": 0}, | |
| "Dent": {"Count": 0, "Cost": 0}, | |
| "Dislocation": {"Count": 0, "Cost": 0} | |
| } | |
| total = 0 | |
| count = int() | |
| cost_init = int() | |
| for index in range(rois.shape[0]): | |
| name = class_name(classids[index]) | |
| cost = damage_cost(classids[index]) | |
| ratio = area_ratio(image, rois[index], masks[: ,: ,index]) | |
| total = total + round(cost * ratio,2) | |
| # unique_id = str() | |
| # for roi in rois[index]: | |
| # unique_id = unique_id + str(roi) | |
| if name is 'Scratch': | |
| count = cost_id_dict[name]['Count'] + 1 | |
| cost_init = cost_id_dict[name]['Cost'] + round(cost * ratio,2) | |
| cost_id_dict[name]['Count'] = count | |
| cost_id_dict[name]['Cost'] = cost_init | |
| # cost_id_dict[name] = "Range: Rs." + str(round(cost[0] * ratio,3)) + ' - Rs.' + str(round(cost[1] * ratio, 3)) | |
| elif name is 'Dent': | |
| count = cost_id_dict[name]['Count'] + 1 | |
| cost_init = cost_id_dict[name]['Cost'] + round(cost * ratio,2) | |
| cost_id_dict[name]['Count'] = count | |
| cost_id_dict[name]['Cost'] = cost_init | |
| # cost_id_dict[name] = "Range: Rs." + str(cost[0] * ratio) + ' - Rs.' + str(cost[1] * ratio) | |
| elif name is 'Shatter': | |
| count = cost_id_dict[name]['Count'] + 1 | |
| cost_init = cost_id_dict[name]['Cost'] + round(cost * ratio,2) | |
| cost_id_dict[name]['Count'] = count | |
| cost_id_dict[name]['Cost'] = cost_init | |
| # cost_id_dict[name] = "Cost: Rs." + str(cost) | |
| else: | |
| count = cost_id_dict[name]['Count'] + 1 | |
| cost_init = cost_id_dict[name]['Cost'] + round(cost * ratio,2) | |
| cost_id_dict[name]['Count'] = count | |
| cost_id_dict[name]['Cost'] = cost_init | |
| # cost_id_dict[name] = "Cost: Rs." + str(cost) | |
| for name, values in cost_id_dict.copy().items(): | |
| if values['Count'] == 0: | |
| cost_id_dict.pop(name) | |
| return total, cost_id_dict |