Я пытаюсь поместить ограничивающий прямоугольник во время вывода в semanti c сегментированных изображениях. Но у меня возникает проблема с перекрывающимися объектами, и сегментация c semanti распознает их только как один объект. Есть ли какой-то конкретный метод для разделения и помещения в разные ограничивающие рамки?
Я должен использовать для этого сегментацию экземпляра, и это будет легко, но я хочу попробовать с сегментацией semanti c.
def bbox_output(self, predict):
#cv2.imshow('frame', predict)
person_mask = np.zeros(predict.shape, dtype=np.uint8)
person_mask[np.all(predict == self.person_color, axis=-1)] = [255, 255, 255]
person_mask = cv2.cvtColor(person_mask, cv2.COLOR_BGR2GRAY)
#cv2.imshow('test', person_mask)
#cv2.imwrite('masking.png', person_mask)
#cv2.waitKey(100000)
#cv2.destroyAllWindows()
distance = ndi.distance_transform_edt(person_mask)
#cv2.imshow('distance', distance)
#cv2.waitKey(100000)
#cv2.destroyAllWindows()
person_mask = label(person_mask)
regions = regionprops(person_mask)
props = regionprops_table(person_mask, properties=('centroid','orientation','bbox','major_axis_length','minor_axis_length','area'))
print(pd.DataFrame(props))
bboxes = []
num_people = [0]
i = 1
for props in regions:
if props.area > 100:
minr, minc, maxr, maxc = props.bbox
bboxes += [props.bbox]
num_people += [i]
predict = cv2.rectangle(predict, (minc, minr), (maxc, maxr), (0, 255, 0), 2, cv2.LINE_AA)
predict = cv2.putText(predict, f'person{i}', (minc, minr-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2, cv2.LINE_AA)
i +=1
return predict, bboxes, num_people[-1]