Back
Featured image of post 如何把歪七扭八的五線譜變得超漂亮? | NiceSoft 好軟

如何把歪七扭八的五線譜變得超漂亮? | NiceSoft 好軟

想用手機把樂譜拍下來,但是書本壓不平,拍起來歪七扭八嗎?這篇文章要來拯救你了!

      

如果你是彈鋼琴的人,可能會有過這樣的經驗⋯⋯

你有一天聽到朋友在彈他新買的鋼琴譜,你覺得很好聽,你就訊息朋友說:「欸你上次彈的那首曲子好好聽喔!可不可以把譜拍給我?」

然後你朋友就說:「喔好阿」,接著就傳了類似下圖這樣的照片給你。

幫你拍就不錯了,歪歪的就不要計較了吧
幫你拍就不錯了,歪歪的就不要計較了吧

這時候雖然你心裡在想:「更,這個是在拍什麼鳥,不會把譜壓平再拍喔?」但是你還是很有禮貌地跟朋友說謝謝,然後你接下來就只好用這張歪七扭八的圖來練琴了。

在這邊跟你說一個好消息,那就是你不需要再忍受這種醜陋的譜了!今天好和弦就要教你,如何把這樣的圖,變成乾淨漂亮、又白又直的五線譜。


安裝 Smude

Smude」是一個可以用機器學習技術來把五線譜弄白、弄直、弄漂亮的 Python 函式庫。

因為 Smude 不是一個正式推出、設計給一般消費者的軟體,所以它的安裝稍微比較困難,需要一些終端機操作的能力,但是一旦裝好之後,使用上是很簡單的。

如果你不會用終端機的話,不要擔心,我有做過教學影片,強烈推薦你一定要去看,因為學會用終端機真的會對你的人生有很大的幫助喔!

在影片和這篇文章當中,我都是用 Linux 系統來示範,但如果你是用 macOS 的話,裝法應該差不多;那如果你用 Windows 的話……可以先思考一下到底為什麼要繼續用 Windows。(你值得一個尊重你的作業系統)

Windows 10 的主畫面 XD
Windows 10 的主畫面 XD

Smude 的 Github 頁面上有提到兩種安裝法,一種是用 Conda,另外一種是用 setup.py,我建議你用 Conda 的方式裝,照著以下的說明做就可以了。

首先你要先裝一個叫做 Anaconda 的東西,它是一個讓你更方便使用 Python 的工具組;到 Anaconda 的首頁,下載你的作業系統的安裝程式,基本上就是直接按首頁上的 Download 按鈕就可以了。

我自己是下載終端機版本的安裝程式,所以我就使用終端機來安裝;那如果你是用 Mac 或 Windows 的話,它也有提供圖形化的安裝程式。總之就是照著螢幕上的指示把它裝完就好囉!

用 bash 去執行 Anaconda 的安裝程式
用 bash 去執行 Anaconda 的安裝程式

把 Anaconda 裝好之後,接下來就是照著 Github 頁面上的說明一步一步操作。

# 首先是用 git clone 把 smude 的檔案下載下來
git clone https://github.com/sonovice/smude.git

# 然後進到 smude 資料夾
cd smude 

# 接下來用 conda 建立一個環境(這一步可能會自動下載很多東西,要稍微等一下)
conda env create -f environment.yml

# 最後,啟用這個剛才建立好的環境
conda activate smude

使用

基本上這樣就算是裝好了,但是現在還不能直接用,因為這個 smude 只是一個 Python 函式庫而已,它是要被用在程式裡面的,所以我們要寫一個簡單的 Python 程式來呼叫這個函式庫。說到要寫程式千萬不要害怕,因為我已經幫你弄好了,你只要複製我的程式碼就可以了。

首先,先在剛才的 smude 資料夾裡面,再建兩個資料夾,一個叫 original,一個叫 output;然後把你要處理的圖片檔案(我測試時是用 JPEG 格式),丟到 original 資料夾裡面。

接著,同樣是在 smude 資料夾裡面,用你的文字編輯器,建一個 Python 檔案,你要取什麼檔名都可以,例如說我就把它取名叫 convert.py 好了,然後貼上以下的 Python 程式碼。

from skimage.io import imread, imsave
from smude import Smude
import os

input_path = 'original'
output_path = 'output'
smude = Smude(use_gpu=False, binarize_output=True)

for filename in os.listdir(input_path):
    f = os.path.join(input_path,filename)
    if os.path.isfile(f):
        print(f)
    image = imread(f)
    result = smude.process(image)
    imsave(output_path + '/' + filename + '.png', result)

這段程式碼做的事情是,把 original 資料夾裡面的所有檔案做處理,然後把處理好的檔案丟到 output 資料夾。如果你看得懂 Python 程式碼的話,你也可以修改它,讓它更符合你的需求。

存檔之後,就在終端機說 python3 convert.py 來執行剛才的程式就可以囉!

它第一次執行的時候,會連上網下載一個 300 多 MB 的訓練模型,然後你就等它慢慢處理就好,執行過程它會顯示即將處理的檔案名稱;等它跑完之後,就可以到剛才我們建的 output 資料夾找到處理好的檔案了。

處理好的檔案會自動被放到 output 資料夾
處理好的檔案會自動被放到 output 資料夾

再來欣賞一次 before & after 的對比,讚嘆一下科技的進步。(按下去可以看大圖)

左:原始照片 | 右:經過 Smude 處理過的結果
左:原始照片 | 右:經過 Smude 處理過的結果

它當然還不完美

Smude 目前只是一個測試性的軟體,它還是有很多不完美的地方。例如說我嘗試過兩頁一起拍成一個照片,它就無法辨識了;照片太模糊、太扭曲的話也很容易失敗,它會跳出錯誤訊息說「找不到五線譜」。

作者在官方頁面也有建議,最好是整頁譜都要拍進去,周圍還可以多出來一點點,光線盡量均勻也可以增加辨識的成功率喔!

延伸閱讀

你一定要學會終端機,終端機真的很有用 → 今天就把它學會

說到五線譜,想複習一下五線譜常見的符號嗎? → 到這裡

喜歡這篇文章 + 影片嗎?

你有發現好和弦在所有平台的所有內容都沒有廣告嗎?不覺得這個網站讀起來很舒服,不會一直有討厭的彈出視窗擋住你嗎?因為我覺得讓你好好享受內容,比賺取微薄的廣告費更加重要。

當然,維護這一切也是需要成本的,所以如果你覺得我的作品有幫助到你,也希望你可以藉由購買我的鋼琴即興課程實體書大包裝、加入頻道會員,或至少在社群媒體分享這篇文章,以實際行動來幫助好和弦的持續運作。謝謝你!

喜歡這篇文章嗎?幫我分享到 →