강세희

[UPDATE] 검출 객체 제한

...@@ -41,7 +41,7 @@ if __name__ == '__main__': ...@@ -41,7 +41,7 @@ if __name__ == '__main__':
41 count = 0 41 count = 0
42 while success: 42 while success:
43 cv2.imwrite("mid/frame%d.png" % count, image) # save frame as JPEG file 43 cv2.imwrite("mid/frame%d.png" % count, image) # save frame as JPEG file
44 - success,image = camera.read() 44 + success, image = camera.read()
45 count += 1 45 count += 1
46 46
47 # 각 프레임 별로 Image Detection 후 프레임 번호, 객체 이름(name)과 객체의 크기(size), 객체가 얼마나 가운데 있는지(coordinatevalue) 저장 47 # 각 프레임 별로 Image Detection 후 프레임 번호, 객체 이름(name)과 객체의 크기(size), 객체가 얼마나 가운데 있는지(coordinatevalue) 저장
...@@ -55,18 +55,24 @@ if __name__ == '__main__': ...@@ -55,18 +55,24 @@ if __name__ == '__main__':
55 for box, score, cl in zip(boxes, scores, classes): 55 for box, score, cl in zip(boxes, scores, classes):
56 x, y, w, h = box 56 x, y, w, h = box
57 name = all_classes[cl] 57 name = all_classes[cl]
58 - size = w*h 58 + size = int(w*h)
59 - 59 + if size <= 4000: # 사이즈가 너무 작아 썸네일로 적합하지 않은 경우
60 + continue
61 + if x <= 0 or x+w >= image.shape[1] or y <= 0 or y+h >= image.shape[0]: # 검출된 객체가 프레임 밖으로 나간 경우
62 + continue
60 # 얼마나 가운데인지 확인하는 알고리즘 63 # 얼마나 가운데인지 확인하는 알고리즘
61 object = Point2D(width= x + h/2, height= y + w/2) 64 object = Point2D(width= x + h/2, height= y + w/2)
62 a = image.shape[1]/2 - object.width 65 a = image.shape[1]/2 - object.width
63 b = image.shape[0]/2 - object.height 66 b = image.shape[0]/2 - object.height
64 - coordinatevalue = math.sqrt((a*a)+(b*b)) 67 + coordinatevalue = int(math.sqrt((a*a)+(b*b)))
65 # 객체 정보 및 계산 값 저장 68 # 객체 정보 및 계산 값 저장
66 - detectionInfo.append([i, name, size, coordinatevalue]) 69 + detectionInfo.append([i, name, size, coordinatevalue, int(x), int(y), int(w), int(h)])
67 70
71 + f = open("detectionInfo.txt", 'w')
68 for i in range(len(detectionInfo)): 72 for i in range(len(detectionInfo)):
69 - print(detectionInfo[i]) 73 + data = str(detectionInfo[i][0]) +", " + detectionInfo[i][1] + ", " + str(detectionInfo[i][2]) + ", " + str(detectionInfo[i][3]) + ", " + str(detectionInfo[i][4]) + ", " + str(detectionInfo[i][5]) + ", " + str(detectionInfo[i][6]) + ", " + str(detectionInfo[i][7]) + "\n"
74 + f.write(data)
75 + f.close()
70 76
71 # 검출된 물체 리스트(중복 없이) 77 # 검출된 물체 리스트(중복 없이)
72 namelist = {} 78 namelist = {}
...@@ -74,7 +80,6 @@ if __name__ == '__main__': ...@@ -74,7 +80,6 @@ if __name__ == '__main__':
74 if not detectionInfo[i][1] in namelist: 80 if not detectionInfo[i][1] in namelist:
75 namelist[detectionInfo[i][1]] = [] 81 namelist[detectionInfo[i][1]] = []
76 82
77 - # 계획1 : 뒤 두 알고리즘 일정 비율로 합치기
78 # 크기 83 # 크기
79 for objectName in namelist.keys(): 84 for objectName in namelist.keys():
80 maxindex = 0 85 maxindex = 0
...@@ -111,9 +116,19 @@ if __name__ == '__main__': ...@@ -111,9 +116,19 @@ if __name__ == '__main__':
111 cv2.imwrite("output2/%s.png"% (objectname), output2) 116 cv2.imwrite("output2/%s.png"% (objectname), output2)
112 117
113 118
114 -# 계획2 : 프레임별로 나온 객체 겹치는 부분 제외하고 넓이 구해 큰거 Indexlist에 넣기 119 + # 계획2 : 프레임별로 나온 객체 겹치는 부분 제외하고 넓이 구해 큰거 Indexlist에 넣기
120 +
121 + # 모든 프레임에 적용하지 않고 베스트 컷 10컷 정도 선정
122 +
123 + # 선정된 프레임 내에서 일정 크기 이상의 객체 중, 겹치는 객체 선정해서 하나의 검출물로 처리
124 +
125 + # 정리된 검출 리스트 output3 에 출력
126 +
127 +
128 +
129 + # 계획3 : 객체가 특정 위치에 있는 프레임 뽑기
115 130
116 -# 계획3 : 객체가 특정 위치에 있는 프레임 뽑기 131 + # output1~3의 결과들을 가지고 특정 위치에 있게 이미지 크롭, 결과를 output1_1, output2_1, output3_1 에 저장
117 132
118 133
119 134
......