Giter Site home page Giter Site logo

mapbox-vision-android's Introduction

mapbox-vision-android's People

Contributors

bendenen avatar deniskoronchik avatar kiryldz avatar korshaknn avatar ringerjk avatar thibaudlopez avatar vladzima avatar yunikkk avatar yuryybk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mapbox-vision-android's Issues

PR #146 merged without successful status checks (mapbox-vision-android)

👋 Hey there! It's Changebot, and I help repositories follow our engineering best practices. My magic wand found some things I wanted to highlight for your review:

Item Current status Best practice guidelines
Run unsuccessful: Travis CI - Pull Request null success

The following PR was merged without the status checks passing: #146

Can you take a look at these best practices and make any adjustments if needed?

Please visit my status check docs if you have any questions.

Fix CI builds

Description

Not all build properties included in build.sh for Vision-Android.
Also ktlint check only Example module

Steps

  • Add build properties
  • Check CI build

API to notify unsupported hardware configuration

This is an enhancement request. Currently, when trying to load the SDK into a device that isn't supported, the app would crash with the following message:

kotlin.NotImplementedError: An operation is not implemented: Device does not support SNPE! Vision SDK does not work with this device yet.

Though this is expected and documented, we'd probably want to add a more graceful way to handle these situations. One possibility is providing an API method to detect if the device is supported, or an error callback so that developer can implement a recovery path.

Unable to resolve dependency. Could not resolve.

I followed instal instructions reported here, but gradle still give me error when I try to sync.

ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.3.0.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.3.0.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.3.0.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.3.0.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.3.0.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.3.0.
Show Details
Affected Modules: app

My gradle (modulel)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "namename"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:7.3.2'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.36.0'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.36.0'

    implementation 'com.mapbox.mapboxsdk:mapbox-android-core:1.3.0'
    implementation 'com.mapbox.vision:mapbox-android-vision:0.3.0'
    implementation 'com.mapbox.vision:mapbox-android-vision-ar:0.3.0'
}

My gradle (project)

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url 'https://mapbox.bintray.com/mapbox' }
        maven {
            url 'https://api.mapbox.com/downloads/v1/vision/android/maven'
            authentication {
                basic(BasicAuthentication)
            }
            credentials {
                username = 'mapbox'
                password = '->tokens-here-<'
            }
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

I already try to invalidate cache and restart, check off Offline mode of gradle.
I already try to clone mapbox-vision-android-teaser, but I am getting the same error.
I already try to build my project and mapbox-vision-android-teaser in another machine, but still getting the same error.
If I put off

    implementation 'com.mapbox.vision:mapbox-android-vision:0.3.0'
    implementation 'com.mapbox.vision:mapbox-android-vision-ar:0.3.0'

gradle is able to sync without error.
Is it only me or is there something wrong?

OS: Windows 7/10.
Android studio: 3.4.
Latest gradle update.

PR #217 merged without successful status checks (mapbox-vision-android)

👋 Hey there! It's Changebot, and I help repositories follow our engineering best practices. My magic wand found some things I wanted to highlight for your review:

Item Current status Best practice guidelines
Run unsuccessful: Travis CI - Pull Request failure success
Run unsuccessful: Travis CI - Branch failure success

The following PR was merged without the status checks passing: #217

Can you take a look at these best practices and make any adjustments if needed?

Please visit my status check docs if you have any questions.

Unable to resolve dependency error

Hi, i am getting the following error when I am trying to sync the gradle:

ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety-native:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety-native:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety-native:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety-native:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.4.0.
Show Details
Affected Modules: Examples

ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety-native:0.4.0.
Show Details
Affected Modules: Examples
`

The build.gradle(project) is:

`buildscript {
if (file("${rootDir}/gradle/versions.gradle").exists()) {
apply from: "${rootDir}/gradle/versions.gradle"
}

ext {
    dokka_version = '0.9.17'
    android_maven_plugin_version = '2.0'
    gradle_bintray_plugin = '1.8.0'
}

repositories {
    google()
    jcenter()
}

dependencies {
    classpath "com.android.tools.build:gradle:$gradle_plugin"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:$dokka_version"
    classpath "com.github.dcendents:android-maven-gradle-plugin:$android_maven_plugin_version"
    classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin"
    classpath "de.mannodermaus.gradle.plugins:android-junit5:$mannodermaus_junit5_version"
}

}

allprojects {
repositories {
google()
jcenter()

    maven { url "https://mapbox.bintray.com/mapbox" }

    maven {
        credentials {
            username 'shahram95'
            password 'sk.eyJ1Ijoic2hhaHJhbTk1IiwiYSI6ImNqeG81YmFhaTAzM2czbXA5emhlNWZ3dXgifQ.jrgjr8IHU02x6i5Us_CARQ'
        }
        authentication {
            basic(BasicAuthentication)
        }

        url 'https://api.mapbox.com/downloads/v1/vision/android/maven'
    }
}

}
`

and the build.gradle (module) is:

`apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

apply from: 'generate-token.gradle'

apply from: "../gradle/ktlint.gradle"

def envVarOrLocalProperty(String name) {
if (System.getenv(name) != null) {
return System.getenv(name)
}

Properties properties = new Properties()
def file = project.rootProject.file('local.properties')
if (file.exists()) {
    properties.load(file.newDataInputStream())
    def localProperty = properties.getProperty(name)
    if (localProperty != null) {
        return localProperty
    }
}
return null

}

if (file("${rootDir}/gradle/versions.gradle").exists()) {
apply from: "${rootDir}/gradle/versions.gradle"
}

android {
compileSdkVersion 28

compileOptions {
    sourceCompatibility 1.8
    targetCompatibility 1.8
}

defaultConfig {
    applicationId "com.mapbox.vision.examples"
    minSdkVersion 23
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

sourceSets {
    main {
        java.srcDirs += 'src/main/java'
        java.srcDirs += 'src/main/kotlin'
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation "androidx.appcompat:appcompat:$android_x_appcompat"
implementation "androidx.constraintlayout:constraintlayout:$android_x_constraint_layout"

implementation "com.mapbox.mapboxsdk:mapbox-android-sdk:$mapbox_sdk"
implementation "com.mapbox.mapboxsdk:mapbox-android-navigation:$mapbox_navigation"
implementation "com.mapbox.mapboxsdk:mapbox-android-navigation-ui:$mapbox_navigation"
implementation "com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:$mapbox_location_layer"
implementation "com.mapbox.mapboxsdk:mapbox-android-core:$mapbox_core"

implementation "com.mapbox.vision:mapbox-android-vision:0.4.0"
implementation "com.mapbox.vision:mapbox-android-vision-ar:0.4.0"
implementation "com.mapbox.vision:mapbox-android-vision-safety:0.4.0"

ktlint "com.pinterest:ktlint:$ktlint_version"

if (envVarOrLocalProperty('BUILD_CORE_FROM_SOURCE')?.toBoolean()) {
    implementation project(path: ':Vision')
    implementation project(path: ':VisionAr')
    implementation project(path: ':VisionSafety')
    implementation project(path: ':CoreAr')
    implementation project(path: ':CoreSdk')
    implementation project(path: ':CoreSafety')
} else {
    implementation "com.mapbox.vision:mapbox-android-vision:$vision"
    implementation "com.mapbox.vision:mapbox-android-vision-ar:$vision_ar"
    implementation "com.mapbox.vision:mapbox-android-vision-safety:$vision_safety"
    implementation "com.mapbox.vision:mapbox-android-vision-safety-native:$vision_safety"
}

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

}`

could you guys help me out? kindly let me know if anything else is required. Thanks.

Vision Example Code crash at `couldn't find "libvision-sdk-wrapper.so"`

Following is the logcat

09-04 15:29:46.806 2552-2552/com.mapbox.vision.examples E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mapbox.vision.examples, PID: 2552
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mapbox.vision.examples-2/base.apk"],nativeLibraryDirectories=[/data/app/com.mapbox.vision.examples-2/lib/arm, /data/app/com.mapbox.vision.examples-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn't find "libvision-sdk-wrapper.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at com.mapbox.vision.mobile.core.NativeVisionManager.(NativeVisionManager.kt:37)
at com.mapbox.vision.VisionManager.create(VisionManager.kt:168)
at com.mapbox.vision.VisionManager.create$default(VisionManager.kt:165)
at com.mapbox.vision.VisionManager.create(VisionManager.kt)
at com.mapbox.vision.examples.ArActivity.onResume(ArActivity.java:120)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1259)
at android.app.Activity.performResume(Activity.java:6361)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Out of index exception. Crashlytics

Link
Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 at com.mapbox.vision.visionevents.events.classification.SignClassification$Companion.fromSignClassificationDataBuffer$MapboxVision_release(SignClassification.kt:32) at com.mapbox.vision.corewrapper.update.jni.JNICoreUpdateManager.updateSignClassification(JNICoreUpdateManager.kt:380) at com.mapbox.vision.corewrapper.update.jni.JNICoreUpdateManager.access$updateSignClassification(JNICoreUpdateManager.kt:36) at com.mapbox.vision.corewrapper.update.jni.JNICoreUpdateManager$requestUpdate$1.invoke(JNICoreUpdateManager.kt:134) at com.mapbox.vision.corewrapper.update.jni.JNICoreUpdateManager$requestUpdate$1.invoke(JNICoreUpdateManager.kt:36) at com.mapbox.vision.utils.threads.WorkThreadHandler$post$1.run(WorkThreadHandler.kt:19) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.os.HandlerThread.run(HandlerThread.java:65)

Add tool for mutation testing

Description

Add Pitest as tool for mutation testing

Goal

Add tool that helps improve quality of tests

Steps

  • add Pitest
  • refactor tests

Gradle sync fails

Hi, I'm unable to build this repo on Android Studio. I made the changes in the gradle build files as instructed in the Vision SDK docs for v0.5.0. Please advise.

ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debug/compileClasspath': Could not resolve com.mapbox.navigator:mapbox-navigation-native:6.2.1.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugAndroidTest/compileClasspath': Could not resolve com.mapbox.navigator:mapbox-navigation-native:6.2.1.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@debugUnitTest/compileClasspath': Could not resolve com.mapbox.navigator:mapbox-navigation-native:6.2.1.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@release/compileClasspath': Could not resolve com.mapbox.navigator:mapbox-navigation-native:6.2.1.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-ar:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.vision:mapbox-android-vision-safety:0.5.0.
Show Details
Affected Modules: Examples


ERROR: Unable to resolve dependency for ':Examples@releaseUnitTest/compileClasspath': Could not resolve com.mapbox.navigator:mapbox-navigation-native:6.2.1.
Show Details
Affected Modules: Examples

Resolve circular dependency

DelegateVisionManager has dependency on VisionView while VisionView has dependency on DelegateVisionManager too, this is a circular dependency. In fact only VisionView should has dependency on DelegateVisionManager.

Solution:
Remove externalVideoSourceListener from DelegateVisionManager and set baseVisionManager of VisionView in VisionManager.

@yunikkk What do you think?

Telemetry crash at start up

I'm trying to build a simple test project using 0.1.0. However, the app would crash at start up because MapboxTelemetry isn't included (it seems it was commented out here):

2018-10-20 13:45:06.841 30382-30382/com.mapbox.visiontest E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.mapbox.visiontest, PID: 30382
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/mapbox/android/telemetry/MapboxTelemetry;
        at com.mapbox.vision.VisionManager.create(VisionManager.kt:191)
        at com.mapbox.visiontest.MainActivity.onCreate(MainActivity.kt:12)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Adding api "com.mapbox.mapboxsdk:mapbox-android-telemetry:3.2.0" to the app's build.gradle dependecies fixes it. Happy to cut a PR if we're ready to bring back the dependency.

/cc: @BenDenen @yunikkk

How to pass user's location to the origin point?

` How to pass the current user location to the origin point? Is there a method to put it? I tried many ways, but it seems like not working well?
//Main activity
public class MainActivity extends AppCompatActivity {

//location part
FusedLocationProviderClient mFusedLocationClient;
LocationRequest mLocationRequest;
LocationCallback mLocationCallback;

double pLat;
double pLong;

LocationSettingsRequest.Builder mLocationSettingsBuilder;
SettingsClient client;
Task<LocationSettingsResponse> task;
private static final int REQUEST_CHECK_SETTINGS = 0X1;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {

                return;
            } else

// tvlocation.append("\n"+"Latitude: " + locationResult.getLastLocation().getLatitude() + "Longitude: " + locationResult.getLastLocation().getLongitude());

                pLat = locationResult.getLastLocation().getLatitude();
                pLong = locationResult.getLastLocation().getLongitude();


            Intent i = new Intent(MainActivity.this, ArActivity.class);

// LatLng position = new LatLng(pLat, pLong);
// Bundle args = new Bundle();
// args.putParcelable("coordinate", position);
// i.putExtras(args);

            i.putExtra("Latitude", pLat);
            i.putExtra("Longitude", pLong);

            startActivity(i);
        }

    };


    setLocationRequestSettings();



}

@Override
protected void onResume() {
    super.onResume();
    //   startLocationUpdate();
    requestLocationUpdate();
}

@Override
protected void onPause() {
    super.onPause();

    if(mFusedLocationClient!=null)
    {
        mFusedLocationClient.removeLocationUpdates(mLocationCallback);
        //   Toast.makeText(MainActivity.this, "Listener is Removed",Toast.LENGTH_SHORT).show();
    }
}

private void requestLocationUpdate()
{
    mLocationSettingsBuilder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);
    client = LocationServices.getSettingsClient(MainActivity.this);

    task = client.checkLocationSettings(mLocationSettingsBuilder.build());

    task.addOnSuccessListener(MainActivity.this, new OnSuccessListener<LocationSettingsResponse>() {
        @Override
        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
            startLocationUpdate();
        }
    });
    task.addOnFailureListener(MainActivity.this, new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            if(e instanceof ResolvableApiException)
            {
                try
                {
                    ResolvableApiException resolvable = (ResolvableApiException)e;
                    resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                } catch(IntentSender.SendIntentException sendEx)
                {

                }
            }
        }
    });
}

private void setLocationRequestSettings()
{
    mLocationRequest = LocationRequest.create();
    //        mLocationRequest.setInterval(3000);
    //        mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

}

private void startLocationUpdate()
{
    // Here, thisActivity is the current activity
    if (ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        // Permission is not granted
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION)) {
            // Show an explanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.
            showExplaination();

        } else {
            // No explanation needed; request the permission
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    0);

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    } else {
        // Permission has already been granted
        mFusedLocationClient.requestLocationUpdates(mLocationRequest,mLocationCallback,null);
        //   Toast.makeText(MainActivity.this,"Location Permission was granted.",Toast.LENGTH_SHORT).show();
    }
}
private void showExplaination()
{
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

    builder.setTitle("Reqiores Location Permission");
    builder.setMessage("This app needs location permission to get the location information");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    0);
        }
    });

    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //     Toast.makeText(MainActivity.this, "Sorry, this function cannot be worked until the permission is granted", Toast.LENGTH_SHORT).show();
        }
    });
    builder.show();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case REQUEST_CHECK_SETTINGS:
            switch (resultCode) {
                case Activity.RESULT_OK:
                    Toast.makeText(MainActivity.this, "Location setting has turned on", Toast.LENGTH_LONG).show();
                    break;

                case Activity.RESULT_CANCELED:
                    Toast.makeText(MainActivity.this, "Location setting has not turned on", Toast.LENGTH_LONG).show();
                    break;
            }
    }
}

}

`

`
//AR activity.java
/**

  • Example shows how Vision and VisionAR SDKs are used to draw AR lane over the video stream from camera.

  • Also, Mapbox navigation services are used to build route and navigation session.
    */
    public class ArActivity extends BaseActivity implements RouteListener, ProgressChangeListener, OffRouteListener {

    private static final String TAG = ArActivity.class.getSimpleName();

    // Handles navigation.
    private MapboxNavigation mapboxNavigation;
    // Fetches route from points.
    private RouteFetcher routeFetcher;
    private RouteProgress lastRouteProgress;
    private LocationEngine locationEngine;
    private LocationEngineCallback locationCallback;

    private boolean visionManagerWasInit = false;
    private boolean navigationWasStarted = false;

    double rLong;
    double rLat;

    Double[] array = new Double[2];

    public void getData(){
    Intent i =getIntent();
    rLat = i.getDoubleExtra("Latitude",0);
    rLong = i.getDoubleExtra("Longitude", 0);

    }

    public double getLongitude(){
    getData();
    return rLong;
    }

    public double getLatitude(){
    getData();
    return rLat;
    }

    // This dummy points will be used to build route. For real world test this needs to be changed to real values for
    // source and target locations.
    private final Point ROUTE_ORIGIN = Point.fromLngLat(getLongitude(), getLatitude());
    private final Point ROUTE_DESTINATION = Point.fromLngLat(101.774753, 2.919751);

    @OverRide
    protected void initViews() {
    setContentView(R.layout.activity_ar_navigation);

    }

    @OverRide
    protected void onPermissionsGranted() {
    startVisionManager();
    startNavigation();

    }

    @OverRide
    protected void onStart() {
    super.onStart();
    startVisionManager();
    startNavigation();

    }

    @OverRide
    protected void onStop() {
    super.onStop();
    stopVisionManager();
    stopNavigation();
    }

    private void startVisionManager() {
    if (allPermissionsGranted() && !visionManagerWasInit) {
    // Create and start VisionManager.

         VisionManager.create();
         VisionManager.setModelPerformanceConfig(new Merged(new On(ModelPerformanceMode.DYNAMIC, ModelPerformanceRate.LOW)));
         VisionManager.start();
         VisionManager.setVisionEventsListener(new VisionEventsListener() {
             @Override
             public void onAuthorizationStatusUpdated(@NotNull AuthorizationStatus authorizationStatus) {
             }
    
             @Override
             public void onFrameSegmentationUpdated(@NotNull FrameSegmentation frameSegmentation) {
             }
    
             @Override
             public void onFrameDetectionsUpdated(@NotNull FrameDetections frameDetections) {
             }
    
             @Override
             public void onFrameSignClassificationsUpdated(@NotNull FrameSignClassifications frameSignClassifications) {
             }
    
             @Override
             public void onRoadDescriptionUpdated(@NotNull RoadDescription roadDescription) {
             }
    
             @Override
             public void onWorldDescriptionUpdated(@NotNull WorldDescription worldDescription) {
             }
    
             @Override
             public void onVehicleStateUpdated(@NotNull VehicleState vehicleState) {
             }
    
             @Override
             public void onCameraUpdated(@NotNull Camera camera) {
             }
    
             @Override
             public void onCountryUpdated(@NotNull Country country) {
             }
    
             @Override
             public void onUpdateCompleted() {
             }
         });
    
         VisionArView visionArView = findViewById(R.id.mapbox_ar_view);
    
         // Create VisionArManager.
         VisionArManager.create(VisionManager.INSTANCE);
         visionArView.setArManager(VisionArManager.INSTANCE);
         visionArView.setFenceVisible(true);
    
         visionManagerWasInit = true;
     }
    

    }
    `

Examples can't run by No static method obtainVisionSkuUserToken?

java.lang.NoSuchMethodError: No static method obtainVisionSkuUserToken(Ljava/lang/String;)Ljava/lang/String; in class Lcom/mapbox/android/accounts/v1/MapboxAccounts; or its super classes (declaration of 'com.mapbox.android.accounts.v1.MapboxAccounts' appears in /data/app/com.mapbox.vision.examples-kEwyjK4ToZH_BBLUiB-mCQ==/base.apk!classes3.dex)
at com.mapbox.vision.mobile.core.account.AccountManager$Impl.refreshSkuToken(AccountManager.kt:46)
at com.mapbox.vision.mobile.core.account.AccountManager$Impl.resetAndRescheduleToken(AccountManager.kt:32)
at com.mapbox.vision.mobile.core.account.AccountManager$Impl.(AccountManager.kt:26)
at com.mapbox.vision.VisionManager.create(VisionManager.kt:217)
at com.mapbox.vision.VisionManager.create$default(VisionManager.kt:181)
at com.mapbox.vision.VisionManager.create(Unknown Source:2)
at com.mapbox.vision.examples.ArActivity.startVisionManager(ArActivity.java:112)
at com.mapbox.vision.examples.ArActivity.onPermissionsGranted(ArActivity.java:91)
at com.mapbox.vision.examples.BaseActivity.onCreate(BaseActivity.java:52)
at android.app.Activity.performCreate(Activity.java:7285)
at android.app.Activity.performCreate(Activity.java:7276)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3152)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3320)
at android.app.ActivityThread.-wrap12(Unknown Source:0)

Always crash when i add other ui element

2019-12-06 17:39:13.894 32732-32732/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2019-12-06 17:39:13.894 32732-32732/? A/DEBUG: Build fingerprint: 'SMARTISAN/trident/trident:8.1.0/OPM1.171019.026/1563935990:user/dev-keys'
2019-12-06 17:39:13.894 32732-32732/? A/DEBUG: Revision: '0'
2019-12-06 17:39:13.894 32732-32732/? A/DEBUG: ABI: 'arm64'
2019-12-06 17:39:13.894 32732-32732/? A/DEBUG: pid: 32477, tid: 32622, name: Thread-26 >>> com.mapbox.vision.examples <<<
2019-12-06 17:39:13.894 32732-32732/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
2019-12-06 17:39:13.895 32732-32732/? A/DEBUG: Abort message: 'terminating with uncaught exception of type jni::PendingJavaException'
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x0 0000000000000000 x1 0000000000007f6e x2 0000000000000006 x3 0000000000000008
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x4 fefeff6d6e68736f x5 fefeff6d6e68736f x6 fefeff6d6e68736f x7 7f7f7f7f7f7f7f7f
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x8 0000000000000083 x9 00f85e7cdbf1e2a9 x10 0000000000000000 x11 0000000000000001
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x12 ffffffffffffffff x13 0000000000000000 x14 0000000000000000 x15 00f85e7cdbf1e2a9
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x16 00000064ff437fa8 x17 0000007e32349a04 x18 00000000ebad6082 x19 0000000000007edd
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x20 0000000000007f6e x21 0000007d8ddffd28 x22 ffffff80ffffffc8 x23 0000007d8ddffde0
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x24 0000007d8ddffcc0 x25 0000007d8ddffd00 x26 0000007d8de003c0 x27 0000000000000000
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: x28 0000007d91a80480 x29 0000007d8ddffc30 x30 0000007e322ff108
2019-12-06 17:39:13.896 32732-32732/? A/DEBUG: sp 0000007d8ddffbf0 pc 0000007e322ff124 pstate 0000000060000000
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: backtrace:
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #00 pc 000000000001e124 /system/lib64/libc.so (abort+104)
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #1 pc 000000000040343c /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #2 pc 00000000004035ac /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #3 pc 0000000000400390 /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #4 pc 00000000003ffa94 /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #5 pc 00000000003ffa14 /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #6 pc 0000000000086e3c /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #7 pc 00000000000f9cac /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #8 pc 00000000000fadd4 /data/app/com.mapbox.vision.examples-5i7Elbpix1tfkQJ50x6HKg==/lib/arm64/libvision-sdk-wrapper.so
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #9 pc 000000000006827c /system/lib64/libc.so (__pthread_start(void*)+36)
2019-12-06 17:39:13.897 32732-32732/? A/DEBUG: #10 pc 000000000001f550 /system/lib64/libc.so (__start_thread+68)
2019-12-06 17:39:13.920 755-755/? E/ANDR-IOP: IOP HAL: Received pkg_name = com.smartisanos.drive pid = 0
2019-12-06 17:39:13.934 8558-8558/? E/PackageActionReceiver: ACTION_PACKAGE_ADDED
2019-12-06 17:39:13.959 755-755/? E/ANDR-IOP: IOP HAL: Received pkg_name = com.smartisanos.drive pid = 0
2019-12-06 17:39:13.981 8635-9184/? E/NewLauncher: h : getIconDataContentValues return null md5 is same. checkMD5 is true. itemId = 278 pkg = com.mapbox.vision.examples
2019-12-06 17:39:14.564 887-887/? E//system/bin/tombstoned: Tombstone written to: /data/tombstones/tombstone_04
2019-12-06 17:39:14.578 866-1930/? E/IzatSvc_PassiveLocListener: Exiting with error onLocationChanged line 152 "1"
2019-12-06 17:39:14.588 1220-1569/? E/InputDispatcher: channel '20dcd2 com.mapbox.vision.examples/com.mapbox.vision.examples.SafetyActivityKt (server)' ~ Channel is unrecoverably broken and will be disposed!

No virtual method setBaseUrl(Ljava/lang/String;)V in class Lcom/mapbox/android/telemetry/MapboxTelemetry; or its super classes

I am using a ### ONEPLUS3T device.
I am getting the following error log when I tried to get location updates from a mocker app.

java.lang.NoSuchMethodError: No virtual method setBaseUrl(Ljava/lang/String;)V in class Lcom/mapbox/android/telemetry/MapboxTelemetry; or its super classes (declaration of 'com.mapbox.android.telemetry.MapboxTelemetry' appears in /data/app/com.kml.rigapplication-qV8T-1W7fOnP7CNy8oc6ew==/base.apk!classes4.dex)
at com.mapbox.vision.sync.SessionManager$Impl.configMapboxTelemetry(SessionManager.kt:191)
at com.mapbox.vision.sync.SessionManager$Impl.setCountry(SessionManager.kt:100)
at com.mapbox.vision.VisionManager$start$1$1.run(VisionManager.kt:255)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6863)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Symphony keeps crashing on Samsung Galaxy S9

Trying to run a very basic setup results in my app process being continuously killed (while the activity says alive) with the following output:

2019-04-24 15:27:44.728 32274-32274/com.alldev.narvigation D/SYMPHONY: Detected Symphony running as an Android application, using logcat for all debugging output

2019-04-24 15:27:44.728 32274-32274/com.alldev.narvigation E/SYMPHONY: FATAL        0 t7b5ee5c9c8 /home/host/build/aarch64-android-clang3.8/SecondParty/symphony/src/symphony/src/lib/runtime.cc:468 runtime_init() This version of Symphony is targeted to Snapdragon(TM) platforms

2019-04-24 15:27:44.728 32274-32274/com.alldev.narvigation E/SYMPHONY: t7b5ee5c9c8 /home/host/build/aarch64-android-clang3.8/SecondParty/symphony/src/symphony/src/lib/runtime.cc:468 **********

2019-04-24 15:27:44.728 32274-32274/com.alldev.narvigation E/SYMPHONY: t7b5ee5c9c8 /home/host/build/aarch64-android-clang3.8/SecondParty/symphony/src/symphony/src/lib/runtime.cc:468 - Terminating with exit(1)

2019-04-24 15:27:44.728 32274-32274/com.alldev.narvigation E/SYMPHONY: t7b5ee5c9c8 /home/host/build/aarch64-android-clang3.8/SecondParty/symphony/src/symphony/src/lib/runtime.cc:468 **********

Trying to run on my Samsung Galaxy S9 (SM-G960F) with Android 8.0.0.

UPDATE:

Alright, just fugured that the European version of the S9 doesn't have a snapdragon. So I'm sitting here with some phones which are currently not supported:

Galaxy S9 (EU)
Huawei P30 Pro

Is there any possibility/plan to support other CPUs in the future?

Add test readme

Description

Add readme for different test types and how to run each type

Steps

  • add description for unit tests
  • add description for jacoco (code coverage)
  • add description for pitest (mutation tests)

UI for Safety sample code.

In safety example safety warnings are logged only, which can be confusing for user without the visual indication. Need to either align with iOS or display some enhanced UI for that (can discuss with @rokkeds ).

error android build

error:
Could not get unknown property 'CORE_VISION_SDK' for settings 'mapbox-vision-ar-android' of type org.gradle.initialization.DefaultSettings.

i can generate app demo, help please :S

How to pass user's location to the origin point?

`package com.fyp.mapboxar;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.api.ResolvableApiException;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResponse;
import com.google.android.gms.location.SettingsClient;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

//location part
FusedLocationProviderClient mFusedLocationClient;
LocationRequest mLocationRequest;
LocationCallback mLocationCallback;

double pLat;
double pLong;

LocationSettingsRequest.Builder mLocationSettingsBuilder;
SettingsClient client;
Task<LocationSettingsResponse> task;
private static final int REQUEST_CHECK_SETTINGS = 0X1;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {

                return;
            } else

// tvlocation.append("\n"+"Latitude: " + locationResult.getLastLocation().getLatitude() + "Longitude: " + locationResult.getLastLocation().getLongitude());

                pLat = locationResult.getLastLocation().getLatitude();
                pLong = locationResult.getLastLocation().getLongitude();


            Intent i = new Intent(MainActivity.this, ArActivity.class);

// LatLng position = new LatLng(pLat, pLong);
// Bundle args = new Bundle();
// args.putParcelable("coordinate", position);
// i.putExtras(args);

            i.putExtra("Latitude", pLat);
            i.putExtra("Longitude", pLong);

            startActivity(i);
        }

    };


    setLocationRequestSettings();



}

@Override
protected void onResume() {
    super.onResume();
    //   startLocationUpdate();
    requestLocationUpdate();
}

@Override
protected void onPause() {
    super.onPause();

    if(mFusedLocationClient!=null)
    {
        mFusedLocationClient.removeLocationUpdates(mLocationCallback);
        //   Toast.makeText(MainActivity.this, "Listener is Removed",Toast.LENGTH_SHORT).show();
    }
}

private void requestLocationUpdate()
{
    mLocationSettingsBuilder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);
    client = LocationServices.getSettingsClient(MainActivity.this);

    task = client.checkLocationSettings(mLocationSettingsBuilder.build());

    task.addOnSuccessListener(MainActivity.this, new OnSuccessListener<LocationSettingsResponse>() {
        @Override
        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
            startLocationUpdate();
        }
    });
    task.addOnFailureListener(MainActivity.this, new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            if(e instanceof ResolvableApiException)
            {
                try
                {
                    ResolvableApiException resolvable = (ResolvableApiException)e;
                    resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                } catch(IntentSender.SendIntentException sendEx)
                {

                }
            }
        }
    });
}

private void setLocationRequestSettings()
{
    mLocationRequest = LocationRequest.create();
    //        mLocationRequest.setInterval(3000);
    //        mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

}

private void startLocationUpdate()
{
    // Here, thisActivity is the current activity
    if (ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        // Permission is not granted
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION)) {
            // Show an explanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.
            showExplaination();

        } else {
            // No explanation needed; request the permission
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    0);

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    } else {
        // Permission has already been granted
        mFusedLocationClient.requestLocationUpdates(mLocationRequest,mLocationCallback,null);
        //   Toast.makeText(MainActivity.this,"Location Permission was granted.",Toast.LENGTH_SHORT).show();
    }
}
private void showExplaination()
{
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

    builder.setTitle("Reqiores Location Permission");
    builder.setMessage("This app needs location permission to get the location information");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    0);
        }
    });

    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //     Toast.makeText(MainActivity.this, "Sorry, this function cannot be worked until the permission is granted", Toast.LENGTH_SHORT).show();
        }
    });
    builder.show();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case REQUEST_CHECK_SETTINGS:
            switch (resultCode) {
                case Activity.RESULT_OK:
                    Toast.makeText(MainActivity.this, "Location setting has turned on", Toast.LENGTH_LONG).show();
                    break;

                case Activity.RESULT_CANCELED:
                    Toast.makeText(MainActivity.this, "Location setting has not turned on", Toast.LENGTH_LONG).show();
                    break;
            }
    }
}

}

`

`package com.fyp.mapboxar;

import android.content.Intent;
import android.location.Location;
import android.os.Looper;
import android.widget.Toast;

import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.android.core.location.LocationEngineCallback;
import com.mapbox.android.core.location.LocationEngineProvider;
import com.mapbox.android.core.location.LocationEngineRequest;
import com.mapbox.android.core.location.LocationEngineResult;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.api.directions.v5.models.LegStep;
import com.mapbox.api.directions.v5.models.RouteLeg;
import com.mapbox.core.constants.Constants;
import com.mapbox.geojson.Point;
import com.mapbox.geojson.utils.PolylineUtils;
import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation;
import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions;
import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute;
import com.mapbox.services.android.navigation.v5.offroute.OffRouteListener;
import com.mapbox.services.android.navigation.v5.route.RouteFetcher;
import com.mapbox.services.android.navigation.v5.route.RouteListener;
import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.vision.VisionManager;
import com.mapbox.vision.ar.VisionArManager;
import com.mapbox.vision.ar.core.models.ManeuverType;
import com.mapbox.vision.ar.core.models.Route;
import com.mapbox.vision.ar.core.models.RoutePoint;
import com.mapbox.vision.ar.view.gl.VisionArView;
import com.mapbox.vision.mobile.core.interfaces.VisionEventsListener;
import com.mapbox.vision.mobile.core.models.AuthorizationStatus;
import com.mapbox.vision.mobile.core.models.Camera;
import com.mapbox.vision.mobile.core.models.Country;
import com.mapbox.vision.mobile.core.models.FrameSegmentation;
import com.mapbox.vision.mobile.core.models.classification.FrameSignClassifications;
import com.mapbox.vision.mobile.core.models.detection.FrameDetections;
import com.mapbox.vision.mobile.core.models.position.GeoCoordinate;
import com.mapbox.vision.mobile.core.models.position.VehicleState;
import com.mapbox.vision.mobile.core.models.road.RoadDescription;
import com.mapbox.vision.mobile.core.models.world.WorldDescription;
import com.mapbox.vision.performance.ModelPerformance.On;
import com.mapbox.vision.performance.ModelPerformanceConfig.Merged;
import com.mapbox.vision.performance.ModelPerformanceMode;
import com.mapbox.vision.performance.ModelPerformanceRate;
import com.mapbox.vision.utils.VisionLogger;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

/**

  • Example shows how Vision and VisionAR SDKs are used to draw AR lane over the video stream from camera.

  • Also, Mapbox navigation services are used to build route and navigation session.
    */
    public class ArActivity extends BaseActivity implements RouteListener, ProgressChangeListener, OffRouteListener {

    private static final String TAG = ArActivity.class.getSimpleName();

    // Handles navigation.
    private MapboxNavigation mapboxNavigation;
    // Fetches route from points.
    private RouteFetcher routeFetcher;
    private RouteProgress lastRouteProgress;
    private LocationEngine locationEngine;
    private LocationEngineCallback locationCallback;

    private boolean visionManagerWasInit = false;
    private boolean navigationWasStarted = false;

    double rLong;
    double rLat;

    Double[] array = new Double[2];

    public void getData(){
    Intent i =getIntent();
    rLat = i.getDoubleExtra("Latitude",0);
    rLong = i.getDoubleExtra("Longitude", 0);

    }

    public double getLongitude(){
    getData();
    return rLong;
    }

    public double getLatitude(){
    getData();
    return rLat;
    }

    // This dummy points will be used to build route. For real world test this needs to be changed to real values for
    // source and target locations.
    private final Point ROUTE_ORIGIN = Point.fromLngLat(getLongitude(), getLatitude());
    private final Point ROUTE_DESTINATION = Point.fromLngLat(101.774753, 2.919751);

    @OverRide
    protected void initViews() {
    setContentView(R.layout.activity_ar_navigation);

    }

    @OverRide
    protected void onPermissionsGranted() {
    startVisionManager();
    startNavigation();

    }

    @OverRide
    protected void onStart() {
    super.onStart();
    startVisionManager();
    startNavigation();

    }

    @OverRide
    protected void onStop() {
    super.onStop();
    stopVisionManager();
    stopNavigation();
    }

    private void startVisionManager() {
    if (allPermissionsGranted() && !visionManagerWasInit) {
    // Create and start VisionManager.

         VisionManager.create();
         VisionManager.setModelPerformanceConfig(new Merged(new On(ModelPerformanceMode.DYNAMIC, ModelPerformanceRate.LOW)));
         VisionManager.start();
         VisionManager.setVisionEventsListener(new VisionEventsListener() {
             @Override
             public void onAuthorizationStatusUpdated(@NotNull AuthorizationStatus authorizationStatus) {
             }
    
             @Override
             public void onFrameSegmentationUpdated(@NotNull FrameSegmentation frameSegmentation) {
             }
    
             @Override
             public void onFrameDetectionsUpdated(@NotNull FrameDetections frameDetections) {
             }
    
             @Override
             public void onFrameSignClassificationsUpdated(@NotNull FrameSignClassifications frameSignClassifications) {
             }
    
             @Override
             public void onRoadDescriptionUpdated(@NotNull RoadDescription roadDescription) {
             }
    
             @Override
             public void onWorldDescriptionUpdated(@NotNull WorldDescription worldDescription) {
             }
    
             @Override
             public void onVehicleStateUpdated(@NotNull VehicleState vehicleState) {
             }
    
             @Override
             public void onCameraUpdated(@NotNull Camera camera) {
             }
    
             @Override
             public void onCountryUpdated(@NotNull Country country) {
             }
    
             @Override
             public void onUpdateCompleted() {
             }
         });
    
         VisionArView visionArView = findViewById(R.id.mapbox_ar_view);
    
         // Create VisionArManager.
         VisionArManager.create(VisionManager.INSTANCE);
         visionArView.setArManager(VisionArManager.INSTANCE);
         visionArView.setFenceVisible(true);
    
         visionManagerWasInit = true;
     }
    

    }

    private void stopVisionManager() {
    if (visionManagerWasInit) {
    VisionArManager.destroy();
    VisionManager.stop();
    VisionManager.destroy();

         visionManagerWasInit = false;
     }
    

    }

    private void startNavigation() {
    if (allPermissionsGranted() && !navigationWasStarted) {
    // Initialize navigation with your Mapbox access token.
    mapboxNavigation = new MapboxNavigation(
    this,
    getString(R.string.mapbox_access_token),
    MapboxNavigationOptions.builder().build()
    );

         // Initialize route fetcher with your Mapbox access token.
         routeFetcher = new RouteFetcher(this, getString(R.string.mapbox_access_token));
         routeFetcher.addRouteListener(this);
    
         locationEngine = LocationEngineProvider.getBestLocationEngine(this);
    
         LocationEngineRequest arLocationEngineRequest = new LocationEngineRequest.Builder(0)
                 .setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
                 .setFastestInterval(1000)
                 .build();
    
         locationCallback = new LocationEngineCallback<LocationEngineResult>() {
             @Override
             public void onSuccess(LocationEngineResult result) {
    
             }
    
             @Override
             public void onFailure(@NonNull Exception exception) {
    
             }
         };
    
         try {
             locationEngine.requestLocationUpdates(arLocationEngineRequest, locationCallback, Looper.getMainLooper());
         } catch (SecurityException se) {
             VisionLogger.Companion.e(TAG, se.toString());
         }
    
         initDirectionsRoute();
    
         // Route need to be reestablished if off route happens.
         mapboxNavigation.addOffRouteListener(this);
         mapboxNavigation.addProgressChangeListener(this);
    
         navigationWasStarted = true;
     }
    

    }

    private void stopNavigation() {
    if (navigationWasStarted) {
    locationEngine.removeLocationUpdates(locationCallback);

         mapboxNavigation.removeProgressChangeListener(this);
         mapboxNavigation.removeOffRouteListener(this);
         mapboxNavigation.stopNavigation();
    
         navigationWasStarted = false;
     }
    

    }

    private void initDirectionsRoute() {
    // Get route from predefined points.
    NavigationRoute.builder(this)
    .accessToken(getString(R.string.mapbox_access_token))
    .origin(ROUTE_ORIGIN)
    .destination(ROUTE_DESTINATION)
    .build()
    .getRoute(new Callback() {
    @OverRide
    public void onResponse(Call call, Response response) {
    if (response.body() == null || response.body().routes().isEmpty()) {
    return;
    }

                     // Start navigation session with retrieved route.
                     DirectionsRoute route = response.body().routes().get(0);
                     mapboxNavigation.startNavigation(route);
    
                     // Set route progress.
                     VisionArManager.setRoute(new Route(
                             getRoutePoints(route),
                             route.duration().floatValue(),
                             "",
                             ""
                     ));
                 }
    
                 @Override
                 public void onFailure(Call<DirectionsResponse> call, Throwable t) {
                 }
             });
    

    }

    @OverRide
    public void onErrorReceived(Throwable throwable) {
    if (throwable != null) {
    throwable.printStackTrace();
    }

     mapboxNavigation.stopNavigation();
     Toast.makeText(this, "Can not calculate the route requested", Toast.LENGTH_SHORT).show();
    

    }

    @OverRide
    public void onResponseReceived(@NotNull DirectionsResponse response, RouteProgress routeProgress) {
    mapboxNavigation.stopNavigation();
    if (response.routes().isEmpty()) {
    Toast.makeText(this, "Can not calculate the route requested", Toast.LENGTH_SHORT).show();
    } else {
    DirectionsRoute route = response.routes().get(0);

         mapboxNavigation.startNavigation(route);
    
         // Set route progress.
         VisionArManager.setRoute(new Route(
                 getRoutePoints(route),
                 (float) routeProgress.durationRemaining(),
                 "",
                 ""
         ));
     }
    

    }

    @OverRide
    public void onProgressChange(Location location, RouteProgress routeProgress) {
    lastRouteProgress = routeProgress;
    }

    @OverRide
    public void userOffRoute(Location location) {
    routeFetcher.findRouteFromRouteProgress(location, lastRouteProgress);
    }

    private RoutePoint[] getRoutePoints(@NotNull DirectionsRoute route) {
    ArrayList routePoints = new ArrayList<>();

     List<RouteLeg> legs = route.legs();
     if (legs != null) {
         for (RouteLeg leg : legs) {
    
             List<LegStep> steps = leg.steps();
             if (steps != null) {
                 for (LegStep step : steps) {
                     RoutePoint point = new RoutePoint((new GeoCoordinate(
                             step.maneuver().location().latitude(),
                             step.maneuver().location().longitude()
                     )), mapToManeuverType(step.maneuver().type()));
    
                     routePoints.add(point);
    
                     List<Point> geometryPoints = buildStepPointsFromGeometry(step.geometry());
                     for (Point geometryPoint : geometryPoints) {
                         point = new RoutePoint((new GeoCoordinate(
                                 geometryPoint.latitude(),
                                 geometryPoint.longitude()
                         )), ManeuverType.None);
    
                         routePoints.add(point);
                     }
                 }
             }
         }
     }
    
     return routePoints.toArray(new RoutePoint[0]);
    

    }

    private List buildStepPointsFromGeometry(String geometry) {
    return PolylineUtils.decode(geometry, Constants.PRECISION_6);
    }

    private ManeuverType mapToManeuverType(@nullable String maneuver) {
    if (maneuver == null) {
    return ManeuverType.None;
    }
    switch (maneuver) {
    case "turn":
    return ManeuverType.Turn;
    case "depart":
    return ManeuverType.Depart;
    case "arrive":
    return ManeuverType.Arrive;
    case "merge":
    return ManeuverType.Merge;
    case "on ramp":
    return ManeuverType.OnRamp;
    case "off ramp":
    return ManeuverType.OffRamp;
    case "fork":
    return ManeuverType.Fork;
    case "roundabout":
    return ManeuverType.Roundabout;
    case "exit roundabout":
    return ManeuverType.RoundaboutExit;
    case "end of road":
    return ManeuverType.EndOfRoad;
    case "new name":
    return ManeuverType.NewName;
    case "continue":
    return ManeuverType.Continue;
    case "rotary":
    return ManeuverType.Rotary;
    case "roundabout turn":
    return ManeuverType.RoundaboutTurn;
    case "notification":
    return ManeuverType.Notification;
    case "exit rotary":
    return ManeuverType.RotaryExit;
    default:
    return ManeuverType.None;
    }
    }
    }`

PR #121 merged without successful status checks (mapbox-vision-android)

👋 Hey there! It's Changebot, and I help repositories follow our engineering best practices. My magic wand found some things I wanted to highlight for your review:

Item Current status Best practice guidelines
Run unsuccessful: Travis CI - Pull Request null success

The following PR was merged without the status checks passing: #121

Can you take a look at these best practices and make any adjustments if needed?

Please visit my status check docs if you have any questions.

Add Snapdragon 855 variants to supported devices

Snapdragon 855 was recently added to the list of supported devices

package com.mapbox.vision.mobile.core.utils.snapdragon

public final enum class SupportedSnapdragonBoards private constructor() : kotlin.Enum<com.mapbox.vision.mobile.core.utils.snapdragon.SupportedSnapdragonBoards> {
    SDM855,

    SDM845,

    MSM8998,

    MSM8996,

    SDM710,

    SDM660,

    MSM8956,

    MSM8952;

    public companion object {
        @kotlin.jvm.JvmStatic public final fun isBoardSupported(boardName: kotlin.String): kotlin.Boolean { /* compiled code */ }
    }
}

Some devices ship with prior used codenames of the Snapdragon 855, in our case we see references to SM8150 and board name msmnile

Are we able to get this added or have some way of enabling testing of different variants without these processor checks kicking in within the SDK?

Failed resolution of: Lcom/mapbox/vision/mobile/core/models/Country

Hello

I can't find vision.mobile.core.models.Coutry library

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mapbox.vision.mobile.core.models.Country" on path: DexPathList[[zip file "/data/app/hy.frank.ex.hyvisontest-JScYKGhpUduYYq7AnLwSRA==/base.apk"],nativeLibraryDirectories=[/data/app/hy.frank.ex.hyvisontest-JScYKGhpUduYYq7AnLwSRA==/lib/arm64, /data/app/hy.frank.ex.hyvisontest-JScYKGhpUduYYq7AnLwSRA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.mapbox.vision.VisionManager.(VisionManager.kt:71) 
at hy.frank.ex.hyvisontest.VisionApp.onCreate(VisionApp.java:16) 
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6217) 
at android.app.ActivityThread.access$1200(ActivityThread.java:237) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1785) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:214) 
at android.app.ActivityThread.main(ActivityThread.java:7045) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) 

I downloaded and import vision aar file like this.

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

implementation files('libs/mapbox-android-vision-0.3.0.aar')
implementation files('libs/mapbox-android-vision-native-0.3.0.aar')
implementation files('libs/mapbox-android-vision-ar-0.3.0.aar')
implementation files('libs/mapbox-android-vision-ar-native-0.3.0.aar')
implementation files('libs/mapbox-android-vision-safety-0.3.0.aar')
implementation files('libs/mapbox-android-vision-safety-native-0.3.0.aar')

implementation "com.mapbox.mapboxsdk:mapbox-android-sdk:6.6.1"
implementation "com.mapbox.mapboxsdk:mapbox-android-navigation:0.2.0"
implementation "com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.8.2"
implementation "com.mapbox.mapboxsdk:mapbox-android-core:0.2.1"

}

But It can't find mabox.vision.mobile package.
So I ask that having mistake or not.

Thanks

Repeate create camera session on fail

Currently if create camera session fails we just throw an exception. So user will have a crash.
We should change logic to repeat creation for 3 times. If it doesn't help - close camera.
That logic may be changed/improved in 1512

Android Things support

Android Things is Google's certified version of Android for IoT/embedded development. I'd like to use this ticket to track support (if technically possible) for this flavor of Android.

Currently, Android Things supports two Qualcomm SOM with Adreno support:

  • Qualcomm SDA212
  • Qualcomm SDA624

image

@BenDenen @yunikkk I don't physically have either device, but I'd like to hear from you if this looks like a platform we could support and help you troubleshoot.

Failing to resolve error

error

So I'm following the tutorial on MapBox's website on how to implement Vision into the project and I'm running into this issue, I followed all the steps exactly. I have no idea why this is hapening

Read sensorsListener

VisionManager.start(visionEventsListener) provides the method to listen for vision events. I discovered a sensorDataListener to be in the mapbox-vision sdk too.

Is there a possibility to override the sensor listeners? Both the heading and deviceMotion are interesting.

Device farm research

Description

Test Firebase and AWS device farms

Goal

Decide which device farm is better for Android tests

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.