物体识别vuforia

时间:2017-07-03 05:48:58

标签: ios objective-c vuforia object-recognition

我正在使用" vuforia"用于iOS中对象识别的SDK。我正在使用vuforia提供的示例代码,并且能够使用" ObjectReco"来识别对象。一部分。

- (void)renderFrameWithState:(const Vuforia::State &)state projectMatrix:(Vuforia::Matrix44F &)projectionMatrix{
[self setFramebuffer];
// Clear colour and depth buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Render video background
[sampleAppRenderer renderVideoBackground];

glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

for (int i = 0; i < state.getNumTrackableResults(); ++i) {
    // Get the trackable
    const Vuforia::TrackableResult* result = state.getTrackableResult(i);
    const Vuforia::Trackable& trackable = result->getTrackable();

    if (! result->isOfType(Vuforia::ObjectTargetResult::getClassType())) {
        continue;
    }

    NSLog(@"@>@ ObjectTarget found!");

    const Vuforia::ObjectTarget& objectTarget = (const Vuforia::ObjectTarget&) trackable;

    Vuforia::Vec3F objectSize = objectTarget.getSize();

    //const Vuforia::Trackable& trackable = result->getTrackable();
    Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose());

    // OpenGL 2
    Vuforia::Matrix44F modelViewProjection;

    SampleApplicationUtils::translatePoseMatrix(objectSize.data[0]/2,
                                                objectSize.data[1]/2,
                                                objectSize.data[2]/2,
                                                &modelViewMatrix.data[0]);
    SampleApplicationUtils::scalePoseMatrix(objectSize.data[0]/2,
                                            objectSize.data[1]/2,
                                            objectSize.data[2]/2,
                                            &modelViewMatrix.data[0]);

    SampleApplicationUtils::multiplyMatrix(&projectionMatrix.data[0], &modelViewMatrix.data[0], &modelViewProjection.data[0]);

    glUseProgram(shaderProgramID);

    glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)cubeVertices);
    glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)cubeNormals);
    glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)cubeTexCoords);

    glEnableVertexAttribArray(vertexHandle);
    glEnableVertexAttribArray(normalHandle);
    glEnableVertexAttribArray(textureCoordHandle);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, augmentationTexture[0].textureID);
    glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]);
    glUniform1i(texSampler2DHandle, 0 /*GL_TEXTURE0*/);

    glDrawElements(GL_TRIANGLES, NUM_CUBE_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)cubeIndices);

    glDisableVertexAttribArray(vertexHandle);
    glDisableVertexAttribArray(normalHandle);
    glDisableVertexAttribArray(textureCoordHandle);

    SampleApplicationUtils::checkGlError("EAGLView renderFrameVuforia");

}

glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glDisable(GL_CULL_FACE);
[self presentFramebuffer];}

我能够在&#34; NSLog(@&#34; @&gt; @ ObjectTarget找到!&#34;);&#34;现在我想用另一个对象(图像)替换这个对象(图像)我该怎么做?

2 个答案:

答案 0 :(得分:0)

请访问Vuforia官方网站。他们有一系列有关如何将预设目标图像更改为您自己的图像的说明。我认为您需要首先将自己的目标图像上传到Vurforia,然后他们会向您显示进入下一步的说明。 希望它有所帮助

答案 1 :(得分:0)

如果我对你有帮助: 在Vuforia中,我们确实通过将新对象置于目标对象的相同层次结构中来进行替换,并且一旦Vuforia识别了目标,它就会出现! 您可以按对象覆盖目标(在编辑器中)。