SDK de Realidade Aumentada com OpenCV [fechado]

94

Estou desenvolvendo um SDK de Realidade Aumentada em OpenCV. Tive alguns problemas para encontrar tutoriais sobre o tema, quais etapas seguir, possíveis algoritmos, codificação rápida e eficiente para desempenho em tempo real etc.

Até agora, reuni as próximas informações e links úteis.

Instalação OpenCV

Baixe a versão de lançamento mais recente .

Você pode encontrar guias de instalação aqui (plataformas: linux, mac, windows, java, android, iOS).

Documentação online .

Realidade aumentada

Para iniciantes, aqui está um código de realidade aumentada simples em OpenCV. É um bom começo.

Para quem está procurando por um SDK de última geração e bem projetado, encontrei algumas etapas gerais que toda realidade aumentada com base no rastreamento de marcadores deve ter, considerando as funções do OpenCV.

  1. Programa principal: cria todas as classes, inicialização, captura de quadros do vídeo.

  2. Classe AR_Engine: controla as partes de um aplicativo de realidade aumentada. Deve haver 2 estados principais:

    • detecção : tenta detectar o marcador na cena
    • rastreamento : uma vez detectado, usa técnicas computacionais inferiores para traçar o marcador nos próximos quadros.

Além disso, deve haver alguns algoritmos para encontrar a posição e orientação da câmera em cada quadro. Isso é obtido detectando a transformação de homografia entre o marcador detectado na cena e uma imagem 2D do marcador que processamos offline. A explicação desse método aqui (página 18). As principais etapas para as estimativas de pose são:

  1. Carregue os parâmetros intrínsecos da câmera . Anteriormente extraído offline por meio de calibração. parâmetros intrínsecos

  2. Carregue o padrão (marcador) para rastrear: É uma imagem do marcador planar que vamos rastrear. É necessário extrair características e gerar descritores ( pontos-chave ) para este padrão para posteriormente podermos comparar com características da cena. Algoritmos para esta tarefa:

  3. Para cada atualização de quadro, execute um algoritmo de detecção para extrair recursos da cena e gerar descritores. Novamente, temos várias opções.

    • SIFT
    • VELOZES
    • SURF
    • FREAK : Um novo método (2012) supostamente o mais rápido.
    • ESFERA
  4. Encontre correspondências entre o padrão e os descritores de cena.

  5. Encontre a matriz de homografia dessas correspondências. RANSAC pode ser usado antes para localizar inliers / outliers no conjunto de correspondências.

  6. Extraia a pose da câmera da homografia.

Exemplos completos:

Jav_Rock
fonte
1
Infelizmente, isso "não é construtivo", você está procurando sugestões.
bfavaretto
3
Em relação à tarefa de instalação, agora o OpenCV migrou para o GIT, portanto, para baixar o código cource é necessário fazer um "git clone git: //code.opencv.org/opencv.git".
Carlos Cachalote
12
47 votos positivos ainda fechados devido a regras bobas.
SvaLopLop

Respostas:

19

Como os aplicativos de RA costumam ser executados em dispositivos móveis, você também pode considerar outros recursos de detector / descritor:

Muffo
fonte
3
Obrigado! Há também uma versão "rápida" do FAST que roda em tempo real em celulares, é piramidal e os descritores SIFT são reduzidos
Jav_Rock
2
Obtive resultados quase perfeitos usando o ORB
dinâmico
Na verdade, lendo sobre ORB, ele diz que é um RÁPIDO nas pirâmides
Jav_Rock
3
Freak é o último algoritmo a processar o descritor no AR. Mais rápido do que RÁPIDO.
goe
13

Geralmente, se você pode escolher os marcadores, primeiro detecta um alvo quadrado usando um detector de borda e, em seguida, Hough ou simplesmente contornos - então identifica o marcador específico a partir do design interno. Em vez de usar um combinador de pontos geral.

Dê uma olhada no Aruco para um código de exemplo bem escrito.

Martin Beckett
fonte
4
Sim, a abordagem fiducial é a mais simples, mas não está totalmente atualizada. Acho que agora se deve apontar para marcadores texturizados. Obrigado. O exemplo é muito interessante, pois é bem explicado.
Jav_Rock
1
Se quiser saber a pose, você precisa combinar a posição 3D dos recursos do marcador com as coordenadas da imagem correspondentes. Alvos de formato regular tornam isso mais fácil, mas eles não precisam ser planos
Martin Beckett
Mas se eles não são planos, você precisa do modelo 3d ou de um modelo CAD, caso contrário, a homografia de 2d para 3d não é mais um método válido, não é? Quero dizer, a Transformada Linear Direta usada em findhomography
Jav_Rock
Sim, se você tiver um marcador 3D, você precisa saber a forma 3D da palavra real (de cad ou medi-la), mas dá uma solução melhor
Martin Beckett