OpenCV em estúdio Android
O que pode estar errado?configuração com o nome 'por omissão' não encontrada
Uso Android Studio 1.0 com grelha 2.2.1.
6 answers
- telecarregamento último OpenCV sdk para Android de OpenCV.org e descomprimir o ficheiro zip.
- importar o OpenCV para o Android Studio, a partir do ficheiro - > novo -> importar o módulo, escolha a pasta sdk/java na pasta aberta.
- 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.
-
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
- Copy libs pasta sob sdk / native para Android Studio sob app/src / main.
- 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 bibliotecaopencv_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
- Android OpenCV SDK - OpenCV.org mantinham o invólucro Android Java. Sugiro este.
- OpenCV Java - OpenCV.org manteve o papel gerado automaticamente em Java desktop.
- 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.
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.-
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)
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).
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)
-
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.
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.
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.
-
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)
MinSdkVersion (o meu diz 19)
(O meu diz 23) ([19])
O seu projecto tem agora uma pasta cvtest1/OpenCVLibrary310 , mas não está visível da vista do projecto:
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:
Lá dentro há outra construção.ficheiro gradle (está realçado na imagem acima). Actualize este ficheiro com os quatro valores do Passo 6.-
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.
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:
-
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 .
-
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: (Eu não sei por que essa linha com a mensagem de erro é pronto.
-
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);
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.
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
:
- crie um novo projecto, nomeie-o como quiser e tome o predefinido (o minSdkVersion 15 está bem).
- 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).
- Abre o ficheiro zip, o melhor o lugar está em sua pasta de espaço de trabalho, mas não importa realmente.
- dentro de
Android Studio
, Carregue emFile->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. -
No ficheiro
gradle
do seu móduloapp
, 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
}
Qualquer pessoa que enfrente problemas enquanto cria CPP jniLibs é mostrado ..basta adicionar ndk ..
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).
Você também pode adicionar esta biblioteca à compilação.gradle
dependencies{
compile 'org.opencv:opencv-android:2.4.8'
}