webrtc捕獲多個同一類攝像頭

2021-10-13 05:54:46 字數 1546 閱讀 5869

如果有多個同款攝像頭,先檢視攝像頭資訊,getdevicename得到攝像頭name,id,然後為每個攝像頭建立乙個捕獲物件capturer = factory.create(cricket::device(sname, sid)); 但是這裡建立capturer時,用的是name區別每個攝像頭,因此會導致name相同的攝像頭無法區分開來

std::unique_ptrinfo(webrtc::videocapturefactory::createdeviceinfo());

int cameranum = info->numberofdevices();

for (int i = 0; i < cameranum; ++i) ;

char sid[ksize] = ;

if (info->getdevicename(0, sname, ksize, sid, ksize) != -1)

}

檢視webrtc原始碼,建立capturer,media/engine/webrtcvideocapture***ctory.cc中的create函式

std::unique_ptrwebrtcvideodevicecapture***ctory::create(

const device& device)

return std::move(capturer);

#else

return std::unique_ptr();

#endif

}

從上面可以看出建立了乙個webrtcvideocapturer例項以後再將它初始化,初始化方法在media/engine/webrtcvideocapturer.cc中

bool webrtcvideocapturer::init(const device& device) 

webrtc::videocapturemodule::deviceinfo* info = factory_->createdeviceinfo();

if (!info)

//這裡提到了原始碼用的是name來匹配攝像頭

// find the desired camera, by name.

// in the future, comparing ids will be more robust.

// todo(juberti): figure what's needed to allow this.

int num_cams = info->numberofdevices();

char vcm_id[256] = "";

bool found = false;

for (int index = 0; index < num_cams; ++index)

}} ...

}

如上面修改了init方法後重新編譯原始碼,使修改生效

$ ninja -c ../debug
修改完以後,就可以使用name和id一起來當作攝像頭的標識了,也就解決了區分多個同類攝像頭問題。

labelme對同一型別的多個目標的識別問題

在使用labelme標記完影象後,我們可以使用labelme自帶的一套轉換工具 labelme json to dataset.exe 將每個對應的json檔案轉化為乙個字尾為 json的資料夾。資料夾內容如下 其中最重要的是名為label.png的16位,包含了具體哪乙個畫素作為mask的重要資訊...

Python同一類中的方法呼叫問題

classa defa add b self a 10 b 20 self.s a b self.s1 a b return self.s,self.s1 defc add ab self c 30 s c self.s s2 c self.s1 print s print s2 t a t.a a...

Spring如何獲取同一類的被注入到工廠中的例項

1.同一類的bean實現同乙個介面 如果有共性的方法,可以抽取出來,寫到實現類中,實現類實現介面,同一類的bean繼承該實現類,根據實際業務情況來 2.根據需要編寫介面的實現類 3.編寫context 4.注入介面就可以得到所有的實現類啦 5.備註 如果想得到具體哪乙個實現類,就需要有乙個標識,那麼...