본문 바로가기

인공지능18

[OpenCV/Python] 악보 인식(디지털 악보 인식) - 8 8. 인식 과정 - 음표(꼬리) 기둥은 객체 분석 과정에서 검출해낸 것이 있으니 따로 하지 않아도 됩니다. 애초에 직선 성분이 있는 객체만 음표로 가정하여 인식하는 것이기도 하구요. # recognition_modules.py import functions as fs import cv2 def recognize_note(image, staff, stats, stems, direction): (x, y, w, h, area) = stats notes = [] pitches = [] note_condition = ( len(stems) and w >= fs.weighted(10) and # 넓이 조건 h >= fs.weighted(35) and # 높이 조건 area >= fs.weighted(95) # 픽.. 2021. 8. 6.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 7 7. 인식 과정 - 음표(머리) 음표 인식은 악보의 구성요소들 중 가장 인식하기가 어렵습니다. 음표는 머리, 기둥, 꼬리, 점으로 이루어져 있으며 각각의 요소들을 인식 후 조합하여 어떤 음표인지 분류해야 합니다. 물론, 단순히 음표 모양을 템플릿으로 만들어 템플릿매칭을 통해 인식하거나 음표 모양 이미지를 많이 수집하여 딥러닝 시키는 방법 또한 존재합니다. 해당 포스팅에서는 음표의 구조적 특성을 이용하여 인식, 분류하는 알고리즘을 구현해보겠습니다. 먼저, 음표의 구성요소들을 탐색하기 전에, 음표가 될 수 있는 최소조건을 찾아보고, 1차로 걸러내도록 하겠습니다. 그전에 functions.py에 함수 하나를 정의하겠습니다. # functions.py import cv2 import numpy as np def.. 2021. 8. 6.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 6 6. 인식 과정 - 조표 이제 대망의 인식 과정입니다. 먼저 지금 갖고 있는 정보들을 확인해보겠습니다. for i in range(len(objects)): obj = objects[i] line = obj[0] stats = obj[1] stems = obj[2] direction = obj[3] staff = staves[line * 5: (line + 1) * 5] print(line, stats, stems, direction) 하나하나의 객체에는 현재 몇 번 보표에 속해있는지, 객체의 정보(x, y, w, h, area), 직선들의 정보, 음표라고 가정한다면 방향들의 정보가 있습니다. 아래는 첫 번째 음표의 정보인데, 정보를 해석해보겠습니다. 0 (321, 221, 13, 39, 139) [[3.. 2021. 8. 5.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 5 5. 객체 분석 과정 모든 객체를 검출하고 최소 넓이와 높이 조건을 줌으로써 어느 정도 노이즈를 걷어냈습니다. 인식 단계 전 마지막 과정이 남았는데 객체에 직선 성분이 존재하는지 존재한다면 음표로 가정하고 음표의 방향은 어떻게 되는지 등 인식에 쓰일 특징점들을 추출해보는 과정입니다. 먼저 functions.py에 아래 함수를 정의해줍니다. get_line 함수는 아래에 나올 stem_detection 함수뿐만 아니라, 객체를 분류할 때 여러 특징점을 찾아내기 위해 사용됩니다. # functions.py import cv2 import numpy as np VERTICAL = True HORIZONTAL = False def get_line(image, axis, axis_value, start, end,.. 2021. 8. 5.