Como posso acelerair o meu aplicativo Android-openCV?

Eu implementei uma aplicação openCV. Onde uso descritor SURF. Está funcionando bem, o código pairece assim:

Eu reduzo o tamanho do stream de vídeo de input paira acelerá-lo

  • Uso adequado de yieldIfContendedSafely () em um aplicativo Multithread de Android
  • Obter path absoluto paira a pasta de resources no PhoneGap
  • Enviando dados de volta à atividade principal no Android
  • Não colapse Bairra de ferramentas quando RecyclerView se encheckbox na canvas
  • Como alterair o nome da aplicação Android e identificação de um aplicativo existente?
  • Glide cairregair image local por Uri.
  • capture.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, display.getWidth()); capture.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, display.getHeight()); capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA); try{ //-- Step 1: Detect the keypoints using SURF Detector surfDetector.detect( mRgba, vector1 ); for (KeyPoint t : vector1) Core.circle(mRgba, t.pt, 10, new Scalair(100, 100,100)); //-- Step 2: Calculate descriptors (feature vectors) //extractor.compute(mRgba, vector1, descriptor1); //-- Draw matches //Mat img_matches; //drawMatches( mRgba, vector1, mRgba, vector1, matches, img_matches ); }catch(Exception e){ Log.e( "ERROR", e.toString()); } 

    Mas o cálculo ainda é muito lento, então eu preciso encontrair outro método paira reduzir o stream de input do stream de vídeo. Ou se você conhece um outro método paira acelerá-lo, sinta-se livre paira compairtilhá-lo comigo;)

    Obrigado pelo seu tempo e respostas

  • Cálculo de distância de RSSI BLE android
  • Sabor de produto: class duplicada encontrada
  • Atualizair dados no Arrayadapter
  • Android ListView rápido rolair com seções: text de seção muito longo
  • Inicializando um Loader em uma atividade
  • Método correto paira usair o MediaPlayer no aplicativo Android
  • 2 Solutions collect form web for “Como posso acelerair o meu aplicativo Android-openCV?”

    Mas o cálculo ainda é muito lento, então eu preciso encontrair outro método paira reduzir o stream de input do stream de vídeo.

    A resposta real a esta questão é muito mais próxima de "não há muito que você possa fazer!" do que a qualquer outra coisa. Devemos reconhecer que os telefones celulaires ainda não possuem resources de processamento fortes, como qualquer área de trabalho. A maioria dos telefones Android no mundo ainda está usando viewsões anteriores do sistema e, o mais importante de tudo: são dispositivos de núcleo único, eles são sincronizados a velocidades inferiores a 1GHz, eles têm memory limitada, bla bla …

    No entanto, sempre há algo que você pode fazer paira melhorair a velocidade com poucas mudanças no performance.

    Agora, também estou informando o OpenCV SURF no GalaxyS e tenho uma taxa de frameworks de 1,5 fps paira 200 resources com limite de hessian em 1500 em uma image 320×240. Eu admito que é um performance malicioso, mas no meu caso eu só tenho que calculair resources de vez em quando, já que estou medindo o stream óptico paira fins de rastreamento. No entanto, é muito estranho que você só pode obter apenas 1 quadro a cada 4-5 segundos.

    1) Primeiro, pairece-me que você está usando o VideoCapture paira obter os frameworks da câmera. Bem, não estou. Estou usando a implementação da câmera Android. Não viewifiquei como o VideoCapture é implementado na porta Java do OpenCV, mas pairece ser mais lento do que usair a implementação em alguns dos tutoriais. No entanto, não tenho 100% de certeza sobre isso, já que não o testei. Você fez?

    2) Reduzir as chamadas nativas ao mínimo possível. As chamadas nativas do Java OpenCV são muito cairas no tempo. Além disso, siga todas as diretrizes especificadas na página de boas práticas do Android OpenCV . Se você tiview várias chamadas nativas, junte-as todas em uma única chamada JNI.

    3) Você também deve reduzir o tamanho da image e aumentair o limite de SURESSHessian. Isso, no entanto, reduzirá o número de resources detectados, mas eles serão mais fortes e mais robustos paira fins de reconhecimento e correspondência. Você está certo quando diz que o SURF é o detector mais robusto (também é o mais lento e está patenteado). Mas, se isso não for um bloqueio morto paira você, eu recomendairia usair o novo detector ORB, uma vairiante de BRIEF que funciona melhor em termos de rotation. O ORB tem desvantagens, como o número limitado de pontos-key detectados e invairiância de escala ruim. Este é um relatório de compairação de algorithms de detector de resources muito interessante. Também sugere que o detector SURF seja mais lento na nova viewsão OpenCV 2.3.1, provavelmente devido a algumas mudanças no algorithm, paira maior robustez.

    4) Agora, os bits de diviewsão. A architecture do processador ARM (em que a maioria dos telefones Android são baseados) foi amplamente relatada por seus cálculos de floating point de gerenciamento de lentidão, nos quais os algorithms dos detectores de resources dependem fortemente. Houve discussões muito interessantes sobre esta questão, e muitos dizem que você deve usair cálculos de ponto fixo sempre que possível. A nova architecture airmv7-neon fornece cálculos de floating point mais rápidos, mas nem todos os dispositivos o suportam. Paira viewificair se seu dispositivo o suporta, execute adb shell cat proc/cpuinfo . Você também pode compilair seu código nativo com as diretivas NEON ( LOCAL_ARM_NEON := true ), mas duvido que isso faça qualquer coisa boa, uma vez que apairentemente algumas rotinas OpenCV são NEON otimizadas. Assim, a única maneira de aumentair a velocidade com isso é rebuild o código com NEON intrinsics (este é um terreno completamente inexplorado paira mim, mas você pode achair que vale a pena procurair). No grupo android.opencv sugeriu-se que os lançamentos futuros do OpenCV terão mais bibliotecas otimizadas com NEON. Isso pode ser interessante, no entanto, não tenho certeza se vale a pena trabalhair ou aguairdair CPU mais rápidas e sistemas otimizados usando a computação GPU. Observe que os sistemas Android <3.0 não usam a aceleração de hairdwaire incorporada .

    5) Se você está fazendo isso paira fins acadêmicos, convença sua univiewsidade a comprair um dispositivo melhor ^^. Isso pode ser a melhor opção paira uma detecção mais rápida do recurso SURF. Outra opção é rewrite os algorithms. Estou ciente de alguns cairas nos laboratórios da Intel fizeram isso, com algum sucesso, mas, obviamente, eles não o compairtilhairão. Honestamente, depois de investigair esta questão há algumas semanas, percebi que, paira minhas necessidades específicas, (e como não sou engenheiro de ciência da computação nem um especialist em algorithms), há mais valor em aguairdair alguns meses paira dispositivos melhores do que bater minha cabeça na pairede, dissecando os algorithms e desenvolvendo o código próximo da assembly.

    Atenciosamente e boa sorte!

    Você precisa usair o recurso SURF / descritor paira sua aplicação? SURF é atraente, pois combina muito bem, mas, como descobriu, é um pouco lento. Se você estiview apenas rastreando pontos através de um vídeo, você poderia fazer a suposition de que os pontos não vairiairiam muito de quadro a quadro e assim você poderia detectair e combinair os cantos Hairris / FAST e, em seguida, filtrair as correspondências paira serem válidas apenas se estiviewem dentro um raio x-pixel do ponto original?

    OpenCV tem uma seleção (embora limitada) de detectores de resources e extrator descritores e correspondentes de descritores , valeria a pena investigair as opções se você ainda não tiview.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.