用数字输出处理C ++单元测试的框架/工具

时间:2011-01-05 02:51:06

标签: c++ unit-testing testing computer-vision

我正在开发一个C ++应用程序,它使用计算机视觉技术来识别一系列图像中的各种类型的对象。 (1000+)图像已经手工分类,因此我们为每个图像都有一个XML文件,其中包含对象实际位于图像中的位置的描述。

我想知道是否有一个测试框架可以理解/绘制数字测试的结果,在这种情况下,对程序的图像分类中的错误进行一些测量,而不仅仅是通过/失败样式单元测试

我们希望使用类似CDash / CTest的东西来运行这些自动化测试,并随着时间的推移查看视觉算法的改进如何使图像更准确地分类。

有没有人知道可以做到这一点的工具/框架?

2 个答案:

答案 0 :(得分:6)

我认为您应该区分单元测试和算法性能(=准确度和/或速度)评估。您应该同时应用这两种方法。

单元测试应该告诉您代码是否符合预期。不确定是否/如何对从原始图像到提取对象的整个链进行单元测试,但是您应该能够单独测试单元中的“单元”(模块/方法/类)以完成工作。单元测试应该给你“失败”或“通过”。如果速度优化改变了代码的行为,单元测试应该告诉你。对于单元测试,有很多可用的框架(我喜欢Google Test,但还有很多其他框架。)

您的问题似乎更多地针对第二部分:评估算法的质量。我个人喜欢TeamCity,它主要用作Java / .net Continuous Integration Server,但您也可以轻松地将它与C ++一起使用。我在我们的商店中写了几行代码,以TeamCity格式输出Google Test结果,并使用他们的service API。每次有人签入新版本时,TeamCity都会执行构建(可以是Visual Studio解决方案,Ant,命令行脚本或其他。)通过一个漂亮的web ui,所有团队成员都可以看到结果。此外,您可以举报custom build statistics。这可以用于算法的性能测试等任何事情。您只需输出类似

的行
##teamcity[buildStatisticValue key='detectedObjectsPercent' value='88.3']

在您的应用程序的控制台上(必须配置为在每个版本中运行),TeamCity将存储这些值并在Web用户界面上提供一个漂亮的图形(随时间变化的值)。

不要忘记按照here所述设置自定义图表。

我认为TeamCity的设置非常简单,所以试一试吧!如果我单独从事一个项目,我甚至会喜欢它!

答案 1 :(得分:2)

您所描述的是典型的计算机视觉/图像处理测试应用程序框架。虽然我多年来已经设计并使用了几个这样的系统,但它们都是专有的。

这种通用测试工具应具有可变公差,I / II类型错误和错误率的不同测量,总摘要以及问题的逐案识别。它还应该为不同的用户提供不同的视图 - 例如,在调试时,程序员需要的数据与发布/项目管理器不同。
数据库驱动的后端和自动化测试套件增强了统计图也很棒!

不幸的是,我不知道有任何这样的测试框架 我一直想着为这样一个系统启动一个开源项目,但是时间和资源很少,而且我从来不确定这个系统的实际可取性(虽然我很确定它可以是通用的目的是满足许多应用的需求 我很想知道这个系统是否真的有兴趣,它可能让这个项目的轮子移动...... 我想你现在必须编写自己的代码。