Hoon222y

시각장애인을 위한 APP - 악보 인식 및 오선 제거 과정( 업데이트 1/20 ) 본문

개발 /듣는 악보 - Lisic

시각장애인을 위한 APP - 악보 인식 및 오선 제거 과정( 업데이트 1/20 )

hoon222y 2016. 11. 13. 16:40

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

사실 프로젝트를 진행하기 앞서 고백을 하자면 ... 이번 프로젝트를 하면서 JAVA라는 언어를 처음 사용해 보았다.... 물론 문법및 처음 프로젝트를 어떻게 생성하는지도 몰라서 허둥지둥 ... ㅋㅋㅋㅋ ..... 하지만 갓 google이 있으니까 일단 부딪쳐 보았다. !!!! (좋은 개발자는 처음부터 모든걸 끝까지 자신의 힘으로 모두 만드는 사람이라고 할 수도 있겠지만 .... 정보가 넘처나는 이 시대에 원하는 정보를 빠르게 찾고 내가 원하게 적용하는 것이 진정한 개발자가 아니겠는가!!  ) ㅎㅎ ... 

일단 가장 먼저 구현할 부분은 바로 악보를 읽고, 그 악보에서 각각의 계이름을 읽는 방식으로 진행이 되어야 할 것이다. 

그러기 위해서는 악보에서 노이즈 부분을 제거하고 음표 및 나머지 기호등을 제외한 나머지 부분을 다 제거하는것이 가장 먼저 진행되어야 할 것이다. 


현재 해당악보를 기준으로 작업을 하고 있다. 일단은 악보에서 각각 한줄씩 나누는 과정을 처리해 주었다.  그전에 악보에서 음표 및 기호부분을 제외한 나머지 부분은 나중에 악보인식을 할때 오류를 야기할 수도 있을꺼같아서 ... 이진화 하는 부분을 먼저 구현하였다. 

이진화 부분은 간단했다. 그냥 아래 코드처럼 일정 색을 기준으로 크면 흰색 작으면 검은색으로 바꿔주는 아주 간단한 작업이다. 

(코드 첨부)

그리고는 각각 한줄씩 나누는 부분! 

(코드 첨부)

이렇게 나눈 후 각각 나누어진 부분을 파일들로 일단 저장해 두었다. 그리고는 악보인식을 하기위한 마지막? 뒷처리는 오선! 을 없애는 것이다.

오선을 없애는 과정은 의외로 간단하게 작업을 하였다. 해당 파일을 읽으면서 가로부분의 일정 길이 이상의 검은 줄이 있다면 그 부분을 전부 흰색으로 바꾸는 방식이다. 

바로 이렇게!!!!  그렇다 성공하여버렸다 !! 아 뿌듯해 ㅠㅠㅠㅠㅠㅠㅠ (이거 구현하는데 2일걸린건 함정 ... ) 그래도 처음하는거 치고는 나름 진도가 나가는거 같아서 아주 뿌듯하다 ㅎㅎ .....


이제 남은 부분으로는 각 음표 부분을 인식하고 계이름을 읽는것인데 ..... 음표부분을 인식하는 부분은 검색 결과 opencv에서 탬플릿 매칭을 이용하여 해결할 수 있을거 같았다. ... 하지만 ..... 어렵다 ㅋㅋㅋㅋ.... 몇일동안 좀 공부좀 하고 각 악보를 인식하는 방향으로 진행해보아야겠다. !!


(진행중인 프로젝트에 대한 문제점 및 개선방향 )

 - 해당 코드는 손으로 작성되지 않고 , 나름 깔끔한 악보에서만 인식이 되고 , 만약 악보가 조금 회전되어 찍혀있다면 인식이 잘 안될것이다. (오선 없애는 부분에서 ....)  일단은 깔끔한 악보라도 먼저 작동되는 어플을 만들고 나중에 추가적으로 업데이트 하면서 보안해 가도록 하겠다. 

처음부터 완벽하게 만들어지는 어플이 어디있겠는가!! 만들고 있다는 것이 중요하고 발전하고 있다는 것이 중요하다고 생각한다. ㅎㅎ 


--------------------------------------------------------------------------------------------------------------

어플을 등록하고 난 지금...... 이 과정을 보면 아ㅏㅏㅏㅏㅏㅏ주 쓸모없고 , 아ㅏㅏㅏㅏㅏ주 비효율적이며, 아ㅏㅏㅏㅏㅏㅏ주 허접하며, 아ㅏㅏㅏㅏㅏㅏ주 많은 에러와 인식 불가를 만드는 과정이 아니었을까싶다 ;; ㅋㅋㅋㅋㅋㅋㅋㅋ


opencv를 통한 오선 제거 방법이다. opencv API를 통하여 수평 ,수직 히스토그램 생성하여 , 수평 히스토그램을 통하여 오선을 제거하고 , 수직 히스토그램을 이용하여 오선 제거과정에서 같이 없어진 음표들을 복원하는 과정으로 다시 접근을 해야 할 것이다.  

(코드는 추후에 업데이트 하도록 하겠다. )



Comments