Infinum Android Talks #17 - A quest for WebSockets by Zeljko Plesac
Infinum Android Talks #13 - Vision API by Filip Vinkovic
Transcript of Infinum Android Talks #13 - Vision API by Filip Vinkovic
Vision APIFilip Vinković
Overview
• face detection
• barcode detection
Face Detection
• face tracking
• face orientation
• face landmarks
• classification (eyes open, smiling)
Face Detection
<com.google.android.gms.samples.vision.barcodereader.ui.camera.CameraSourcePreview android:id="@+id/preview" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.gms.samples.vision.barcodereader.ui.camera.GraphicOverlay android:id="@+id/graphicOverlay" android:layout_width="match_parent" android:layout_height="match_parent" /></com.google.android.gms.samples.vision.barcodereader.ui.camera.CameraSourcePreview>
Face Detection@Overridepublic void onCreate(Bundle savedInstanceState) { . . . FaceDetector detector = new FaceDetector.Builder(this) .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS) .build(); detector.setProcessor( new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory()) .build()); mCameraSource = new CameraSource.Builder(this, detector) .setRequestedPreviewSize(640, 480) .setFacing(CameraSource.CAMERA_FACING_BACK) .setRequestedFps(30.0f) .build(); }
private class GraphicFaceTrackerFactory implements MultiProcessor.Factory<Face> { @Override public Tracker<Face> create(Face face) { return new GraphicFaceTracker(mGraphicOverlay); } } private class GraphicFaceTracker extends Tracker<Face> { . . . @Override public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) { mOverlay.add(mFaceGraphic); mFaceGraphic.updateFace(face); } . . .}
Face Tracker
mPreview.start(mCameraSource, mGraphicOverlay);
Barcode Detection
• 1D barcodes: EAN-13, EAN-8, UPC-A, UPC-E, Code-39, Code-93, Code-128, ITF, Codabar
• 2D barcodes: QR Code, Data Matrix, PDF-417
• automatically parses QR Codes and PDF-417 values: URL, email, phone, SMS etc.
Barcode Detection
<com.google.android.gms.samples.vision.barcodereader.ui.camera.CameraSourcePreview android:id="@+id/preview" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.gms.samples.vision.barcodereader.ui.camera.GraphicOverlay android:id="@+id/graphicOverlay" android:layout_width="match_parent" android:layout_height="match_parent" /></com.google.android.gms.samples.vision.barcodereader.ui.camera.CameraSourcePreview>
Barcode Detection@Overridepublic void onCreate(Bundle savedInstanceState) { . . . BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(this).build(); BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay); barcodeDetector.setProcessor( new MultiProcessor.Builder<>(barcodeFactory).build()); mCameraSource = new CameraSource.Builder(this, barcodeDetector) .setFacing(CameraSource.CAMERA_FACING_BACK) .setRequestedPreviewSize(1600, 1024) .setRequestedFps(15.0f) .build(); }
Barcode Tracker Factory
class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { private GraphicOverlay<BarcodeGraphic> mGraphicOverlay; BarcodeTrackerFactory(GraphicOverlay<BarcodeGraphic> barcodeGraphicOverlay) { mGraphicOverlay = barcodeGraphicOverlay; } @Override public Tracker<Barcode> create(Barcode barcode) { BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay); return new BarcodeGraphicTracker(mGraphicOverlay, graphic); } }
Barcode Trackerclass BarcodeGraphicTracker extends Tracker<Barcode> {
. . . @Override public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode barcode) { mOverlay.add(mGraphic); mGraphic.updateItem(barcode); Log.d(TAG, barcode.displayValue); if (barcode.format == Barcode.CONTACT_INFO) { Log.d(TAG, barcode.contactInfo.name.formattedName); } else if (barcode.format == Barcode.GEO) { Log.d(TAG, barcode.geoPoint.lat + " " + barcode.geoPoint.lng); } } . . .}
Resources
• https://developers.google.com/vision/
• https://github.com/googlesamples/android-vision
Questions?