Showing
1 changed file
with
24 additions
and
9 deletions
... | @@ -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 | ... | ... |
-
Please register or login to post a comment