프로젝트 기술스택
고등학교
제가 2012년 3월부터 2015년 2월까지 3년간 신세를 진 고등학교입니다. 진해에 있는 고등학교인데 진짜 열심히 가르칩니다. 진고
다만 같이 입학한 학생들이 이미 서로 친한 경우(중학교-고등학교 같은 지역)가 많기 때문에 타지 학생들은 조금 불편할 수 있습니다 ㅜㅜ
저는 타지에서 입학해 적응에 조금 어려움을 겪고 좋은 일도 나쁜 일도 많았지만 다 소중한 추억으로 남았던 곳이기도 합니다
R&E(과학영재 창의연구)를 어떻게 하게 되었는가?
2013년에 특이하게 고등학교에서 창원대 영재교육원과 MOU(업무협약: 기사링크)를 맺고 창원대학교와 R&E를 진행하기 시작했는데 이 때 컴퓨터공학부와 연계가 되길래 관심있는 학생들을 대상으로 인원들을 모집했던 경험이 있습니다. 결과는 당시 2학년인 나와 1학년 후배 3명이 팀으로 참가하게 되었습니다.
R&E 주제 선정 배경
결과적으로 우리는 ‘악보 인식 프로그램’을 제작하는 주제를 선정했습니다. 이를 선정한 이유에 대해 당시 결과 보고서를 인용해보자면
현재에 경향에 맞춰 사람들이 유행을 따르게 되어 소외된 분야들도 많이 있다. 우리는 그러한 것들을 조금이나마 해결해 보고자 이번 R&E를 구성하게 되었다. 좀 더 나은 미래를 위해 우리가 걸어야하는 길이 무엇인지, 작은 팀이 얼마나 많은 성과를 낼 수 있는지 알고 싶었다.
근래에 컴퓨터 기술이 발달하며 악보영상을 자동으로 인식하고 연주해 주는 악보 인식(Music score Recognition) 시스템에 관한 연구가 많이 진행되었다. 대부분의 연구들이 상당한 성과를 얻어내었고 높은 가치를 가지고 있다. 하지만 최근 들어 이 시스템에 관한 연구가 드물어지고 있으며 진행이 매우 더디어지고 있다. 악보 자동 인식에 대한 연구는 1960년대 후반부터 시작되었으나, 악보의 복잡성과 다양성으로 인하여 아직까지 모든 형태의 악보를 인식할 수 있는 일반적인 악보 인식 시스템은 존재하고 있지 않으며, 기존의 악보 인식 방법들은 인식 속도가 느리고 인식률이 낮은 단점이 있다.
라고 기록되어 있습니다. 정보를 더하자면 당시 고등학생 1, 2학년인 우리들은 컴퓨터 과학에 대해 배경지식이 적었고 할 수 있는 것들 또한 매우 적었습니다.
따라서 당시 정성환 지도교수 님에게 C언어에 대한 기초적인 교육을 받았고 배종욱 박사 님이 OpenCV로 연구를 진행하고 있던 영상 인식 기술에서 영감을 받아 이 주제를 선정하게 되었습니다.
R&E 활동 내용
C, OpenCV 학습
당시 지도교수 님에게 교육받았던 내용 중 일부입니다. C언어의 기초 문법, 포인터, 파일 입출력에 대해 교육받았습니다. 이후에는 배종욱 박사 님에게 우리의 주제를 위한 OpenCV 교육을 받았는데 대표적으로 아래와 같이 교육받고 실험(실습?)해보며 R&E를 진행했습니다.
악보인식 프로그램 제작 과정
주제를 위해 교육받은 내용을 바탕으로 개발을 시작했습니다. 당시에 대학교의 실습용 컴퓨터에서만 작업을 했었는데 이제와서 찾아보니 아쉽게도 코드 작업물들이 남지를 않아 아쉬움이 있네요…
프로젝트를 위해 다음의 3가지를 처음 기획했고 구현했습니다.
넘버 | 기능 | 구현 |
---|---|---|
1 | 컴퓨터 비전 기술을 이용한 악보에서의 음표 추출 | O |
2 | 사람의 눈 대신 카메라를 이용하여 악보영상을 처리 | X |
3 | 자동음악 연주 시스템 개발을 위한 기반 | △ |
음표 추출 시스템 구성도
악보의 전처리 및 잡음제거
악보의 원할한 인식을 위해 원본 이미지에서 이진 영상으로 변환, 모폴로지(팽창->축소)를 이용해 전처리
잡음이란 검출하고자 하는 것 이외의 모든 것을 말합니다
악보영상에서의 잡음으로는 조표, 음자리표, 제목, 가사, 코드, 마디 등 존재레이블링: 인접한 화소에 번호를 매겨 하나의 그룹으로 만드는 작업
레이블링을 통해 일정 크기(넓이)보다 작은 그룹을 제거하여 잡음을 제거 했습니다.기울어짐 보정
기울어짐을 보정하기 위해서 조금 테크니컬한 방식이 필요했는데 직선을 검출하기 위해서 잡음이 제거된 이진 영상에서 모폴로지를 한 번 더 진행해서 오선을 제거하고 이를 비트 연산을 통해 음표부분만 제거된 화면을 얻었어야 했습니다.
그 후 허프 변환을 활용해 직선의 기울기를 검출 했습니다.
그 결과로 우리는 위와 같이 기울기가 보정된 화면을 얻을 수 있었습니다.
오선 인식 및 제거
오선 인식을 해야 이를 제거하고 음표의 위치를 알고 어떤 음표인지 알 수 있기 때문에 오선 인식이 필요했습니다.
오선 인식은 OpenCV의 히스토그램를 반환받을 수 있는 calcHist() 함수를 활용해서 진행했습니다.
위와 같이 영상의 가로 방향 픽셀값을 모두 더해 히스토그램을 출력하고 피크값을 찾아내 이를 오선의 수직 좌표로 활용했습니다.
결과적으로 이와 같이 각 줄별로 5개의 수직 좌표를 반환받을 수 있었고 이를 이용해 상하 픽셀값 유무를 체크하여 영역 색을 255로 변환했습니다.
음표 추출
음표가 어떤 것인지 어떤 음표인지 인식하기 위한 음표 추출이 필요 했습니다.
음표 추출은 다음의 순서로 진행되었습니다.i. 비음표 제거
ii. 잇단음표 분리
iii. 음표의 추출i. 비음표 제거
우선 비음표를 위와 같은 방식으로 제거했습니다.
상기의 잡음 제거에서 했던 방식처럼 레이블링을 수행하고 비음표의 경우엔 자주 나오지 않기 때문에 그룹의 픽셀 값의 평균을 구한 뒤 편차치가 큰 것들을 제거하는 방식으로 제거할 수 있었습니다.ii. 잇단음표 분리
현재까지 레이블링은 잇단음표를 하나로 인식합니다. 따라서 이를 분리하기 위해 히스토그램을 한 번 더 사용했습니다.
위와 같이 이미지에서 세로 방향의 히스토그램을 그래프에서 앞 뒤 값으 130% 이상 검출 객체 높이의 60% 이상인 수치를 기준으로 Local Maxima(국부 최대값)를 추출해냈습니다.
여기까지 저희는 프로젝트를 진행했고 이후엔 이 실험과 프로젝트의 결과물로 3 종류의 음악 장르에 각각 10곡을 사용해 테스트를 진행해 보았습니다.
테스트
동요
- 옥수수 하모니카 2. 나무를 심자 3. 보물찾기 4. 다람쥐 5. 졸업식 노래
- 고기잡이 7. 기찻길 옆 8. 꼬부랑 할머니 9. 바닷가에서
- 반짝반짝 작은 별
찬송가
- 만복의 근원 하나님 2. 이 천지간 만물들아 3. 거룩하신 하나님
- 다 감사드리세 5. 복의 근원 강림하사 6. 즐겁게 안식한 날
- 이 날은 주의 정하신 8. 우리의 주여 9. 오 만세 반석이신
- 저 해와 달과 별들이
발라드
- 다 줄꺼야 2. 벌써 일년 3. 사랑이 지나가면 4. 오래 전 그날
- 사랑 빛 6.1 다행이다 7. 다행이다(회전) 8. 너에게로 또 다시
- 보고싶다 10. 너를 위해
프로젝트 회고
본 연구는 컴퓨터 비전 기술을 이용해 악보 영상 처리를 연구했습니다.
연구과정에서 악보의 인식까지 연구를 진행했고 당시 3가지 장르의 30곡의 임의의 악보에 대하여 약 85.2%의 인식률을 보였습니다.
찬송가와 같이 화질이 좋은 경우 약 93% 이상의 인식률을 보였습니다.
당시 사회 트렌드에서 조금 벗어난 주제이지만 이러한 기술 또한 발전되어야 전체 사회가 발전할 수 있다고 배종욱 박사님이 말씀해 주셨습니다.
덕분에 배종욱 박사 님의 영상처리 논문 관련에서도 도움이 되었다?고 하셨었습니다ㅋㅋ
여담으로
본 프로젝트를 위해 고등학교 2학년 학업과 동시에 창원대학에 왔다 갔다 하는 시간을 쏟으니 내신 성적이 나빠진 부작용이 있었습니다.
하지만 처음으로 C언어가 어떤 것인지, 컴퓨터의 구조가 어떤 것인지 프로그래밍을 제대로 어떻게 하는지 배울 수 있었던 시간이었고 지금와서 이런 경험이 없었다면 제가 이때까지 프로그래밍에 열의를 가지고 계속 살아오지 못했을 것이란 생각이 남습니다.
1
2
3
4
5
포스트 코멘트
정말 과거의 기록을 이제와서 정리해보자니 참 이런저런 생각이 많이 남습니다.
특히 프로젝트가 끝나고 난 뒤에 보고서와 발표자료를 준비했었는데
이 때 3학년이 되어 학교에서 무언가 시키는 것이 많아 끝까지 함께하지 못한 것이 아쉬웠습니다.
최종 결과물은 후배들이 아주 열심히 만들어 주었다고 후일담으로 들었습니다.
프로젝트 결과물 파일
감사합니다.