Я работаю над приложением, которое использует Vuforia SDK
для обнаружения целей изображения. Мне также нужно реализовать распознавание текста, что я надеялся сделать с помощью CoreML
. Приложение представляет собой сочетание кода Swift
и Objective-C
. Первое, что мне нужно сделать, - это получить кадр камеры из сеанса Vuforia
. Я хотел бы иметь его как CVPixelBuffer
или UIImage
. Я думаю, что это можно было бы извлечь из этой функции (не уверен, что ты):
- (void)renderFrameVuforia
{
if(!_manager.isCameraStarted) {
return;
}
// Render video background and retrieve tracking state
const Vuforia::State state = Vuforia::TrackerManager::getInstance().getStateUpdater().updateState();
Vuforia::Renderer::getInstance().begin(state);
if(Vuforia::Renderer::getInstance().getVideoBackgroundConfig().mReflection == Vuforia::VIDEO_BACKGROUND_REFLECTION_ON)
glFrontFace(GL_CW); //Front camera
else
glFrontFace(GL_CCW); //Back camera
if(_currentRenderingPrimitives == nullptr)
[self updateRenderingPrimitives];
Vuforia::ViewList& viewList = _currentRenderingPrimitives->getRenderingViews();
// Clear colour and depth buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
// Iterate over the ViewList
for (int viewIdx = 0; viewIdx < viewList.getNumViews(); viewIdx++) {
Vuforia::VIEW vw = viewList.getView(viewIdx);
_currentView = vw;
// Set up the viewport
Vuforia::Vec4I viewport;
// We're writing directly to the screen, so the viewport is relative to the screen
viewport = _currentRenderingPrimitives->getViewport(vw);
// Set viewport for current view
glViewport(viewport.data[0], viewport.data[1], viewport.data[2], viewport.data[3]);
//set scissor
glScissor(viewport.data[0], viewport.data[1], viewport.data[2], viewport.data[3]);
Vuforia::Matrix34F projMatrix = _currentRenderingPrimitives->getProjectionMatrix(vw, state.getCameraCalibration());
Vuforia::Matrix44F rawProjectionMatrixGL = Vuforia::Tool::convertPerspectiveProjection2GLMatrix(
projMatrix,
_nearPlane,
_farPlane);
// Apply the appropriate eye adjustment to the raw projection matrix, and assign to the global variable
Vuforia::Matrix44F eyeAdjustmentGL = Vuforia::Tool::convert2GLMatrix(_currentRenderingPrimitives->getEyeDisplayAdjustmentMatrix(vw));
Vuforia::Matrix44F projectionMatrix;
VuforiaEAGLViewUtils::multiplyMatrix(&rawProjectionMatrixGL.data[0], &eyeAdjustmentGL.data[0], &projectionMatrix.data[0]);
if (_currentView != Vuforia::VIEW_POSTPROCESS) {
[self renderFrameWithState:state projectMatrix:projectionMatrix];
}
glDisable(GL_SCISSOR_TEST);
}
Vuforia::Renderer::getInstance().end();
}
Может кто-нибудь направить меня, как я могу получить CVPixelBuffer
из такой Vuforia
сессии?