Quero usar a biblioteca OpenCV no meu aplicativo com o Android Studio. Segui as instruções encontradas aqui, mas recebo um erro
Configuração com o nome 'padrão' não encontrado
O que pode estar errado?
Eu uso o Android Studio 1.0 com gradle 2.2.1.
android
opencv
android-studio
gradle
Bartosz Bialecki
fonte
fonte
native
diretório no meusdk
diretório. Estou perdendo alguma coisa?Respostas:
As etapas abaixo para usar o Android OpenCV sdk no Android Studio. Esta é uma versão simplificada desta ( 1 ) resposta SO.
A etapa (6) ocorre porque o Android studio espera bibliotecas nativas em
app/src/main/jniLibs
vez dalibs
pasta mais antiga . Para quem é novo no Android OpenCV, não perca as etapas abaixostatic{ System.loadLibrary("opencv_java"); }
(Nota: para o OpenCV versão 3 nesta etapa, você deve carregar a bibliotecaopencv_java3
.)O OpenCV gravado está em C / C ++. Wrappers Java são
fonte
javadocs
diretório? .Também está me pedindo para instalar,android sdk 14
embora eu esteja direcionando para dispositivos que suportamandroid sdk 15
sdk
diretório de instalação no meu sistema enquanto falava sobre o diretório que acompanha oAndroid Open CV SDK
.Ok concluiu a etapa 6. Onde incluostatic{ System.loadLibrary("opencv_java"); }
?android-14
erro depois de importar o módulo no passo 2, você precisa editar manualmente obuild.gradle
no diretório openCV em seu projeto como mostrado no passo 3.Integrando o OpenCV v3.1.0 ao Android Studio v1.4.1 , instruções com detalhes adicionais e capturas de tela do tipo "é isso que você deve obter".
A maior parte do crédito é para Kiran, Kool, 1 "e SteveLiles, no opencv.org, pelas explicações. Estou adicionando esta resposta porque acredito que a interface do Android Studio agora é estável o suficiente para trabalhar com esse tipo de integração. Também tenho que escrever essas instruções de qualquer maneira para o nosso projeto.
Desenvolvedores AS experientes encontrarão um pouco desse pedante. Esta resposta é direcionada a pessoas com experiência limitada no Android Studio.
Crie um novo projeto do Android Studio usando o assistente de projeto (Menu: / Arquivo / Novo Projeto):
Atividade em branco denominada MainActivity
Você deve ter um diretório cvtest1 onde este projeto está armazenado. (a barra de título do Android studio mostra onde está o cvtest1 quando você abre o projeto)
Verifique se o seu aplicativo está funcionando corretamente. Tente alterar algo como o texto "Hello World" para confirmar que o ciclo de construção / teste é bom para você. (Estou testando com um emulador de um dispositivo API 19).
Baixe o pacote OpenCV para Android v3.1.0 e descompacte-o em algum diretório temporário em algum lugar. (Verifique se é o pacote especificamente para Android e não apenas o pacote OpenCV para Java.) Chamarei este diretório " unzip-dir " Abaixo de unzip-dir, você deve ter um diretório sdk / native / libs com subdiretórios que começam com coisas como arm ..., mips ... e x86 ... (um para cada tipo de "arquitetura" que o Android roda)
No Android Studio, importe o OpenCV para o seu projeto como um módulo: Menu: / File / New / Import_Module :
Clique no próximo . Você recebe uma tela com três caixas de seleção e perguntas sobre jarros, bibliotecas e opções de importação. Todos os três devem ser verificados. Clique em Concluir.
O Android Studio começa a importar o módulo e um arquivo import-summary.txt é exibido com uma lista do que não foi importado (principalmente arquivos javadoc) e outras informações.
Mas você também receberá uma mensagem de erro dizendo que não conseguiu encontrar-alvo com corda de hash 'android-14' ... . Isso acontece porque o arquivo build.gradle no arquivo zip do OpenCV que você baixou diz para compilar usando a API do Android versão 14, que por padrão você não possui com o Android Studio v1.4.1.
Abra o diálogo de estrutura do projeto ( Menu: / File / Project_Structure ). Selecione o módulo "app", clique na guia Dependencies e adicione : openCVLibrary310 como uma dependência do módulo. Quando você seleciona Add / Module_Dependency, ele deve aparecer na lista de módulos que você pode adicionar. Agora ele será exibido como uma dependência, mas você receberá mais alguns erros do tipo não consegue encontrar o android-14 no log de eventos.
Procure no arquivo build.gradle seu módulo de aplicativo. Existem vários arquivos build.gradle em um projeto Android. O que você deseja está no diretório cvtest1 / app e, na visualização do projeto, parece com build.gradle (Módulo: app) . Observe os valores desses quatro campos:
Seu projeto agora tem um diretório cvtest1 / OpenCVLibrary310 , mas não é visível na visualização do projeto:
Use alguma outra ferramenta, como qualquer gerenciador de arquivos, e acesse este diretório. Você também pode alternar a visualização do projeto do Android para os Arquivos do projeto e pode encontrar este diretório conforme mostrado nesta captura de tela:
Dentro, há outro arquivo build.gradle (destacado na captura de tela acima). Atualize este arquivo com os quatro valores da etapa 6.
Sincronize novamente o seu projeto e limpe / reconstrua-o. (Menu: / Build / Clean_Project ) Ele deve ser limpo e compilado sem erros e você deve ver muitas referências a : openCVLibrary310 na tela 0: Mensagens .
Nesse ponto, o módulo deve aparecer na hierarquia do projeto como openCVLibrary310 , exatamente como app . (Observe que naquele pequeno menu suspenso retornei da Visualização do projeto para a Android ). Você também deve ver um arquivo build.gradle adicional em "Gradle Scripts", mas acho a interface do Android Studio um pouco complicada e, às vezes, não faz isso imediatamente. Portanto, tente ressincronizar, limpar e até reiniciar o Android Studio.
Você deve ver o módulo openCVLibrary310 com todas as funções do OpenCV em java, como nesta captura de tela:
Copie o diretório {unzip-dir} / sdk / native / libs (e tudo sob ele) para o seu projeto Android, para cvtest1 / OpenCVLibrary310 / src / main / e renomeie sua cópia de libs para jniLibs . Agora você deve ter um diretório cvtest1 / OpenCVLibrary310 / src / main / jniLibs . Sincronize novamente o seu projeto e esse diretório deve aparecer na visualização do projeto em openCVLibrary310 .
Vá para o método onCreate de MainActivity.java e acrescente este código:
Em seguida, execute seu aplicativo. Você deve ver linhas como esta no Android Monitor: (não sei por que essa linha com a mensagem de erro está lá)
Agora tente realmente usar algum código openCV. No exemplo abaixo, copiei um arquivo .jpg no diretório de cache do aplicativo cvtest1 no emulador do Android. O código abaixo carrega essa imagem, executa o algoritmo de detecção de borda inteligente e, em seguida, grava os resultados novamente em um arquivo .png no mesmo diretório.
Coloque esse código logo abaixo do código da etapa anterior e altere-o para corresponder aos seus próprios arquivos / diretórios.
Execute seu aplicativo. Seu emulador deve criar uma imagem em "borda" em preto e branco. Você pode usar o Android Device Monitor para recuperar a saída ou gravar uma atividade para mostrá-la.
The Gotchas :
fonte
OpenCV error: Cannot load info library for OpenCV
2java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.deven.com.opencv-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libopencv_java3.so
O que esses erros fizeram eu passo a passo, como você escreveu.Para todos que acham que querem fugir com todas as etapas e capturas de tela nas (ótimas!) Respostas acima, isso funcionou para mim com
android studio 2.2.1
:Android Studio
, cliqueFile->New-> Import Module
e navegue até\path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
e pressione Ok, depois aceite todas as caixas de diálogo padrão.No
gradle
arquivo do seuapp
módulo, adicione isso ao bloco de dependências:Onde XYZ é a versão exata que você baixa, por exemplo, no meu caso:
fonte
Android Studio 3.4 + OpenCV 4.1
Baixe o arquivo zip mais recente do OpenCV aqui (a versão mais recente atual é 4.1.0) e descompacte-o no seu espaço de trabalho ou em outra pasta.
Crie o novo projeto do Android Studio normalmente. Clique
File->New->Import Module
, navegue para/path_to_unzipped_files/OpenCV-android-sdk/sdk/java
, defina o nome do módulo comoopencv
, cliqueNext
e desmarque todas as opções na tela.Ative
Project
o modo de visualização de arquivo (o modo padrão éAndroid
). Noopencv/build.gradle
arquivo, mudeapply plugin: 'com.android.application'
paraapply plugin: 'com.android.library'
e substituaapplication ID "org.opencv"
por(de acordo com os valores em
app/build.gradle
). Sincronize projeto com arquivos Gradle.Adicione essa sequência ao bloco de dependências no
app/build.gradle
arquivoSelecione novamente
Android
o modo de exibição de arquivo. Clique com o botão direito do mouse noapp
módulo e vá paraNew->Folder->JNI Folder
. Selecione alterar o local da pasta e definasrc/main/jniLibs/
.Selecione novamente
Project
o modo de exibição de arquivo e copie todas as pastas de/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
paraapp/src/main/jniLibs
.Novamente no
Android
modo de visualização de arquivo, clique com o botão direito do mouse noapp
módulo e escolhaLink C++ Project with Gradle
. Selecione Build Systemndk-build
e caminho para oOpenCV.mk
arquivo/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.path_to_unzipped_files
não deve conter espaços, ou você receberá um erro!Para verificar a inicialização do OpenCV, adicione a mensagem Toast no
onCreate()
método MainActivity :Se a inicialização for bem-sucedida, você verá
true
na mensagem do Toast outra mensagemfalse
.fonte
application ID "org.opencv"
corda com duas cordas:minSdkVersion 21
etargetSdkVersion 28
(de acordo com os valores no arquivo app / build.gradle)Qualquer pessoa que esteja enfrentando problemas ao criar o jniLibs cpp é mostrada .. basta adicionar ndk ..
fonte
Isso funcionou para mim e foi tão fácil quanto adicionar uma dependência de gradle:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
A única ressalva é que eu tive que usar um dispositivo de depuração de hardware, pois os emuladores de braço estavam muito lentos para mim (como o AVD Manager diz que eles farão) e, conforme descrito no README do repo, esta versão não inclui suporte para x86 ou x86_64.
Parece construir e o teste sugerido:
cospe um monte de saída que parece certo para mim.
fonte
No seu build.gradle
Mais informações
fonte