# Recognize image

Document Reader SDK provides the opportunity to recognize data from an image.

First of all, you need to check image browsing [permissions](https://regulaforensics.gitbook.io/android/5.2-3/permissions).

Start Intent for getting image:

{% tabs %}
{% tab title="Java" %}

```java
// creates and starts image browsing intent
// results will be handled in onActivityResult method
private void createImageBrowsingRequest() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_BROWSE_PICTURE);
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// creates and starts image browsing intent
// results will be handled in onActivityResult method
private fun createImageBrowsingRequest() {
    val intent = Intent()
    intent.type = "image/*"
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
    intent.action = Intent.ACTION_GET_CONTENT
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_BROWSE_PICTURE)
}
```

{% endtab %}
{% endtabs %}

Handle image browsing results:

{% tabs %}
{% tab title="Java" %}

```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {
       //Image browsing intent processed successfully
        if (requestCode == REQUEST_BROWSE_PICTURE){
            if (data.getData() != null) {
                Uri selectedImage = data.getData();
                Bitmap bmp = getBitmap(selectedImage, 1920, 1080);

                DocumentReader.Instance().recognizeImage(bmp, completion);
             }
        }
    }
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (resultCode == Activity.RESULT_OK) {
        //Image browsing intent processed successfully
        if (requestCode == REQUEST_BROWSE_PICTURE) {
            if (data!!.data != null) {
                val selectedImage = data.data
                val bmp = getBitmap(selectedImage, 1920, 1080)

                loadingDialog = showDialog("Processing image")

                DocumentReader.Instance().recognizeImage(bmp, completion)
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

Handle scan [results](https://regulaforensics.gitbook.io/android/5.2-3/results/description-of-results):

{% tabs %}
{% tab title="Java" %}

```java
private IDocumentReaderCompletion completion = new IDocumentReaderCompletion() {
    @Override
    public void onCompleted(int action, DocumentReaderResults results, Throwable error) {
        // processing is finished, all results are ready
        if (action == DocReaderAction.COMPLETE) { 
            // scanning process was finished
        }                
    } else {
        // something happened before all results were ready
        if (action == DocReaderAction.CANCEL){
            Toast.makeText(MainActivity.this, "Scanning was cancelled",Toast.LENGTH_LONG).show();
        } else if(action == DocReaderAction.ERROR){
            Toast.makeText(MainActivity.this, "Error:" + error, Toast.LENGTH_LONG).show();
        }
    }
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
private val completion = IDocumentReaderCompletion { action, results, error ->
    // processing is finished, all results are ready
    if (action == DocReaderAction.COMPLETE) {
        // scanning process was finished
    } else {
        // something happened before all results were ready
        if (action == DocReaderAction.CANCEL) {
            Toast.makeText(this@MainActivity, "Scanning was cancelled", Toast.LENGTH_LONG).show()
        } else if (action == DocReaderAction.ERROR) {
            Toast.makeText(this@MainActivity, "Error:$error", Toast.LENGTH_LONG).show()
        }
    }
```

{% endtab %}
{% endtabs %}
