이전 작성 글
학생 때 C++ D 받았었는데, AI 문과생으로 코딩이 너무 재미있어 졌어요
이전 작업 내용
영상 객체인식 라이브러리 YOLO와 웹에서의 코딩을 지원해주는 구글 코랩을 이용해 아이돌 3명이 나오는 영상 추적까지는 성공하였으나, 저장이 안되고 한 사람을 n 명의 다른 사람으로 인식하는 문제가 발생함
시도한 방법
클로드 선생님에게 물어봐서 아래와 같은 대답을 얻었습니다.
잘은 이해하지 못했지만, 영상 저장을 위해서는 video를 읽는 함수를 사용하는데, 이 video 객체가 닫혀있어서 없는 프레임을 저장하려해서 실패했다는 느낌을 받았습니다.
그래서 아래는 중간에 추가된 코드입니다.
# 하이라이트 영상 생성
for person_id, detections in person_detections.items():
highlight_frames = []
# 비디오 다시 열기
video = cv2.VideoCapture(video_path)
for frame_num, bbox in detections:
x1, y1, x2, y2 = bbox
video.set(cv2.CAP_PROP_POS_FRAMES, frame_num) # 해당 프레임으로 이동
ret, frame = video.read()
if ret:
# 감지된 사람 주변으로 일정 크기의 영역 설정
margin = 50
x1, y1, x2, y2 = x1 - margin, y1 - margin, x2 + margin, y2 + margin
x1, y1 = max(0, x1), max(0, y1)
x2, y2 = min(frame.shape[1], x2), min(frame.shape[0], y2)
# 감지된 사람이 포함된 영역 추출
person_frame = frame[y1:y2, x1:x2]
# 줌인/줌아웃 효과 적용
zoom_ratio = 1.5
zoom_in_frame = cv2.resize(person_frame, None, fx=zoom_ratio, fy=zoom_ratio)
zoom_out_frame = cv2.resize(zoom_in_frame, (person_frame.shape[1], person_frame.shape[0]))
highlight_frames.append(zoom_out_frame)
# 비디오 닫기
video.release()이것을 돌려보니
idoltracking.mp4재생도 쌩쌩 되고 저장되었다는 결과값이 나와서 성공인 줄 알았습니다.
person_0.mp4person_1.mp4하지만 위 영상처럼 프레임수도 매우 적고 아예 한 프레임만 저장된 문제가 있었습니다.
예상되는 문제는 아이돌 객체를 제대로 인식을 못하고 인식하는 박스가 작아서 옷 모양만보고 판단한 것 같다는 생각도 들었습니다.
이에따라 클로드에 질문을 해보니 제 말이 맞는 것 같아서 기분이 좋았습니다. (작고 소중한 나의 에러근육💪)
다음 할 일
그래도 여러 문제 중 하나씩 해결되가면서 다음 해결해야 할 문제가 보여서 다행인 것 같습니다.
이후에 시도해 볼 부분은 더 더 나은 객체인식을 위해 가장 최신, 최고 모델인 YOLOv8x 을 사용하여 객체를 인식하는 박스를 더 넓혀서 트래킹 해 볼 예정입니다.
사실 지금 돌리고 있는데, 상대적으로 가벼운 모델인 YOLOv5s 을 쓸 때와는 비교도 안되게 버벅입니다..
결과 나오면 또 공유할게요 만괂부 (많은 관심 부탁드린다는 뜻)
#AI문과생도코딩