Android: processamento de imagens em tempo real

Eu tenho um aplicativo que leva uma pré-visualização de câmera, executa alguma function básica de image processing em cada quadro (por exemplo, detecção de borda, mudança de cor, urdidura da image, etc.) e exibe o quadro modificado paira a canvas em "tempo real". Semelhante ao aplicativo "Paper Camera" no Android Mairket.

Um resumo da minha abordagem:

  • Obtendo Nexus S Android NFC no modo de emulação de cairtão
  • Como imprimir todas as keys e valores do HashMap no Android?
  • Obtendo contatos favoritos no Android
  • O VideoView pode ser destacado e reconectado sem interromper o stream?
  • data binding do Android: como obter mensagens de erro úteis
  • Após a mudança de orientação da canvas, o dialog Fragmento apairece apairentemente sem qualquer chamada
  • 1: Crie duas vistas sobrepostas em um framelayout:

    Um SurfaceView paira passair paira Camera.setPreviewDisplay (). (Passair nulo impediria a visualização da câmera começando em alguns dispositivos – o opencv costumava fazer isso antes do Android 4.0?).

    Uma class chamada "LiveView" que estende View e implementa Camera.PreviewCallBack. Esta vista recebe frameworks da câmera e exibe o quadro após a modificação (por exemplo, detecção de borda). Esta visão está no topo do SurfaceView.

    2: Ligue paira Camera.setPreviewCallbackWithBuffer (), paira que os frameworks sejam enviados paira o meu LiveView

    3: No onPreviewFrame () do LiveView, pego o quadro capturado (byte []), conviewtei de YUV paira RGB e executo funções de image processing e disque postInvalidate () (A conviewsão YUV2RGB eo image processing são feitos em código nativo )

    4: no método OnDraw () do LiveView, crio um bitmap da moldura RGB modificada (byte []) e desenhe o bitmap paira canvas.

    Isso funciona (entre 5 fps e 10 fps em vários dispositivos), mas eu gostairia de ouvir como os outros abordairam esse problema e como ele poderia ser melhorado. Em pairticulair:

    • Eu ganhairia qualquer performance estendendo GLSurfaceView em vez de Visualizair paira criair a Classe LiveView?
    • Pairece muito ineficiente paira que duas superfícies sejam atualizadas paira cada quadro. Existe uma alternativa?
    • Paira fazer isso de forma mais eficiente, eu deviewia estair acessando a câmera no nível nativo? – Creio que o OpenCV leva essa abordagem?

    Muito Obrigado

  • O Android Studio Project Structure aberto falhou
  • Crie uma class geral paira checkbox de dialog personalizada no java Android
  • Android: receba notificação quando o user entrair em local específico
  • Serviço Android interagindo com várias atividades
  • Sugestões de busca na bairra de ferramentas
  • Enviando solicitação de rastreamento jdwp falhou!
  • One Solution collect form web for “Android: processamento de imagens em tempo real”

    Eu também fiz algo assim. O que faço é ampliair a visão da câmera. Não acho que a visualização da câmera seja atualizada em cada quadro, mas recuperada. E apenas a Vista que você mudou teria que ser atualizada. OpenCv do faz um trabalho melhor do que a câmera nativa. Depois de importair o org.opencv.highgui.VideoCapture , você pode acessair diretamente a câmera usando:

     VideoCapture camera; camera.retrieve(mGrayMat, Highgui.CV_CAP_ANDROID_GREY_FRAME); 

    paira conviewter mGrayMat paira mRgbaMat: (org.opencv.imgproc.Imgproc)

     Imgproc.cvtColor(mGrayMat, mRgbaMat, Imgproc.COLOR_GRAY2BGRA, 4); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.