I'm using an adapted version of the Cloud recognition-continuous recognition example scene, using a tap-to-scan each image, which I'm storing on the cloud. I have found that after I've scanned an image successfully once, When I look away and return back to that same image, I don't need to tap to scan it again- it simply re-recognizes the image automatically and brings up the associated AR.
What exactly is going on there? Are the images being cached somewhere once recognized? If I turn the phone offline, the re-recognition still works without the tap-to-scan.
Is there a way for me to have all my cloud images downloaded or cached like this on start so the user does not have to tap to scan them?
Also, is there a way to turn off this automatic re-recognition so that I can have a consistent user action flow for each image (aka. even images previously recognized still require the same tap to scan action) ?
Yes this is correct - once you have successfully recognized an image from a Cloud ARchive it's cached until another image is scanned. If you wish to have all images stored on the device you'd need to work with our Clientbased / Offline recognition approach - in this case Cloud Recognition doesn't make sense.
You can find samples for this approach also in the sample app and the documentation.
Thanks for the explanation. I still need to know how to turn off the caching. I need the user to still tap to scan even if they return to a previously recognized image, so that the flow is consistent for all images.
Please let me know how to do this.
As written in one of the previous posts by Nicola, Cloud Recognition is used for the recognition only, tracking happens offline. In order to save bandwidth and improve the experience in case of a spontaneously lost tracking, the current target tracking information stays active. You may have noticed the JS callbacks for "server side recognition" via CloudRecognitionService onRecognized callback, and "image recognised offline" via ImageTrackable.onImageRecognized. One may e.g. recognise an image on the server, but due to network latency and a quickly moving client device, the target may be recognised and tracked moments or seconds later in the consumer app.
In your scenario, where you anyhow prompt the user for action when pointing at the target, you may disable this behaviour manually by recreating the CloudRecognitionService in the ImageTrackable onImageLost callback. I know that a hard-switch for disabling the local caching would make life easier for you, but currently, this is the only way to workaround it.
Again, keep in mind that disabling this caching once a target got lost, may result in more traffic and a poor experience if the user moves away from and quickly returns to the very same target.
You may consider to place an indication of the "current" target in the UI, and let the user cancel it manually. You may also reset the system after a target wasn't recognised x seconds after successful recognition happened on the server side. There is no overruling best practice I can offer to you. It highly depends on your use-case and how detailed you want to communicate the recognition mechanism to the end-user.