簡體   English   中英

在C ++和Python之間共享視頻數據

[英]Share video data between C++ and Python

我有一個USB相機(uEye),它具有C ++接口,可讓您配置相機的某些功能。 C ++程序可以從相機讀取圖像數據,並將其存儲在預分配的內存中的某個位置。 所有這些都在Windows下運行。

帶有numpy的Python為我提供了一個簡單的環境來處理圖像,並花一些時間在我的處理算法上。

我想做的是:

  1. 使用c ++程序配置相機並獲取圖像(以視頻速率),
  2. 將數據傳遞給Python
  3. 用Python處理數據

我的印象是我不想將C ++嵌入Python或將Python嵌入C ++,因為我更喜歡有兩個獨立的系統(因此,我可以不帶Python的東西使用相機,也可以不帶相機的Python東西使用相機。 )。

到目前為止,我發現可以使用管道,套接字或映射的內存共享某些數據的方法,盡管它似乎僅限於少量數據或字符串。 但是,我找不到的跡象表明這是否足夠快,是我應該嘗試實現的目標。 我應該這樣做嗎?

如果這不是一個好主意,那么有什么更好的選擇? 將Python代碼嵌入C ++還是反之? 還是放棄Python,是因為節省了開發時間並不能抵消使進程間通信正常工作所付出的額外努力?

PyPy博客上最近有一篇關於實時視頻處理的文章。 在示例中,他們使用mplayer捕獲和顯示視頻,這可能比嘗試與C ++程序進行交互(假定它可與您的網絡攝像頭一起使用)更可取。 如果不是這樣,那么按照這些思路考慮,一個簡單的解決方案是僅連接兩個應用程序的stdout / stdin。 查看PyPy進行視頻處理也是一個好主意。

因為您說設備具有“ C ++接口”,所以我假設它提供了一個頭文件+ DLL,您可以通過API鏈接到該文件並控制該設備。 在這種情況下,最快的方法是將該API封裝在Python中(使用Swig或其他C ++-to-Python API工具)。 這僅需幾個過程調用即可提供非常低的開銷,將數據直接作為指向內存的指針傳遞。

如果您不想“嫁給” Python,也可以用C ++編寫一個控制應用程序,但是我認為將API連接到Python的最快,最方便的方法就是上述方法。

暫無
暫無

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

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