강세희

[UPDATE] 검출 객체 제한

......@@ -41,7 +41,7 @@ if __name__ == '__main__':
count = 0
while success:
cv2.imwrite("mid/frame%d.png" % count, image) # save frame as JPEG file
success,image = camera.read()
success, image = camera.read()
count += 1
# 각 프레임 별로 Image Detection 후 프레임 번호, 객체 이름(name)과 객체의 크기(size), 객체가 얼마나 가운데 있는지(coordinatevalue) 저장
......@@ -55,18 +55,24 @@ if __name__ == '__main__':
for box, score, cl in zip(boxes, scores, classes):
x, y, w, h = box
name = all_classes[cl]
size = w*h
size = int(w*h)
if size <= 4000: # 사이즈가 너무 작아 썸네일로 적합하지 않은 경우
continue
if x <= 0 or x+w >= image.shape[1] or y <= 0 or y+h >= image.shape[0]: # 검출된 객체가 프레임 밖으로 나간 경우
continue
# 얼마나 가운데인지 확인하는 알고리즘
object = Point2D(width= x + h/2, height= y + w/2)
a = image.shape[1]/2 - object.width
b = image.shape[0]/2 - object.height
coordinatevalue = math.sqrt((a*a)+(b*b))
coordinatevalue = int(math.sqrt((a*a)+(b*b)))
# 객체 정보 및 계산 값 저장
detectionInfo.append([i, name, size, coordinatevalue])
detectionInfo.append([i, name, size, coordinatevalue, int(x), int(y), int(w), int(h)])
f = open("detectionInfo.txt", 'w')
for i in range(len(detectionInfo)):
print(detectionInfo[i])
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"
f.write(data)
f.close()
# 검출된 물체 리스트(중복 없이)
namelist = {}
......@@ -74,7 +80,6 @@ if __name__ == '__main__':
if not detectionInfo[i][1] in namelist:
namelist[detectionInfo[i][1]] = []
# 계획1 : 뒤 두 알고리즘 일정 비율로 합치기
# 크기
for objectName in namelist.keys():
maxindex = 0
......@@ -91,7 +96,7 @@ if __name__ == '__main__':
output1 = cv2.GaussianBlur(image, (5,5), 0)
cv2.imwrite("output1/%s.png"% (objectname), output1)
# 가운데 위치
# 가운데 위치
for objectName in namelist.keys():
namelist[objectName] = []
......@@ -111,9 +116,19 @@ if __name__ == '__main__':
cv2.imwrite("output2/%s.png"% (objectname), output2)
# 계획2 : 프레임별로 나온 객체 겹치는 부분 제외하고 넓이 구해 큰거 Indexlist에 넣기
# 계획2 : 프레임별로 나온 객체 겹치는 부분 제외하고 넓이 구해 큰거 Indexlist에 넣기
# 계획3 : 객체가 특정 위치에 있는 프레임 뽑기
# 모든 프레임에 적용하지 않고 베스트 컷 10컷 정도 선정
# 선정된 프레임 내에서 일정 크기 이상의 객체 중, 겹치는 객체 선정해서 하나의 검출물로 처리
# 정리된 검출 리스트 output3 에 출력
# 계획3 : 객체가 특정 위치에 있는 프레임 뽑기
# output1~3의 결과들을 가지고 특정 위치에 있게 이미지 크롭, 결과를 output1_1, output2_1, output3_1 에 저장
......