# BarcodeScanner

public interface **BarcodeScanner** extends [Detector](https://developers.google.com/android/reference/com/google/mlkit/vision/interfaces/Detector)\<[List](https://developer.android.com/reference/java/util/List.html)\<[Barcode](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode)\>\> [OptionalModuleApi](https://developers.google.com/android/reference/com/google/android/gms/common/api/OptionalModuleApi) Recognizes barcodes (in a variety of 1D and 2D formats) in a supplied `https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`.

A `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScanner`
is created via `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScanning#getClient(com.google.mlkit.vision.barcode.BarcodeScannerOptions)` or `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScanning#getClient()`.
The default option is not recommended because it tries to scan all barcode formats, which is
slow. For example, the code below creates a barcode scanner for `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode#FORMAT_PDF417`.

    BarcodeScanner barcodeScanner =
          BarcodeScanning.getClient(
              new BarcodeScannerOptions.Builder()
                  .setBarcodeFormats(Barcode.FORMAT_PDF417)
                  .build());
     
To perform barcode scanning in an image, you first need to create an instance of
`https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`
from a `https://developer.android.com/reference/android/graphics/Bitmap.html`,
`https://developer.android.com/reference/java/nio/ByteBuffer.html`, etc. See
`https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`
documentation for more details. For example, the code below creates an `https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`
from an `https://developer.android.com/reference/android/media/Image.html`.

    InputImage image = InputImage.fromMediaImage(mediaImage, rotationDegrees);
     
Then the code below can scan barcodes in the supplied `https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`.

    Task<List<Barcode>> task = barcodeScanner.process(image);
     task.addOnSuccessListener(...).addOnFailureListener(...);
     
### Public Method Summary

|---|---|
| abstract void | [close](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScanner#close())() Closes the scanner and releases its resources. |
| abstract Task\<[List](https://developer.android.com/reference/java/util/List.html)\<[Barcode](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode)\>\> | [process](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScanner#process(com.google.android.odml.image.MlImage))([MlImage](https://developers.google.com/android/reference/com/google/android/odml/image/MlImage) image) Detects barcodes from the supplied image. |
| abstract Task\<[List](https://developer.android.com/reference/java/util/List.html)\<[Barcode](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode)\>\> | [process](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScanner#process(com.google.mlkit.vision.common.InputImage))([InputImage](https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage) image) Detects barcodes from the supplied image. |

### Inherited Method Summary

From interface java.io.Closeable

|---|---|
| abstract void | close() |

From interface java.lang.AutoCloseable

|---|---|
| abstract void | close() |

## Public Methods

#### public abstract void **close** ()

Closes the scanner and releases its resources.

#### public abstract Task\<[List](https://developer.android.com/reference/java/util/List.html)\<[Barcode](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode)\>\>
**process** ([MlImage](https://developers.google.com/android/reference/com/google/android/odml/image/MlImage) image)

Detects barcodes from the supplied image.

This is an experimental API in beta version.

Create an `https://developers.google.com/android/reference/com/google/android/odml/image/MlImage`
object using one of `https://developers.google.com/android/reference/com/google/android/odml/image/MlImage`'s
builder methods. See `https://developers.google.com/android/reference/com/google/android/odml/image/MlImage`
documentation for more details.

To get the best detection result, we recommend the following:

- The barcode covers most of the image.
- Narrow down the barcode formats in `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScannerOptions`.

##### Returns

- a `https://developers.google.com/android/reference/com/google/android/gms/tasks/Task` that asynchronously returns a `https://developer.android.com/reference/java/util/List.html` of scanned `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode`s. An empty list is returned by the `https://developers.google.com/android/reference/com/google/android/gms/tasks/Task` if nothing is found.

#### public abstract Task\<[List](https://developer.android.com/reference/java/util/List.html)\<[Barcode](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode)\>\>
**process** ([InputImage](https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage) image)

Detects barcodes from the supplied image.

Create an `https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`
object using one of `https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`'s
factory methods. See `https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage`
documentation for more details.

To get the best detection result, we recommend the following:

- The barcode covers most of the image.
- Narrow down the barcode formats in `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScannerOptions`.

##### Returns

- a `https://developers.google.com/android/reference/com/google/android/gms/tasks/Task` that asynchronously returns a `https://developer.android.com/reference/java/util/List.html` of scanned `https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode`s. An empty list is returned by the `https://developers.google.com/android/reference/com/google/android/gms/tasks/Task` if nothing is found.