관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

비전 에이전트 7 - 연습문제 풀기 1 : 문제 1~2번 본문

인공지능/컴퓨터 비전

비전 에이전트 7 - 연습문제 풀기 1 : 문제 1~2번

huenuri 2024. 11. 12. 15:46

새벽에만 컴퓨터 비전 공부를 하고 아침에는 다른 공부를 하느라 하지 못했다. 이제 오후에 3시간 정도 공부를 해볼 생각이다. 연습문제는 2시간 만에 풀어보고 나머지 한 시간은 7단원 진도를 나가봐야지.


 

 

 

 

연습문제 풀기

 

문제 1번

프로그램 6-1은 삑 소리만 낼 수 있다. winsound 모듈이 제공하는 여러 가지 소리를 낼 수 있게 메뉴를 확장하시오.

▶ 힌트 : winsound.PlaySound 함수를 이용한다.

 

 

 

 

문제 풀기

winsound.PlaySound를 사용하면 더 다양한 소리를 재생할 수 있다. winsound.SND_ALIAS 옵션을 사용하여 시스템 기본 소리를 호출하거나, 파일 경로를 지정해 특정 음원을 재생할 수 있다. 아래 코드는 버튼을 추가해 다양한 소리를 재생하도록 확장한 예시이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

이렇게 다양한 소리를 재생해보았다. 소리는 녹화할 수 없어 이미지만 올려본다. 근데 별표 소리와 질문 소리는 같았다.


 

 

 

문제 2번

프로그램 6-2에 <여러 프레임 잡기>라는 버튼을 추가하시오. 이 버튼은 프로그램 2-5처럼 c를 누를 때마다 프레임을 획득하여 이어 붙이는 기능을 한다.

 

프로그램 2-5

 

이런 식으로 c를 누르면 프레임을 리스트에 추가하는 코드이다.


 

 

 

문제 풀기

 

 

 

 

 

 

 

 

 

 

 

프레임 잡기를 하니 이렇게 지금 출력하고 있는 영상이 이미지로 캡처되었다. 하지만 이 코드로는 여러 프레임 잡기를 눌러도 이어 붙이기는 되지 않고 하나의 이미지만 볼 수 있었다. 코드를 수정해야 할 것 같다.

지금 이 코드는 단순히 프레임을 하나씩 저장하는 기능만 하고 있다. 추가된 프레임은 이처럼 문구가 출력된다.

 

 

  1. 여러 프레임 잡기 버튼 추가
    • <여러 프레임 잡기> 버튼(multiCaptureButton)을 추가하여 프레임을 여러 장 수집할 수 있도록 했다.
  2. multiCaptureFunction 함수
    • multiCaptureFunction 함수에서는 c 키를 누를 때마다 프레임을 self.capturedFrames 리스트에 추가하며, q 키를 눌러 수집을 종료할 수 있다.
    • 수집한 모든 프레임은 np.hstack을 사용하여 가로로 이어 붙여 한 이미지로 표시된다.
  3. 저장 함수에서 프레임 확인
    • saveFunction에서 self.stackedFrames가 존재할 경우에는 이어 붙인 프레임을 저장하고, 아니면 단일 캡처된 프레임을 저장하도록 했다.

 


 

 

 

코드 다시 수정하기

이 코드는 <프레임 잡기> 버튼과 <여러 프레임 잡기> 버튼을 함께 사용할 수 있도록 수정한 전체 코드이다. captureFunction을 수정하여 <프레임 잡기> 버튼을 눌렀을 때마다 프레임이 capturedFrames 리스트에 추가되도록 하였으며, 이 리스트는 <여러 프레임 잡기> 버튼에서도 함께 사용된다.

 

 

수정 사항

  1. self.capturedFrames 리스트 : <프레임 잡기>와 <여러 프레임 잡기>에서 공통으로 사용하는 리스트로, 각 함수가 호출될 때마다 프레임이 이 리스트에 추가된다.
  2. captureFunction 수정 : <프레임 잡기> 버튼을 눌러서 단일 프레임을 캡처할 때마다, 이전 프레임은 유지되고 새로운 프레임이 리스트에 추가된다. 이어 붙인 프레임들을 Stacked Captured Frames 창에서 볼 수 있다.
  3. multiCaptureFunction 기능 개선 : <여러 프레임 잡기>를 누르고 c 키를 누를 때마다 여러 프레임이 capturedFrames 리스트에 추가되고, q 키를 누르면 이어 붙여진 프레임이 표시된다.
  4. 저장 기능 : saveFunction에서 여러 프레임을 이어 붙인 결과(self.stackedFrames)나 단일 프레임(self.capturedFrame)을 선택적으로 저장한다.

 

 

이번에는 이렇게 여러 장이 연결되어 캡처가 잘 되었다.

 


 

 

 

학습을 마치고

1시간 동안 연습문제 두 문제를 풀어보았다. 문제가 조금 어려웠지만 그래도 풀만 했다. 이번 단원의 연습문제는 총 6문제인데 모두 이처럼 코드를 수정해서 고치는 문제들이다. 뒤쪽으로 갈수록 문제가 점점 어려워진다.

그래도 풀고 나면 배우는 것들이 많다. 다음 문제도 이어서 풀어보겠다.