Java 从现有模型创建OpenCV Haar分类器

Java 从现有模型创建OpenCV Haar分类器,java,android,c++,opencv,object-detection,Java,Android,C++,Opencv,Object Detection,我想制作一个可以识别螺钉的应用程序。 每个螺钉尺寸和形状都有一个标准,并且有一些软件提供每个螺钉的360 3d模型(例如Autocad) 我想知道是否有任何方法可以利用现有模型(某种扩展)并从中创建Haar分类器 如果不清楚的话,我不想为每一个模型拍成千上万张照片。我想以某种方式重用现有的模型 感谢Haar分类器对2D图像进行操作,用于训练和识别。它需要一组规范化的正二维图像(带螺旋)和一组规范化的负二维图像(不带螺旋)来训练分类器。因此,如果这是您的问题,则无法使用三维模型直接对其进行训练。当

我想制作一个可以识别螺钉的应用程序。 每个螺钉尺寸和形状都有一个标准,并且有一些软件提供每个螺钉的360 3d模型(例如Autocad)

我想知道是否有任何方法可以利用现有模型(某种扩展)并从中创建
Haar分类器

如果不清楚的话,我不想为每一个模型拍成千上万张照片。我想以某种方式重用现有的模型


感谢

Haar分类器对2D图像进行操作,用于训练和识别。它需要一组规范化的正二维图像(带螺旋)和一组规范化的负二维图像(不带螺旋)来训练分类器。因此,如果这是您的问题,则无法使用三维模型直接对其进行训练。当然,您可以使用3D模型渲染2D图像,但我理解您在问题末尾的评论,这不是您想要做的

此外,根据您的实际任务,Haar分类器不太可能是您选择的方法。一些重要的问题是:你能在图像中分割螺钉吗?图像中可能有几个螺钉吗?这是一项分类任务,还是您知道图像中存在哪种螺钉类型?你需要本地化还是只需要识别?螺钉的可能姿势是否受到限制(或者由于分割,可以事先进行标准化)

注意,Haar分类器用于“学习”具有相似姿势的类的不同实例的外观变化(例如不同的人的或多或少的直立面,即面部检测),并且不用于处理相同对象的完全不同姿势,甚至不在2D中,甚至不在3D中。因此,它只能适用于非常有限的场景

更新: 以下几点提示可以引导您走向正确的方向:

  • 如果可以分割螺钉并想尝试一种简单的方法,请尝试将其视为二维问题(假设螺钉不直立),并根据图像力矩执行标准化

  • 如果您可以分割螺钉,并希望将其视为2D/3D问题(投影到2D图像的3D模型),则可以查看my(现在已过时)中基于3D模型生成的视图的高效外观匹配

  • 如果无法分割螺钉,并且知道图像中存在哪种类型的螺钉,则可以从工业机器视觉库中查看所谓的几何模式匹配,例如Halcon的基于形状的匹配。它还提供类似CAD数据的培训

  • 如果无法分割螺钉,并且不知道图像中存在哪种类型的螺钉,则可以为分类任务训练一个深度卷积神经网络,然后使用3。用于验证和本地化


  • 简而言之:我认为这是不可能的,除非您能够根据各种照明条件真实地渲染3D模型

    Haar和LBP分类器确实使用了某种纹理信息,因此仅仅使用形状信息是不够的。(因此,与哈尔相比,霍格可能更适合这种方法,也可能不适合)

    对于haar分类器训练,您可以使用不同的材质和照明条件以及各种姿势渲染3D模型。但是,您需要背景图像作为负片样本和渲染螺钉的背景(但您也可以随后使用opencv_createsamples工具将螺钉合并到背景中)

    因此,根据您渲染尖叫声的真实性或适当性,您可以将其用于培训。请记住,实际上,两个相同类型的螺钉看起来不完全相同,长度可能会有所不同(取决于生产质量),可能存在变形或“噪音”,比如毛刺可能与完美模型不同,也许您在渲染时必须考虑这一点。 此外,请记住,如果haar和lbp级联分类器仅从一个姿势(如正面或侧面,而不是同时从两个姿势)覆盖一个类别,则它们的工作效果最好,这减少了单体3D模型的使用


    有时,3D模型可以与倒角匹配结合使用,以将其与2D模型进行比较。

    您是否偶然遇到过这样的“数据库”?还是你自己做的?