我正在寻找一种使用directshow从我的网络摄像头捕捉图像的方法,最好我想尽可能使用高清分辨率,并避免CPU峰值在60-100%。
有人可以向我指出如何做到这一点的正确方向吗?
我尝试使用DSPack,但这个组件使我的CPU峰值达到90-100%
如果有人在这里知道如何使用DSPack消耗更少的CPU,我也会对此感到高兴:)
答案 0 :(得分:2)
我有一个使用Mitov的VideoLibrary的实时视频应用程序。它是一组精心设计,线程化的对象,并利用了所有可用的CPU核心。
当我带着一些新的需求去他的图书馆时,我常常惊喜地看到他的预期。支持也很好。
这不便宜:450美元,但根据我的需要,值得每一分钱。它可以免费用于非商业用途:http://www.mitov.com/html/videolab.html。
他的CaptureBitMap演示将连续帧捕获到位图。您只需在表单上删除几个组件,然后编写六行代码!该库有很多钩子比这个简单的例子更进一步。 (在Win 7,Delphi 2010中,演示安装在这里:C:\ Program Files(x86)\ Embarcadero \ RAD Studio \ 7.0 \ LabPacks \ Demos \ Delphi2010 \ VideoLab \ CaptureBitmap。但是,我知道他的支持可以追溯到德尔福7。)
区分他的库的一个方面是它使用了英特尔IPP库:http://software.intel.com/en-us/articles/intel-ipp。在英特尔芯片组上运行时,如果您选择发布英特尔DLL,您将获得英特尔工程师可以从芯片中挤出的最佳性能。如果Mitov的IPP图书馆无法足够快地处理您的视频,那么任何视频库都可以让我感到惊讶。
Mitov在Delphi社区中有一定的地位:他是CodeRage的多线程发言人:http://www.embarcadero.com/coderage5/sessions(周四会议。)
以上可能听起来我对他的公司来说是一个先例。除了非常高兴的被许可人之外,我没有任何关系。我很高兴(并松了一口气)我找到了他的工具并决定使用它们。
答案 1 :(得分:2)
我在汽车内置的廉价机器上使用了dspack很长一段时间。它们具有缓慢的 ~700mhz VIA处理器(单核)和256MB RAM。
应用程序从车顶上的摄像头捕获每秒12张图像,每当有新的GPS位置(每秒一次)进入时,它会为图像添加坐标,并且将它作为.jpg存储在硬盘上。
当应用程序捕获图像并在不创建.jpg图像的情况下在表单上显示图像时,应用程序需要 5%处理器时间(!)。
如果使用DsPack获得90%的CPU时间,可能是因为对图像进行了额外的处理。
我在研究中尝试了各种各样的库来创建这个程序,而dspack在很多方面都是明显的赢家。我不会太早放弃它。