라이브아이돌 영상 추출 도전하기 2번째 도전

이전 작성 글
학생 때 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문과생도코딩

4
2개의 답글

👉 이 게시글도 읽어보세요

모집 중인 AI 스터디