그냥 하고 싶어졌다. 밖에 말할 이유가 없는 프로젝트. 평소 가끔 피아노를 치곤 하는데...
대강 이런 부류의 동영상들에서 저 색들을 인식해서 midi 파일로 한번 만들어 보고 싶었다.
그래서 무작정 헤딩.
처음 하는 이미지 프로세싱이기도 하고, 원래는 텐서플로우로 한번 뭘 어떻게 해볼까 생각도 해봤지만, 그냥 이미지 프로세싱 라이브러리를 내가 만들기로 했다. 언어는 C#으로.
일단 오늘의 결과물. 이미지에서 건반 위치 추출.
한장 분석에 3ms면 그리 나쁜 시간은 아니라고 본다. 1초 30프레임이라고 따져도 영상 하나 분석하는데 30초 내외로 끝날 듯?
일단 분석 방법은 다음과 같다. 아직 GUI로 만들지는 않았지만, 뭐 아마도 모든 라이브러리 정리가 끝나게 되면 XAML로 만들게 되겠지만.
먼저 영상에서 피아노 건반부분만 select 해준다.
저 피아노 흑건, 백건이 눌렸을때의 색을 스포이드로 뽑아서 프로그램에서 가져와준다. 그리고 피아노 건반 사이의 저 틈의 색깔도 추출해준다.
그래서 첫번째로 유효성 검사를 해준다. 추출한 틈의 색으로 흰건반의 개수를 알아내는데, 기본적인 88건반의 경우 흰건반이 52개이므로, 저 틈은 51개가 되야하고 그렇지 않으면 이미지 처리에 실패한 것으로 간주한다.
이 유효성 검사가 정상적으로 종료되었을 때 , 피아노 건반부분의 위에서 70%정도 되는 부근에서 백건이 눌렸는지 조사해준다. 여기서 앞에 틈이 몇개 있는지를 통해 현재 건반이 무슨 건반인지 알 수 있다.
흑건의 경우 위에서 30%부근에서 조사를 해준다.
(건반이 눌렸을 때의 색깔과 프로그램이 검사하는 색 차이가 기준치 이하면 눌렸다고 처리)
여기서 문제가 있는데 백건의 경우는 이상 없이 잘 됬지만, 저 색 차이라는 부분때문에 흑건에서는 문제가 발생했다.
설명하자면 복잡하지만, 눈으로 보기에는 비슷해보여도 컴퓨터 처리에서는 상당히 차이가 나는 색이 존재했다.
흑건은 건반이 좁기 때문에 몇픽셀 차이로 앞에 틈이 추가될 수도 있기 때문.
그래서 이에 따른 해결방안으로 2가지를 생각했고
1) 흑건의 처리 방식을 틈이 아닌 앞에 있는 흑건의 개수로 바꾼다
-> 아마도 추가로 프로세싱이 들어가기 때문에 시간은 1.5배정도 늘 것으로 예상
2) RGB 색을 HSV로 변환한뒤 비교
-> HSV에서는 색 비교에 더 많은 선택지가 있는 것으로 알고 있다. 이미지 프로세싱에 최적화(?)
지금은 RGB 색에서 유클리드 거리를 통해서 단순히 색 차이를 구하고 있음.
3) 아에 방법을 바꾸어 지금처럼 가로로 1px 검사가 아닌 피아노 건반 중간 부분만 검사
->제대로 되면 시간도 많이 줄어들 것이다. 그러나 흑건의 경우 건반 폭이 일정하지 않아서
복잡할 것.
아마 1또는 2방식으로 진행하지 않을까 싶다.
'개인 프로젝트 > 악보영상 midi 변환기' 카테고리의 다른 글
[도전 프로젝트] 악보영상으로 midi파일 만들기 #끝 (1) | 2020.06.09 |
---|---|
midi 파일 분석하기 #2 핵심부분만 (0) | 2020.06.09 |
midi 파일의 구조와 분석기 #1 기본적인 청크 구조 (0) | 2020.06.08 |
[도전 프로젝트] 악보 동영상으로 midi 만들기 #3 (0) | 2020.06.07 |
[도전 프로젝트] 악보 동영상으로 midi 만들기 #2 (0) | 2020.06.07 |