인식 과정 3 - 객체 인식
객체에 대한 인식 과정은 앞서 말했듯 완전 주먹구구식으로
객체가 가진 구조적 특징을 하나 하나 분석해 알고리즘을 짜 맞추었습니다.
예를 들면, 4분음표는 하나의 기둥을 가지고 있고 머리가 검은색으로 채워져 있다는 특징이 있습니다.
객체에서 기둥, 머리, 꼬리, 점에 해당하는 요소를 탐색한 후
4가지 요소를 조합하면 모든 음표를 구분할 수 있습니다.
기둥 | 머리 | 꼬리 | 점 | |
온음표 | X | X | X | X |
점온음표 | X | X | X | O |
2분음표 | O | X | X | X |
점2분음표 | O | X | X | O |
4분음표 | O | O | X | X |
점4분음표 | O | O | X | O |
8분음표 | O | O | 1 | X |
점8분음표 | O | O | 1 | O |
16분음표 | O | O | 2 | X |
점16분음표 | O | O | 2 | O |
해당 객체가 무슨 음표인지 구분하는 것으로 박자에 대한 정보를 알 수 있고,
앞서 구했던 오선 좌표에 따라 음표 머리의 y 좌표를 대입해 음의 높낮이를 구분할 수 있습니다.
쉼표는 따로 음의 높낮이가 없기 때문에, 모양만 알면 되는데
쉼표는 항상 오선 영역의 중앙 쪽에 위치해 있다는 점을 이용해 크기만으로도 어느 정도 구분이 가능합니다.
마치며
현재 해당 프로젝트를 진행했을 때 짰던 코드들은 매우 복잡하고 난해합니다.
인공지능이나 알고리즘에 관한 공부가 전혀 없이 주먹구구식으로 코딩을 했기 때문에,
제대로 정리돼있다는 느낌보다는 코드리뷰를 하기도 어려울 정도로 비효율적입니다.
수개월을 진행하여 결국 원하는 결과를 도출해내기는 했지만
앞서 설명해 드린 이유로 이른 시일 내에 해당 프로젝트를 새로 진행해볼 생각입니다.
완성된 프로젝트의 구조는 악보 인식을 클라이언트에서 진행한 후 서버로 송신하면
데이터를 받은 서버가 데이터를 토대로 음악 파일을 만들어 클라이언트로 다시 전송하는 형태입니다.
이렇게 진행해본 결과 NDK 및 jni를 사용하는 것이 속도는 빠를 수 있으나
자바 클래스와 함수 간 데이터를 주고받는 것도 복잡하고 유지보수도 어려워
클라이언트에서는 악보 이미지 자체를 파이썬 서버로 송신하고
서버에서 악보 인식 후 음악 파일까지 생성해 다시 클라이언트로 전송하는 방법을 고려 중입니다.
https://github.com/gurutts/capstone-design
해당 프로젝트에 대한 코드는 위 github 저장소에 모드 업로드 돼 있습니다.
코드가 복잡해 자세히 포스팅하지는 못했지만, 궁금한 점은 언제든지 댓글로 달아주시면
성심성의껏 답변드리겠습니다!
'인공지능 > 컴퓨터비전' 카테고리의 다른 글
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 2 (0) | 2021.08.04 |
---|---|
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 1 (0) | 2021.08.04 |
[OpenCV/악보인식] 광학 음악 인식 기반 자동 편곡 시스템 - 4 (0) | 2021.05.27 |
[OpenCV/악보인식] 광학 음악 인식 기반 자동 편곡 시스템 - 3 (0) | 2021.05.24 |
[OpenCV/악보인식] 광학 음악 인식 기반 자동 편곡 시스템 - 2 (0) | 2021.05.21 |
댓글