如何使用 CPP 加速 DCT 運算

本篇文章來自 想知道網戀對象有沒有修圖嗎?試試看這款修圖偵測機器人! 的續篇,
因為 Python 的方法實在是太慢了,所以我一直在尋求加速的方法。

俗話說得好:
要看一個人怎麼做立委,就要看他怎麼做立委!

不是,我是說有些人可能不適合做立委、適合做總統!

舉個例子:
拿 Python 去做文字處理就很開心,但是拿 C/CPP 去做文字處理你就準備腦血栓;
反之拿 Python 做數學運算也會慢到中風,但是拿 C/CPP 做數學運算就風馳電掣。


所以我用 CPP 實現了需要數學運算的 DCT 方法,
主要是使用 extern "C" 方法來與 Python 對接,在 Python 那邊設定好輸出入的參數。

這邊比較需要注意的是因為我選用的讀圖方式是 OpenCV 的 CPP 函式庫,
所以寫 Makefile 的時候需要注意把 OpenCV 包進來。

在編譯的過程中 Makefile 也會發生抓不到 g++ 的時候
(想好好編譯真難 😇)

總之做了一點 Soft-link 還有 Dirty work 後終於能正確編譯了。


因為我是用"Single Thread"、"Mask" 的方法來實現 DCT 變換的,
所以讓我們來看看與 Python 版 與 CPP 版 比較效果如何:





CPP 版的運算速度比 Python 版快了近六倍,
有夠優質!


相關開源我更新在:
https://github.com/wuyiulin/GraphAppBot

想要測試一下這個服務:
https://t.me/DynamicGraphApp_bot


如果有任何問題歡迎聯絡我:
wuyiulin@gmail.com


留言

這個網誌中的熱門文章

[心得] 破解 Google 雲端下載限制(非建立副本)