본문 바로가기

인공지능/컴퓨터비전17

[OpenCV/Python] 악보 인식(디지털 악보 인식) - 12 12. 인식 과정 - 온음표 온음표는 조표, 음표, 쉼표 등 다 걸러지고 남은 객체들에 한하여 인식에 들어가기 때문에, 비교적 조건을 주기가 수월합니다. 진행 방식은 앞전에 썼던 알고리즘들과 별반 다르지 않으니 바로 코드를 적도록 하겠습니다. # modules.py import cv2 import numpy as np import functions as fs import recognition_modules as rs def recognition(image, staves, objects): key = 0 time_signature = False beats = [] # 박자 리스트 pitches = [] # 음이름 리스트 for i in range(1, len(objects) - 1): obj = objec.. 2021. 8. 8.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 11 11. 인식 과정 - 쉼표 쉼표는 쉼표끼리의 공통적인 특성이 없고 직선과 같은 검출하기 쉬운 특징점이 없습니다. 하지만 조표와 음표를 모두 인식 후에 남은 객체들에 한하여 인식 알고리즘을 수행하고 위치가 항상 일정하기 때문에, 크기와 픽셀 개수만으로도 어느 정도 인식이 가능합니다. 음표가 반환되지 않은 객체에 한하여 쉼표 인식 알고리즘을 호출하도록 합시다. # modules.py import cv2 import numpy as np import functions as fs import recognition_modules as rs def recognition(image, staves, objects): key = 0 time_signature = False beats = [] # 박자 리스트 pitche.. 2021. 8. 7.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 10 10. 인식 과정 - 음표(음정) 음표의 모양은 인식이 끝났고, 이제 음정을 알아낼 차례입니다. 음정은 크게 어려울 것이 없는데, 오선의 좌표와 음표 머리의 좌표만 비교해주면 되기 때문입니다. 음표 머리의 좌표는 정방향 음표냐 역방향 음표냐에 따라 달라지지만 기둥의 상단 좌표나 하단 좌표랑 같습니다. # recognition_modules.py import functions as fs import cv2 def recognize_pitch(image, staff, head_center): pitch_lines = [staff[4] + fs.weighted(30) - fs.weighted(5) * i for i in range(21)] for i in range(len(pitch_lines)): line .. 2021. 8. 7.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 9 9. 인식 과정 - 음표(점) 이제 마지막 음표의 구성요소인 점만 인식하면 됩니다. 점은 크게 어려울 것은 없는데 오선의 범위를 넘은 음표를 그릴 때 오선에 대한 보조선(?)을 그어주는 경우가 있습니다. 해당 부분이 점을 탐색하는 구역과 겹칠 수 있어 유의해야 합니다. 그리고 8분음표나 16분음표와 같이 꼬리가 있는 음표들과도 겹칠 수가 있습니다. 그래서 탐색하는 영역을 정교하게 정해주어야 합니다. recognize_note_dot 함수를 만들고 영역부터 확인해보겠습니다. # recognition_modules.py import functions as fs import cv2 def recognize_note_dot(image, stem, direction): (x, y, w, h) = stem if d.. 2021. 8. 6.