Где разместить начальный код для CodeLab: «Обнаружение объектов на изображениях с помощью ML Kit для Firebase: Android»? - PullRequest
0 голосов
/ 23 апреля 2020

Я старший java разработчик веб-сервисов, пытаюсь научиться Android Studio / kotlin.

Я делаю CodeLab в заголовке, указанном в моем вопросе stackoverflow: «Обнаружение объектов в изображениях с ML Kit для Firebase: Android ", что здесь: https://codelabs.developers.google.com/codelabs/mlkit-android-odt/index.html?index=..%2F..index#0

У меня все соединение с сервером Firebase работает (что, вероятно, самая сложная часть) , но теперь я застрял на том, что должно быть простой частью:

Где я могу поместить загруженный исходный код? Разархивированная файловая структура имеет вид D: \ mlkit- android -master \ object-Detection \ starter Инструкции на веб-сайте Codelab на самом деле не проясняют это. Они говорят, что я могу просто добавить все это в свой существующий проект, но похоже, что мне придется объединить его вручную (не весело).

В каталоге "starter" содержатся "app" и a " gradle », поэтому я предполагаю, что« startter »должно быть моим именем« Project », которое также называется« application »в Android Studio (go figure), а не« app », которое выглядит как Gradle «модуль» уровня в Android Studio (просто чтобы добавить путаницу с именем).

Ответы [ 3 ]

0 голосов
/ 23 апреля 2020

Хорошо, я получил это для сборки без ошибок (но пока не запускается, так как у меня пока нет функциональности). Вот что я должен был сделать на высоком уровне, и это определенно НЕ интуитивно понятно и НЕ объяснено в руководстве. (Чтобы быть справедливым, конечно, могут быть другие способы сделать это.): 1. Он попросил меня перенести мой проект на AndroidX в один момент, и я сделал это. 1a. Скачал и разархивировал исходный код на мой p c (Вы можете поместить его где угодно в пределах разумного).

В моем ранее существовавшем проекте CameraX (Ваш любой проект, в который вы обычно помещаете Android проекты, такие как D: \ Users \ charl \ AndroidStudioProjects - просто НЕ разархивированный начальный каталог), я импортировал приложение «модуль» "из разархивированного источника (D: \ AndroidRepository \ mlkit- android -master \ object-Detection \ starter \ app), но переименовал его в" app1 ", когда я импортировал его в проект CameraX, так как у меня уже было" приложение Модуль в моем проекте. Когда я впервые выполнял импорт модуля, он был где-то в моем меню (?), Но теперь я не могу его найти, поэтому, если это случится с вами, go, чтобы помочь-> Найти действие-> Импортировать модуль ... К счастью, он достаточно умен, чтобы знать, как должна выглядеть структура «модуль» (он же «приложение»), поэтому он поможет вам подняться на нужный уровень, показывая ошибку до тех пор, пока вы это не сделаете.

Поскольку файл json должен находиться на уровне модуля (он же приложение) для каждого модуля, который обращается к серверу Firebase, и, поскольку я уже выполнял это в моем ранее существующем модуле «приложение», Я просто скопировал файл json из приложения в app1 на том же уровне каталога. Вы также можете повторно загрузить json с консоли Firebase. Ключ в том, что ваши два модуля (приложения) должны иметь одинаковую структуру пакета, если они используют один и тот же файл json. (Опять же, это нормально, но я не уверен, что он будет работать с json в двух модулях. Я просто не уверен, как работает проверка идентификатора firebase ID), но это наверняка будет решаемой проблемой позже ,

Ожидайте обычную раздражающую несовместимость версий jar / library. Когда после импорта модуля Android Studio порекомендовала мне обновить версию Gradle до последней / лучшей версии, я был достаточно глуп, чтобы сказать «да». Однако эта последняя версия не была совместима с последней / самой лучшей Android SDK (10.0 Q API Level 29), но, по крайней мере, журнал сборки дал мне подсказку, что он хочет API Level 28, поэтому я обратился к этому в Менеджер SDK, а затем моя сборка проекта без ошибок.

Чистая сборка

0 голосов
/ 24 апреля 2020

Если вы не пытаетесь добавить MLKit в качестве приложения в один из ваших существующих проектов, вы можете игнорировать мой предыдущий ответ. Это только частично решает проблему, и теперь я понимаю, почему. На уровне начального проекта существуют зависимости, необходимые для запуска приложения (модуля). Ответ для большинства людей будет ближе к ответу Azhagthottk, возможно, с небольшими изменениями и / или объяснениями. Я попытался поднять его ответ сейчас, когда, оглядываясь назад, я его понимаю, но я еще не на этом уровне в StackOverflow.

Проблема

"A роза под любым другим названием пахнет как сладкая ". - Ромео и Джульетта

Я цитирую Шекспира здесь, потому что в этом суть проблемы: терминология "перегрузка" - один и тот же термин с разными значениями. Инструкции на странице «Введение» гласят:

«Эта кодовая метка проведет вас через простые шаги по добавлению обнаружения объекта и отслеживания (ODT) для данного изображения в существующее приложение Android».

... и это то, что сбило меня с толку. Я продолжал думать, что я должен создать пустой проект (также называемый иногда «приложением» - go рисунок) в Android Studio, а затем добавить ПРОСТО приложение (модуль - go рисунок) в этот проект. Из-за вышеупомянутого «перегруженного» использования понятий / терминов в Firebase и Android Studio я буквально воспринял это утверждение, о чем и был мой другой ответ. Оглядываясь назад, очень просто загрузить этот проект, добавить в Android Studio и запустить. Вот шаги:

Решение

  1. Загрузите исходный код в ЛЮБОЕ разумное место на вашем жестком диске p c и распакуйте его. .

  2. Открыть Android Studio.

  3. Из главного меню: Файл-> Создать-> Импортировать проект ... Перейдите вниз к "стартовый" каталог. Нажмите на нее, а затем нажмите кнопку ОК. Примечание для новичков: не думайте, что Android Studio имеет достаточно здравого смысла, чтобы спросить вас, хотите ли вы «импортировать» файлы в какое-то логическое место, скажем, под вашим каталогом AndroidStudioProjects. Это не. Вы должны сделать это самостоятельно в первую очередь. Он собирается оставить их, модифицировать и запускать там, где вы их распаковали. Go рисунок. Итак, помните о будущих потенциальных проблемах безопасности файлов из-за этого, если вы забудете, где вы их оставили.

  4. Как показано на странице 3 инструкций codelab, настройте свою базу огня , Обратите внимание, что крайне важно, чтобы пакет в firebase соответствовал пакету в вашем приложении (модуле), иначе связь между вашим приложением и сервером firebase не будет работать.

  5. В соответствии с пожарной базой На странице 4 инструкции загрузите сгенерированный файл json из firebase и установите его прямо на уровне папки приложения. Вероятно, лучше всего сейчас File-> Synch With File System, чтобы Android Studio мог видеть json.

  6. Как показано на странице 4 инструкций codelab, добавьте зависимости в build.gradle на уровне приложения, а не на уровне проекта. Вы, вероятно, должны поместить плагин вверху вместе с остальными, а не внизу, как показано в инструкции. (Просто хороший стандарт кодирования.) Поскольку вы уже выполнили проект File-> Import, вам не нужно делать File-> Open (как показано в инструкциях CodeLab). Просто выполните «Синхронизация проекта с файлами Gradle», на случай, если они не будут автоматически синхронизированы.

  7. Из главного меню Build-> Make project. Обратите внимание, что в этой строке в файле build.gradle уровня приложения появляется ошибка:

реализация 'com. android .support: appcompat-v7: 28.0.0'

... и да, у меня уже есть уровень API 28 в SDK.

Я получаю несколько других ошибок уровня предупреждения в том же файле. Все о потенциальной несовместимости версий. CodeLab, вероятно, был написан некоторое время назад, и версии продвинулись вперед. Справедливо. Я разберусь с этим позже, так как на этом этапе сборка / запуск не прекращается. Я собираюсь думать позитивно и надеюсь, что это не превратится в «банку ада».

Выберите ваш эмулируемый AVD и запустите «Приложение». Если он работает, он должен выглядеть следующим образом:

Запущенное приложение

Я переместил это вперед к последним / лучшим версиям, как показано ниже на уровне модуля build.gradle. Android Затем Studio пожаловалась, что мне нужно перейти на AndroidX, что я и сделал. Все это вызвало несколько ошибок сборки, которые я исправил, просто взяв предложенные исправления по умолчанию, и все это по-прежнему работает, как и раньше, но без ошибок сборки. Обновленный файл build.gradle уровня модуля:

применить плагин: 'com. android .application'

применить плагин: 'kotlin - android'

применить плагин: 'kotlin - android -extensions'

применить плагин: 'com.google.gms.google-services'

android {compileSdkVersion 29 defaultConfig { applicationId "com.google.firebase.mlkit.codelab.objectdetection" minSdkVersion 16 targetSdkVersion 29 versionCode 1 versionName "1.0"} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile ('proguard- android -optimize),' proguard- *1109* -optimize. rules.pro '}}}

зависимости {реализация fileTree (dir:' libs ', include: [' * .jar ']) реализация "org.jetbrains. kotlin: kotlin -stdlib- jdk7: $ kotlin_version "реализация" androidx.appcompat: appcompat: 1.1.0 "реализация" androidx.constraintlayout: constraintlayout: 1.1.3 "реализация" com.google. android .material: материал: 1.1.0 '

// MLKit ODT libraries
implementation 'com.google.firebase:firebase-ml-vision:24.0.2'
implementation 'com.google.firebase:firebase-ml-vision-object-detection-model:19.0.4'

}

Я получил ошибку во время выполнения на FloatingA ctionButton. Очевидно (согласно аналогичной ошибке в StackOverflow), когда вы переходите на AndroidX, вам нужно перейти на com.google. android .material.floatingactionbutton.FloatingActionButton в layout / activity_main. xml, поэтому он становится:

<com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/captureImageFab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_camera" android:layout_gravity="center|bottom" android:layout_margin="16dp" />

0 голосов
/ 23 апреля 2020

иногда немного сбивает с толку

Распакуйте загруженный zip-файл. Это распакует папку root (mlkit- android) со всеми необходимыми ресурсами. Для этой кодовой метки вам понадобятся только источники в подкаталоге обнаружения объектов.

Итак, шаг за шагом:

enter image description here

Это структура папки, и она говорит: «Вам понадобятся только источники в подкаталоге обнаружения объектов»

Попробуйте открыть эту папку (проект) с помощью Android Studio: Найдите папку «stater» и откройте ее, не открывайте приложение , тогда вы увидите что-то вроде этого:

enter image description here

Теперь давайте код!

...