簡體   English   中英

OpenCV在Java與C ++中的實時性能

[英]Real-time performance of OpenCV in Java vs. C++

我知道這里有很多類似的問題,但我相信我的情況足夠獨特,可以保證自己的帖子。

我正在研究各種各樣的“視覺導體” - 我已經建立了一個程序來跟蹤一個人的手勢並從這些手勢中推斷出節奏(以每分鍾節拍為單位)。 我現在要做的是將測量的速度映射到人員進行時播放的MIDI文件。 基本上,我希望該程序允許某人進行合成片段,其中正在播放的文件的節奏受到指揮家實時手勢的影響。 我用C ++使用OpenCV庫編寫了這個。

這里的事情變得有趣/多毛。 直接修改MIDI文件的速度看起來像是一項艱巨的任務,鑒於我今年夏天剩下的時間有限,我決定去其他地方尋找。 我碰巧在Java API中找到了Sequencer接口,它有一個名為setTempoinBPM的可愛方法。 它完全符合我的需要; 我一直無法讓它在我的C ++代碼中工作。

我已經嘗試創建自己的JVM來在C ++代碼中調用Java方法,但無濟於事。 我也嘗試通過將適當的命令行參數傳遞給system()來調用Java程序,但是在使用這種方法開始回放后我無法改變MIDI文件的速度。

我正在考慮將我的C ++代碼轉換為Java代碼,以便直接調用setTempoinBPM() ,但我一直聽到有關這是否會影響OpenCV性能的矛盾報道。

我想你的意見:OpenCV在Java上的表現是否與其C ++性能相當,將我的項目轉換為Java值得付出努力? (如果您碰巧知道如何輕松改變播放MIDI音軌的速度,請隨時分享。)

也許您可以遵循解析/編譯方法,而不是映射到MIDI文件。

將MIDI視為數據的表示(序列化的數據)。 將數據解析為對您的特定問題有意義的中間表示(IR)(即調整速度)。 試想一下,“我怎樣才能最好地構建內存中的數據,以便輕松操控速度?”

然后,使用一個包這樣 ,你可以解析MIDI文件並解壓的重要組成部分。 該軟件包可能已經有適合您問題的IR。 它看起來肯定有一個序列化方法,可能需要將文件輸回到播放器。 或者,您可以找到一個能夠直接將IR傳遞給的玩家。 如果您選擇已經用於已知播放器的IR(並且仍然適合您的速度操作),那么您在修改后不必考慮序列化IR。

希望有幫助......

我對c ++不是很熟悉,但是通過openFrameworksofxMidi使用了midi。

在幕后它使用rtMidi

快速搜索看起來可能直接從c ++控制速度 (參見bottom of void RtMidiIn :: initialize方法的bottom of void RtMidiIn :: initialize )。 不確定是否有一個很好的干凈的API,因為我沒有那么多使用rtMidi,但可能值得檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM