Сергей
Лебедев,
07.02.2004 (3-я ред.)
УМНЫЙ ШАРПАЙ
К проблеме оптического распознавания нотной
графики
В последнее время на страницах интернета и в печати все
чаще мелькает аббревиатура OMR. Она расшифровывается как Optical Music
Recognition (по аналогии с OCR = Optical Character Recognition), или
по-русски — оптическое распознавание музыки. OMR — несомненно
прогрессивная компьютерная технология, призванная облегчить и ускорить
процедуру первоначального ввода нот с печатного оригинала.
Попытки распознавания нот предпринимались с 80-х годов XX
века, однако, до последнего времени результаты распознавания были настолько
неудовлетворительными (отчасти, в связи с использованием MIDI как формата
обмена данными), что во всех публичных и частных выступлениях по вопросам
Finale я без малейшего сомнения отдавал предпочтение "ручному" набору
через Спиди.
Появление программы
SharpEye (в буквальном
переводе с англ. — "острый глаз") английского математика Грэма Джонса
(Graham Jones)
1, которую
продает компания
Recordare 2, вкупе с
форматом обмена Music XML, который разрабатывает и продвигает все та же
компания Recordare, позволяет, наконец, говорить об OMR серьезно.
Ниже я описываю метод ввода нот с использованием OMR,
который при некоторых предпосылках может дать существенный выигрыш в скорости
первоначального набора, а главное — элиминирует изрядно надоевшую рутину
ручного набора. Перечислю эти "некоторые предпосылки":
- Вам предстоит набирать ноты с печатного оригинала высокого или среднего
качества: штамповка ok (но не "старорежимная" советская; лучше всего —
качественная западная штамповка), твердая копия "чужого" компьютерного
набора еще лучше.
- Ноты не содержат большого числа ритмически и графически сложных
элементов нотации (авангардная музыка XXI века и мензуральная нотация XIV
века отпадают). "Сладкая булочка" для OMR — академическая музыка от
эпохи барокко до "среднепозднего" романтизма, танцевальная, вообще всякая
инструментальная легкая музыка.
Трудности возникают с распознаванием (и
интерпретацией в Finale):
а) вязок через тактовую черту;
б) тремоло;
в) нот-перебежчиков 3.
Если оригинал, который вы запланировали для
сканирования и последующего распознавания, содержит много графики
подобного рода, не советую использовать OMR
вообще. |
- Ваши ноты — не вокальная музыка на русском языке. SharpEye
прекрасно распознает текст на европейских языках и на латыни, но не знает
русского.
- Печатный оригинал "чист", т.е. не испещрен карандашными пометами
педагога и шариковой ручкой нерадивого студента. (Можно, конечно, сначала
удалить "грязь" в Фотошопе, но хорошенько подумайте: может статься, что
ретушь испорченного фрагмента в Фотошопе займет больше времени, чем набор
его же в любом нотном редакторе).
Софты.
Использовались программы: Adobe PhotoShop 7.0, SharpEye
(далее — Шарпай) версии 2.33, Finale (далее — φ)
версии 2003a, плагин Dolet (Долет) версии 1.1 компании
Recordare. Разумеется, все указанные программы — for Windows
only.
Печатные ноты.
Использовались ноты Henle Verlag, Breitkopf und Härtel, изд-ва "Музыка",
изд-ва "Квадривий" и др.
Результаты моих
тестов, использовавших технологический маршрут SharpEye→Music
XML→Finale, даны
в
конце этой публикации.
***
Подготовка скана (картинки) для Шарпая
- Выбирайте разрешение сканирования 300 dpi. Несколько большее разрешение
(400 dpi) стоит выбрать, только если вы работаете с карманной партитурой или
т.п. Устанавливать разрешение больше четырехсот dpi не имеет смысла. Кладите
оригинал на стекло сканера по возможности ровнее, перпендикулярно лампе.
- Сканируйте картинку как монохромный битмап (black & white). Если
есть лишнее время, можно отсканировать сначала как Greyscale, усилить
резкость путем уменьшения количество уровней серого (в Фотошопе:
Image→Adjust→Levels (Ctrl+L), потом все-таки конвертировать в Bitmap
(LineArt, 1 bpp). Белые поля, цифры страницы и всё прочее, что не
понадобится распознавать, можно смело обрезать ("кропировать"). Сохраняйте
результат сканирования в формате TIFF (можно BMP). При
сохранении в TIFF не используйте LZW-компрессию, Шарпай ее не
понимает 4.
Шарпай. Глобальная настройка
Прежде чем настраивать Шарпай, хорошенько посмотрите свой
оригинал на предмет
- наличия голосов/подголосков. Если есть голоса/подголоски, ставим флажок
на опции Options→Rhythm analysis options→Relaxed, no overlong measures;
- текстовых элементов партитуры. Если нет поднотного текста ("лирики"),
сбрасываем флажок Options→Text recognitions options→Read lyrics и ставим
флажок Read other text, для распознавания текстовых обозначений в партитуре;
- форшлагов и прочих мелких нот. Если таковые имеются, обязательно ставим
флажок на опции Options→Music recognitions options→Grace notes (по дефолту
Шарпай не распознает форшлаги);
Пора открывать наш оригинальный скан (только через меню;
горячей клавиши для этой операции не предусмотрено). Графический образ нотной
страницы появляется в отдельном окне.
Шарпай. Редактируем результат распознавания
- Читаем скан (жмите синюю кнопку ).
Программе нужно некоторое время, чтобы проинтерпретировать графические
данные. Подождите немного, пока... произойдет чудо и ноты — теперь уже в
форме логически структурированного, музыкально осмысленного текста —
появятся во втором окне Шарпая.
Настройте положение окна источника (ваш
первоначальный скан) и окна результата распознавания так, как вам
удобно. После чего я советую сходить в Options→Save window positions,—
умный Шарпай запомнит "ваше" положение окон и отныне будет применять
его для каждой новой рабочей сессии. |
Теперь результат распознавания можно немного поредактировать.
Генеральная рекомендация: не увлекайтесь редактированием в Шарпае сверх
меры! Макияж делать в φ и быстрее и удобнее. Основное редакторское
действие — пройтись по ошибкам ритмического анализатора
(горячей клавиши нет, придется через меню: Edit music→Goto next rythmic warning,
либо щелкать мышью на иконку ). "Сомнительные", т.е. неуверенно распознанные
с точки зрения ритма (что чаще и важнее) либо графики элементы нотации
Шарпай выделяет серым цветом, а в конце такта,
в котором Шарпай обнаружил ошибку, появляется синий треугольник.
Он-то нам и нужен.
Для устранения ритмической ошибки в ноте/паузе часто помогает введение
"серой" графемы заново:
а) выделите ее левой клавишей мыши ô;
б) сотрите ее [Del];
в) нажмите правую клавишу мыши õ в любом месте партитуры.
Появляется графическая палитра длительностей (ГПД);
г) выберите ô нужную длительность из ГПД;
д) посадите через (внимание!) õ избранную длительность
на нужную высоту нотоносца;
е) для выхода из режима редактирования щелкните ô на любой графический элемент партитуры, затем ô еще раз — на любое
"неграфическое" (белое) место партитуры.
Внимание! В Шарпае однократное Undo, так что не надо щелкать беспорядочно
правой клавишей мышки по партитуре, жать [Esc] или Ctrl-Z. Все это не поможет.
Если вы ошиблись, откатывайтесь назад немедленно и через меню:
Edit Music→Undo. |
Причину "засеривания" отдельных графем иногда установить не удается и, соответственно,
не удается убрать сообщение об ошибке (тот самый синий треугольник, о котором только
что шла речь). Такие серые графемы потеряются при экспорте в XML!
Рассмотрим некоторые типичные ошибки распознавания.
- Типичная ситуация 1. Ошибки в
трактовке триолеобразных фигур (Tuplets). Исправляем так: выделяем группу
нот.
В Шарпае ноты объединяются в выборку "+1
нота" при удерживании [Ctrl]). Группу соседних нот удобно выделить,
удерживая [Shift] и делая "диагональную обводку" нужных нот (наподобие
того как вы выделяете нотный текст в
φ). |
Щелкаем кружок ,
если Шарпай распознал триоль, но ритмически сделал это неправильно. Если
Шарпай вообще не понял триоль, то сразу прописываем ее в окошко по схеме N:T, где N — количество
длительностей X, которое должно пройти за время T,
измеряемое как "правильная" сумма длительностей X. Например, Шарпай
увидел шесть шестнадцатых, но не понял, что это секстоль. Пишем 6:4
и получаем искомую секстоль.
- Типичная ситуация 2. Шарпай
не распознал обозначение размера. Техника такая: вставляем сначала
(дефолтовую) сигнатуру 4/4, тут же выбираем ô нововставленное обозначение 4/4 и меняем его на нужное
(прописываем руками в окошке метра: ).
Чтобы вставить в результат распознавания
новый символ, шелкайте õ в любом месте на
нотоносце (открывается графическая палитра нотных символов); далее,
щелкнув ô, выбирайте нужный символ из
графической палитры Шарпая; снова щелкайте õ, но теперь уже в нужное место
партитуры. |
В нашем случае второй щелчок õ произойдет в начале первого нотоносца первой системы.
В принципе, можно не ставить обозначение
размера в начале первой системы, если вы распознаёте вторую и
дальнейшую страницы многостраничной партитуры. Тогда при импорте XML φ
использует свой анализатор для определения регулярного метра. Если
будут проблемы с правильной интерпретацией метра, time signature в
Шарпае следут эксплицитно ставить, все равно φ скроет обозначение
размера. |
- Типичная ситуация 3. Шарпай
не распознал ключевое обозначение. После выделения сигнатуры выбираем из
графической палитры нужную сигнатуру (см. предыдущий пункт).
Если вы выставили ключевое обозначение на
одном нотоносце (например,
верхнем), это ключевое обозначение Шарпай может одним махом
распространить на все
нотоносцы системы. Для этого Edit Music→Copy key sig to→All staves
from here on. Копия исходного ключевого обозначения появляется на
каждом нотоносце, по всей "вертикали". |
- Типичная ситуация 4. Шарпай
распознал мелкие ноты (Ossia и проч.) как длинный форшлаг. Советую
переделать мелкие ноты в крупные (потом в φ можно будет сделать одним махом
Resize Notes), иначе при импорте XML Dolet зачитает их все-таки как
форшлаг и вам придется "руками" перебивать ритмический
рисунок.
Примечание для знатоков-нотоводов. Изначально Шарпай не
группирует нотоносцы, предпочитая анализировать ритм "по горизонтали", в
каждом обособленном нотоносце. Казалось бы, очевидно, что проверять надо не
только горизонтальный, но и вертикальный ритмический ранжир. Но... не
торопитесь объединять нотоносцы в группы. Нотированная музыка состоит сплошь
из нештатных ритмических ситуаций, помноженных на "человеческий фактор"
(набор вашего оригинала делал все-таки человек). Добавьте к этому
ритмические сомнения самого Шарпая (как умный софт, Шарп имеет право
сомневаться — в контексте "живой" музыки это очень даже хорошо). В
этих условиях объединение нотоносцев в группы приведет только к размножению
ритмических ошибок распознавания, причем источник проблемы (конкретный
нотоносец) установить при редактировании становится гораздо труднее! Именно
поэтому в текущей версии своего детища Грэм Джонс ограничил число
вертикально верифицируемых нотоносцев двумя, и только двумя.
Объединяйте нотоносцы в группы только после
того, как закончите с фиксацией ритмических ошибок распознавания на
каждом отдельном нотоносце. Чтобы объединить пару соседних нотоносцев
в группу, надо щелкнуть на черном прямоугольнике слева (отмена —
повторный щелчок на этом прямоугольнике): |
индикация раздельной трактовки нотоносцев:
|
индикация трактовки нотоносцев как группы:
|
- После редактуры советую проиграть полученный результат через MIDI, прямо
не выходя из Шарпая. Можете выловить еще пару-тройку ошибок (если есть слух,
конечно).
А. Чтобы играть партитуру не
с начала, а с произвольного такта в середине партитуры, выделите любую
графему в этом такте, после чего жмите на кнопку Play: . Умный Шарпай заиграет именно отсюда. Б.
Не удивляйтесь, что форшлаги не играют. Если они есть на дисплее и не
"засерены", они будут экспортированы в XML совершенно
нормально. |
- Периодически сохраняйте результат работы в родном формате Шарпая
(*.MRO), нажимая на кнопку , а по окончании редактирования — в
формате XML: .
Что надо делать в Finale
- Открываем новый файл (любой
шаблон, лишь бы файл был открыт "с нуля").
- Используем плагин Долет 5 фирмы
Recordare (Plug-Ins→Music XML Import). Появляется следующее
окно:
Вверху окна отчетливо
читается: Dolet Light Music XML Importer. Естественно возникает
вопрос: а может, стоит где-то как-то заполучить Dolet без слова Light?
Отвечу: в общем, не стоит суетиться. "Полный" Долет обеспечивает
поддержку некоторых других форматов, а также встраивается в φ2001 и φ2002.
Фирма утверждает, что в версии Долет 1.1 пофиксены некоторые баги
версии 1.0.1 (которая идет в комплекте с φ2003). Впрочем, как показывают
эксперименты, эти фиксы не привносят драматических изменений в качество
импорта. Зато вместо "вечной" версии Долета вы получите Evaluation
copy, сроком на 30 дней (дефолтовый Light-плагин, впрочем, полный
Долет не затирает, и на том спасибо) 6.
- Сaveat 1. Если импортированный нотный текст потереть через
Трактор и снова запускать плагин на (якобы) "чистый" файл,
φ зависнет наглухо.
Этот баг пофиксен в полной версии Долета.
Иными словами, повторный импорт на "использованные ранее" (но
зачищенные через Трактор) нотоносцы не приведет к
зависанию φ. |
- Caveat 2. Нельзя добавить к уже существующему MUS-файлу новый кусок
(положим, в многостраничной партитуре). Выхода два:
а) создаем в φ новый
файл А. Импортируем в него результат распознавания первой страницы
оригинала. Теперь создаем новый файл Б. Импортируем в него результат
распознавания второй страницы оригинала. Копируем все содержимое файла Б в
буфер (через Трактор) и вставляем это содержимое в файл А.
При таком методе в φ слетит вся верстальная разметка нотоносцев (layout),
которую хранит для нас XML;
б) создаем многостраничный MRO-файл
заранее — уже в Шарпае. Как результат, имеем многостраничный XML на
выходе.
Сделать это просто:
– распознавайте и редактируйте каждую
страницу по отдельности (не советую пользоваться батч-режимом распознавания,
т.к. при этом ради скорости игнорируются некоторые настроечные опции).
Сохраняйте каждую страницу как файл с родным расширением *.mro. После
окончания редактирования:;
– откройте первый по порядку файл:
File→Open music;
– откройте второй по порядку файл (той же
командой). Тут возникает окно:
Жмите на кнопку Append и второй файл Шарпай
умно присоединит к концу первого файла, и так далее.
Если вы распознаëте партитуру, весьма вероятно, что
количество нотоносцев будет меняться от системы к системе (на жаргоне «финалистов»
такие неполные по составу инструментов системы именуются «оптимизированными»).
На таких оптимизированных страницах Шарпай после Append'а, не говоря ни слова, снизу
дописывает пустые нотоносцы (placeholders), единственное назначение которых — обеспечивать
«равнострочность» каждой из страниц. Иными словами, на каждой странице партитуры
по мысли Шарпая (да и вообще всех современных нотных редакторов) должны так или иначе наличествовать
все инструменты, хотя бы некоторые из них в текущий момент и помалкивали.
|
Естественным следствием такого «равнострочного» подхода может
стать неправильная стыковка инструментальных голосов — в MRO-файле, Скажем, на втором
нотоносце на странице №1 записывался гобой, а на странице №2 он замолкает. На втором нотоносце
на странице №2 записана вторая скрипка. Шарпай не занимается музыкальным толкованием партитуры
и стыкует второй нотоносец со вторым. Таким образом, партия гобоя плавно (а главное, совершенно
неправильно) перетекает в партию второй скрипки. Для обеспечения правильной
(музыкально-логической) стыковки нотоносцев используйте зеленые стрелки, которые находятся на
границе предыдущей и последующей страниц партитуры (тяните мышью за головку стрелки вниз или
вверх). |
Не увлекайтесь идеей заложить в MRO-файл грандиозную партитуру целиком (мыслимый максимум, на мой взгляд, ограничивается 50 страницами). Хотя Шарпай и позволяет компоновать такой файл, настроечные работы по правильной стыковке нотоносцев значительно превзойдут все возможные пределы разумного. Всякий раз после очередного редактирования стыковки вам придется вновь экспортировать XML, а затем импортировать его в нотаторе (напр., Finale), чт о при большом количестве партитурных страниц становится весьма утомительным.
|
Тесты распознавания нотной графики (для
продвинутых)
Тест 1. Бетховен.
Соната №14 для фортепиано, ч.II. (Уртекст по Könemann Verlag, Budapest;
отличная штамповка).
Оригинал |
|
Результат распознавания |
|
Пример безукоризненного
распознавания. С затактом разобрались и Шарпай и φ (пример "финальной"
интерпретации здесь не приводится, в связи с его безошибочностью). Лиги,
штрихи, внутритактовая смена ключа — все в порядке. Словом, в φ доводить
практически нечего.
Тяжелый случай. "Графически" вязки через тактовую
черту умный Шарпай увидел хорошо. Но это его не спасло — ритмические
проблемы погубили Шарпая. Из-за нестандартных вязок неправильно
проинтерпретировался затакт (ср. удачный вариант в Тесте 1).
Внимательное
рассмотрите средний скриншот. Сосчитайте сначала длительности на верхнем,
затем на нижнем нотоносце второго такта. Количество одно и то же, как будто
все ok. И все же внутренне Шарпай недоумевает, не понимает "странной"
ритмографической логики Бетховена (ужасно "странный" композитор эпохи
нормативного классицизма). Об этом свидетельствует синий проблемный
треугольник на нижнем нотоносце в конце второго такта. Видите? Его-то как раз
мне не удалось элиминировать в редакторе Шарпая, несмотря не все
старания.
Источник проблемы установить сложно — возможно, это
недостаток формата базы данных самого Шарпая, возможно, одновременно это и
неразработанность формата обмена MusicXML. Совсем расстроившись, Шарпай не
распознал даже форшлаг (обычно с ним это не случается). Также потерялось
несколько связующих лиг (ties), что не может быть по причине
плохого скана (штамповка у Хенле всегда отличного качества).
Тремоло — непосильная задача для Шарпая (возможно,
из-за неоднозначности форматов, в которые он экспортирует свой файл). Caveat:
при тесном положении соседних нотоносцев Шарпаю трудно решить, к какому из
нотоносцев принадлежат распознанные ноты. Из приятного: OCR немецкого (и
второго — итальянского) вокального текста для Шарпая не представляет
сложности. Обратите внимание: распознаваемую лирику Шарпай дает шрифтом без
засечек (Arial), распознаваемый прочий текст — шрифтом с засечками. В
нашем примере хорошо видно, что слово Lepor. (место
вступления Лепорелло) распознано как "прочий текст" и дано Таймсом (Times New
Roman). Таким образом удобно предупреждать ошибки привязки текста (как
известно, в φ Lyrics на особом положении) уже на этапе
редактирования внутри Шарпая.
Вся музыкальная строка состоит из нот-перебежчиков.
Шарпай уверенно распознает сами ноты (высоты), но не знает, что с ними делать
дальше. Педаль и снятие педали не распознается — Шарпай содержит
ограниченное число распознаваемых штрихов: staccato, tenuto, акцент.
В OCR-распознавании кириллицы Шарпай потерпел
сокрушительное фиаско
7. Вместо
Как Шарпай зачитал
Kalt (по-немецки "холодный";
действительно, от такого распознавания похолодеешь). Из другого: хорошо видны
ошибки в распознавании ритмов (лишние точки при длительностях) и графики
(потеряна половинная в четвертом такте), которые обусловлены низким качеством
старой советской штамповки.
В приведенных тестах я умышленно стремился показать слабые
места Шарпая, что никоим образом не преуменьшает технологические достижения
Грэма Джонса, создавшего "востроглазую", толковую и недорогую
OMR-программу.
3 Для тех, кто не
читал "Русскую книгу о Finale", напомню: так я называю аккорды, растянутые по
вертикали на два нотоносца и группы нот под одной вязкой, объединяющей два
нотоносца.
[вернуться к основному
тексту]
4 Как сообщил мне
разработчик программы, LZW-компрессия не используется по соображениям
копирайта.
[вернуться
к основному тексту]
5 Правильно по-русски
передавать "Дол
е" (с ударением на последний слог), по имени
знаменитого французского переводчика XVI века, но склонять такое слово
по-русски неудобно. Поэтому предлагается "Д
олет" (да еще с
ударением на первый слог, иначе "дол
ета" не
разберешься).
[вернуться к основному
тексту]
6 На одной из моих
машин "полный Долет" все-таки затер дефолтовый Dolet Light, при этом и сам...
отказался запускаться. При старте Ф. вылетает системное предупреждение: Music
XML ActiveX initialization error.
[вернуться к основному
тексту]
7 Распознавание кириллицы
под нотами, похоже, вообще больное место OMR-программ. Не справляется с этим,
например, и главный конкурент Шарпая — PhotoScore Pro. Я списался
с автором Шарпая Грэмом Джонсом и получил от него однозначный ответ - слишком мало
просьб на эту тему он получает и не собирается в обозримом будущем тренировать Шарпай
на кириллицу. Уважаемый читатель, не поленись и напиши разработчику Шарпая короткое письмо
с просьбой:
Please implement Cyrillic OCR — право, Шарпай стоит того! Электронный
адрес Грэма Джонса:
support@visiv.co.uk