![](/img/trans.png)
[英]How to display a Video stream from Camera on Raspberry pi with Win iot with some image processing
[英]Will threading affect image processing performance on Raspberry Pi?
我從事有關自動駕駛汽車的項目。 在此項目中,使用C ++中的Opencv 4.0在Raspberry Pi(型號3B)上進行了實時視頻處理。 車輛前部還有距離傳感器,該傳感器與休閑障礙物的距離較遠。 任務是在1米之內有障礙物的情況下停下汽車。
為了實現此任務,我在編程結構中采用了線程。 我將圖像處理設計為主螺紋,並將距離傳感器測量設計為側螺紋。 我擔心的是這種結構是否會影響圖像處理速度。 你有什么主意嗎? 另外我不知道主線程是否使用Raspberry Pi的4個內核? 如果是這樣,是否會在結構拆分核心中引入線程,將其作為3進行圖像處理,將1作為距離傳感器測量?
我對此感到困惑。 可以在下面的代碼段中看到我頭腦中的設計(請注意,主線程無限循環):
int measuredDistance;
int distanceThreshold = 1; // 1 meter
void * sensor_thread(void * threadid) {
// measure distance
// update measuredDistance
}
int main () {
while(1){
// do image processing
if (measuredDistance < distanceThreshold)
stopTheCar();
}
}
首先,您必須要解決一個問題,可以將其分解為多個子問題。 圖像處理就是這樣的問題。 對您有好處,您可以考慮拆分問題。
您的系統一次可以執行多於1個線程的情況-多核,多線程或超線程或任何其他情況。 如果我對您的理解正確,Pi一次最多可以處理4個線程。 很好,您已准備好使用多線程程序。
回答您的問題:主線程是否使用所有4個內核? 基本上沒有,主線程只有一個線程,它在一個內核上運行。 您的測量線程將在另一個內核上運行。
因此,您想將圖像處理分成多個線程。 當您僅將圖像處理放入主線程的一個額外線程中時,您幾乎看不到任何改進。 您必須將圖像分成多個部分,並至少放入兩個線程中。 我建議一種通用方法,在該方法中可以輕松更改線程數,因此您可以嘗試一下最快的設置。
簡而言之,您不能期望我們提供明確的答案。 這取決於您的實現和系統,它還需要做什么以及數據存儲的位置……等等等等……但是,如果您讀了一些好書並明智地選擇了實現方法,圖像處理,我希望性能有所提高。
如果您擅長估算,則可以使用數學方法。 這在LINK中有更詳細的解釋。
並行化公式:
S(n) = 1/( (1-P) + P/n )
這基本上就是說,通過使用n個內核,程序可以看到的加速量取決於程序有多少是串行的(只能在單個CPU內核上運行)以及有多少並行(可以是在多個CPU內核之間拆分)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.