OpenCV em estúdio Android

Quero usar a biblioteca OpenCV na minha aplicação com o Android Studio. Eu segui as instruções encontradas Aqui mas eu recebo um erro

configuração com o nome 'por omissão' não encontrada

O que pode estar errado?

Uso Android Studio 1.0 com grelha 2.2.1.

Author: Hakam Fostok, 2014-12-10

6 answers

Os passos abaixo para usar o Android OpenCV sdk no Android Studio. Esta é uma versão simplificada deste(1) então responde.
  1. telecarregamento último OpenCV sdk para Android de OpenCV.org e descomprimir o ficheiro zip.
  2. importar o OpenCV para o Android Studio, a partir do ficheiro - > novo -> importar o módulo, escolha a pasta sdk/java na pasta aberta.
  3. actualizar compilação.gradle sob importado Módulo OpenCV para actualizar 4 campos para corresponder à compilação do seu projecto.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion e d) targetSdkVersion.
  4. adicionar dependência do módulo por aplicação - > Configuração do Módulo , e seleccionar a Páginadependências . Carregue + ícone no fundo, escolha a dependência do Módulo e seleccione o módulo OpenCV importado.
    • para o Android Studio v1. 2. 2, para aceder à configuração do módulo : na vista do projecto, carregue com o botão direito no módulo dependente - >Abrir A Configuração Do Módulo
  5. Copy libs pasta sob sdk / native para Android Studio sob app/src / main.
  6. no Android Studio, mudar o nome do directório copiado libs para jniLibs e acabámos.

Step (6) é uma vez que o Android studio espera bibliotecas nativas em {[[0]} em vez da pasta mais antiga libs. Para aqueles novos para Android OpenCV, não falha abaixo dos degraus

  • incluir static{ System.loadLibrary("opencv_java"); } (Nota: para a versão 3 do OpenCV nesta etapa, deverá carregar a biblioteca opencv_java3.)
  • para o step (5), Se ignorar qualquer interface de plataforma como o x86, certifique-se que o seu dispositivo/emulador não está nessa plataforma.

O OpenCV escrito está em C/C++. As embalagens de Java são

  1. Android OpenCV SDK - OpenCV.org mantinham o invólucro Android Java. Sugiro este.
  2. OpenCV Java - OpenCV.org manteve o papel gerado automaticamente em Java desktop.
  3. JavaCV - wrapper Java popular mantido por desenvolvedor(S) independente (s). Não é específico para andróides. Esta biblioteca Pode ficar fora de sincronia com as versões mais recentes do OpenCV.
 274
Author: Kiran, 2017-07-13 17:55:26

Integrando OpenCV v3.1. 0 no Android Studio v1.4.1, instruções com detalhes adicionais e este-é-o-que-você-deve-obter screenshots tipo.

A maior parte do crédito vai para Kiran, Kool, 1", e SteveLiles em opencv.org pelas suas explicações. Eu estou adicionando esta resposta porque eu acredito que a interface do Android Studio é agora estável o suficiente para trabalhar com este tipo de coisas de integração. Também tenho que escrever estas instruções de qualquer maneira para o nosso projecto. Os desenvolvedores experientes da A. S. encontrarão algum deste pedantic. Esta resposta é dirigida a pessoas com experiência limitada em Android Studio.
  1. Crie um novo projecto Android Studio usando o Assistente de projecto (Menu: / File / novo projecto):

    • chama-lhe "cvtest1"
    • Factor de forma: API 19, Android 4.4 (KitKat)
    • actividade em branco nomeada MainActivity

      Você deve ter um cvtest1 directory where this project is stored. (a barra de título do Android studio mostra-lhe Onde está o cvtest1 quando abre o projecto)

  2. Verifique se a sua aplicação corre corretamente. Tente mudar algo como o texto" Hello World " para confirmar que o ciclo de compilação/teste está OK para você. (Estou testando com um emulador de um dispositivo API 19).

  3. Obtenha o pacote OpenCV para o Android v3. 1. 0 e abra-o em alguma pasta temporária algures. (Certifique-se de que é o pacote especificamente para o Android e não apenas o OpenCV para o pacote Java.) Vou chamar a esta pasta " unzip-dir " abaixo de unzip-dir deve ter uma pasta sdk/native/libs com subdiretórios que começam por coisas como arm ..., mips ... e x86 ... (um para cada tipo de" arquitetura " Android funciona em)

  4. Do Android Studio importar OpenCV para o seu projecto como um modulo: Menu: / File/New / Import_ Module:
    • Directório-Fonte: {unzip-dir}/sdk / java
    • Nome do módulo: o Android studio preenche automaticamente este campo com openCVLibrary310 (o nome exacto provavelmente não importa, mas vamos avançar com isto).
    • Clique em próximo . Você tem uma tela com três checkboxes e perguntas sobre frascos, bibliotecas e opções de importação. Os três devem ser verificados. Carregue em Acaba.

      O Android Studio começa a importar o módulo e é-lhe mostrado um import-summary.ficheiro txt que tem uma lista do que não foi importado (principalmente ficheiros javadoc) e outras informações. enter image description here

      Mas você também recebe uma mensagem de erro dizendo falhou em encontrar o alvo com a cadeia de hash 'android-14'.... Isto acontece porque a construção.o ficheiro gradle no ficheiro zip do OpenCV que descarregou diz para compilar com a versão da API do android 14, que por padrão você não tem com o Android Studio v1.4.1. enter image description here

  5. Abra o diálogo sobre a estrutura do projecto (Menu:/File/Project_Structure). Seleccione o módulo "app", carregue na página dependências e adicione :openCVLibrary310 como uma dependência do módulo. Quando seleccionar adicionar / dependência Module_ deverá aparecer na lista de módulos que poderá adicionar. Ele agora vai aparecer como uma dependência, mas você vai ter mais alguns não é possível encontrar-android-14 erros no registo de eventos.

  6. Olha para a construção .gradle ficheiro para o módulo da aplicação. Há múltiplas formas.arquivos de gradle em um projeto Android. O que você quer está no directório cvtest1/app e da vista do projecto parece ser build.gradle (Módulo: app). Note Os valores destes quatro campos:

      A minha diz 23. ([12]}buildToolsVersion (o meu diz 23.0.2)
  7. MinSdkVersion (o meu diz 19) (O meu diz 23) ([19])
  8. O seu projecto tem agora uma pasta cvtest1/OpenCVLibrary310 , mas não está visível da vista do projecto:

enter image description here

Use alguma outra ferramenta, como qualquer gestor de ficheiros, e vá para este directório. Poderá também mudar a vista do projecto de Android para ficheiros do projecto e poderá encontrar esta pasta como mostrado nesta imagem: enter image description here

Lá dentro há outra construção.ficheiro gradle (está realçado na imagem acima). Actualize este ficheiro com os quatro valores do Passo 6.
  1. Reinicie o seu projecto e depois limpe-o/reconstrua-o. (Menu:/Build/Clean_ Project) deve limpar e compilar sem erros e você deve ver muitas referências a : openCVLibrary310 no 0: mensagens ecra.

    enter image description here

    Neste ponto, o módulo deverá aparecer na hierarquia do projecto como openCVLibrary310 , tal como app . (Note que nesse pequeno menu eu mudei de volta de Project View para Android View ). Você também deve ver uma compilação adicional .gradle file under "Gradle Scripts" but I find the Android Studio interface a little bit glitchy and sometimes it doesn't do this right away. Então tenta resynching, cleaning, even restarting Android Studio.

    Deverá ver o módulo openCVLibrary310 com todas as funções OpenCV em java, como nesta imagem:

    enter image description here

  2. Copiar o directório {unzip-dir}/sdk/native/libs (e tudo sob ele) para o seu projecto Android, para cvtest1/OpenCVLibrary310/src / main / , e depois mudar o nome da sua cópia de libs a jniLibs . Você deve agora ter um cvtest1/OpenCVLibrary310/src/main/jniLibs directory. Reinchar o seu projecto e este directório deverá agora aparece na vista do projecto em openCVLibrary310 .

    enter image description here

  3. Ir para o método de oncreato de MainActivity.java e adicione este código:

    if (!OpenCVLoader.initDebug()) {
        Log.e(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), not working.");
    } else {
        Log.d(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), working.");
    }
    

    Então execute a sua aplicação. Você deve ver linhas como esta no monitor Android: enter image description here (Eu não sei por que essa linha com a mensagem de erro é pronto.

  4. Agora tente realmente usar algum código openCV. No exemplo abaixo eu copiei um .JPG file to the cache directory of the cvtest1 application on the android emulator. O código abaixo carrega esta imagem, executa o algoritmo de detecção de aresta astuta e, em seguida, escreve os resultados de volta para A.ficheiro png na mesma pasta.

    Coloque este código logo abaixo do Código do passo anterior e altere-o para corresponder aos seus próprios ficheiros/directórios.

    String inputFileName="simm_01";
    String inputExtension = "jpg";
    String inputDir = getCacheDir().getAbsolutePath();  // use the cache directory for i/o
    String outputDir = getCacheDir().getAbsolutePath();
    String outputExtension = "png";
    String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension;
    
    
    Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "...");
    Mat image = Imgcodecs.imread(inputFilePath);  
    Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width());
    // if width is 0 then it did not read your image.
    
    
    // for the canny edge detection algorithm, play with these to see different results
    int threshold1 = 70;
    int threshold2 = 100;
    
    Mat im_canny = new Mat();  // you have to initialize output image before giving it to the Canny method
    Imgproc.Canny(image, im_canny, threshold1, threshold2);
    String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension;
    Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename);
    Imgcodecs.imwrite(cannyFilename, im_canny);
    
  5. Corre o teu aplicacao. O seu emulador deve criar uma imagem a preto e branco. Você pode usar o Monitor de dispositivos Android para recuperar a saída ou escrever uma atividade para mostrá-la.

O Gotchas:

  • se baixar a sua plataforma alvo abaixo do KitKat algumas das bibliotecas OpenCV deixarão de funcionar, especificamente as classes relacionadas com org.opencv.androide.Camera2Renderer e outras classes afins. Você provavelmente pode contornar isso simplesmente a remover o OpenCV apprpriate .ficheiros java.
  • se elevar a sua plataforma alvo para um Chupa-Chupa ou acima do meu exemplo de carregar um ficheiro pode não funcionar porque o uso de caminhos absolutos de ficheiros é desaprovado. Então você pode ter que mudar o exemplo para carregar um arquivo a partir da galeria ou em outro lugar. Há inúmeros exemplos que flutuam ao redor.
 132
Author: ssimm, 2016-06-14 18:34:21

Para todos os que sentiram que queriam fugir com todos os passos e imagens de tela na (grande!) acima das respostas, isto funcionou para mim com android studio 2.2.1:

  1. crie um novo projecto, nomeie-o como quiser e tome o predefinido (o minSdkVersion 15 está bem).
  2. faça o Download do ficheiro zip a partir daqui: https://sourceforge.net/projects/opencvlibrary/files/opencv-android/ (eu baixei a versão 3.1.0, mas pode haver uma versão mais recente).
  3. Abre o ficheiro zip, o melhor o lugar está em sua pasta de espaço de trabalho, mas não importa realmente.
  4. dentro de Android Studio, Carregue em File->New-> Import Module e navegue até \path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java e carregue em Ok, aceitando então todas as janelas predefinidas.
  5. No ficheiro gradle do seu módulo app, adicione isto ao bloco de dependências:

    dependencies {
        compile project(':openCVLibraryXYZ')
        //rest of code
    }
    

Onde o XYZ é a versão exacta que transferes, por exemplo no meu caso:

    dependencies {
        compile project(':openCVLibrary320')
        //rest of code
    }
 32
Author: yshahak, 2018-01-17 13:41:30

Qualquer pessoa que enfrente problemas enquanto cria CPP jniLibs é mostrado ..basta adicionar ndk ..

 0
Author: Aklesh Singh, 2017-08-17 13:41:02

Integração do Opencv com o android studio

Aqueles que querem ter um vídeo do youtube para o mesmo, tente com a última versão do opencv embora(3.4.0), a minha sorte não foi boa o suficiente para a versão mostrada(2.4.9)(opencv releases).

 0
Author: Prakhar1001, 2018-02-20 22:34:19

Você também pode adicionar esta biblioteca à compilação.gradle

dependencies{
   compile 'org.opencv:opencv-android:2.4.8'
}
 -3
Author: Istiyak, 2017-04-16 16:32:28