DEV Community

wellallyTech
wellallyTech

Posted on

Saving Lives with Pixels: Building a Real-Time Skin Lesion Screener with TensorFlow Lite and MobileNetV3

In the realm of digital health, early detection is everything. Skin cancer remains one of the most common yet treatable forms of cancerβ€”if caught early. However, not everyone has immediate access to a dermatologist. This is where Skin Lesion Detection using on-device AI comes into play. By leveraging MobileNetV3 Optimization and TensorFlow Lite Android integration, we can turn a standard smartphone into a powerful screening tool.

In this tutorial, we are going to build a high-performance classification pipeline that distinguishes between benign nevi (moles) and potentially malignant lesions. We will focus on the "Advanced" nuances of the implementation: improving the MobileNetV3 architecture, applying post-training quantization, and using MediaPipe for seamless on-device AI inference.


The Architecture πŸ—οΈ

To achieve real-time performance on a mobile device, we need a streamlined data flow. We don't just send raw pixels to a model; we need to preprocess, infer, and post-process with minimal latency.

graph TD
    A[Camera Stream] -->|RGBA Frames| B(MediaPipe Image Preprocessing)
    B -->|Resize & Normalize| C{TFLite Interpreter}
    C -->|MobileNetV3-Large| D[Feature Extraction]
    D -->|Softmax Layer| E[Classification Results]
    E -->|Confidence Score > Threshold| F[UI Overlay]
    F -->|Alert/Result| G[User Experience]

    subgraph Optimization Pipeline
    H[Keras Model] -->|Quantization| I[TFLite FlatBuffer]
    I -->|Delegate: GPU/NNAPI| C
    end
Enter fullscreen mode Exit fullscreen mode

Prerequisites πŸ› οΈ

Before we dive into the code, ensure you have the following:

  • TensorFlow/Keras: For model training and fine-tuning.
  • Android Studio: The latest Giraffe/Hedgehog version.
  • MediaPipe Solutions SDK: For the high-level inference API.
  • Dataset: HAM10000 or similar dermoscopy image datasets.

Step 1: Refining MobileNetV3 for Medical Imagery

MobileNetV3 is excellent, but for medical tasks, we often need to adjust the alpha (width multiplier) and use the "Large" variant to capture subtle textural features of lesions.

import tensorflow as tf
from tensorflow.keras import layers, models

def build_skin_classifier(input_shape=(224, 224, 3)):
    # Load MobileNetV3Large pre-trained on ImageNet, excluding the top
    base_model = tf.keras.applications.MobileNetV3Large(
        input_shape=input_shape,
        include_top=False,
        weights='imagenet',
        dropout_rate=0.2
    )

    # Fine-tuning: Unfreeze the last 20 layers
    base_model.trainable = True
    for layer in base_model.layers[:-20]:
        layer.trainable = False

    model = models.Sequential([
        base_model,
        layers.GlobalAveragePooling2D(),
        layers.Dense(256, activation='relu'),
        layers.Dropout(0.3),
        layers.Dense(2, activation='softmax') # Binary: Benign vs. Malignant
    ])

    return model

model = build_skin_classifier()
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Enter fullscreen mode Exit fullscreen mode

Step 2: From Keras to TFLite (The Optimization Phase) ⚑

To make this model "Advanced" for mobile, we must use Integer Quantization. This reduces the model size by 4x and allows it to run on the Hexagon DSP or GPU more efficiently.

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]

# Ensure the model is optimized for latency
converter.target_spec.supported_types = [tf.float16] 

tflite_model = converter.convert()

with open('skin_screener_v1.tflite', 'wb') as f:
    f.write(tflite_model)
Enter fullscreen mode Exit fullscreen mode

The "Official" Way to Scale πŸ₯‘

Building a prototype is one thing; deploying a production-ready medical screening tool is another. For advanced patterns on model versioning, HIPAA-compliant data handling, and production-grade Android architectures, I highly recommend checking out the technical deep-dives at WellAlly Tech Blog. They provide excellent resources on scaling AI-driven healthcare applications that go beyond the basics of local inference.


Step 3: Android Integration with MediaPipe

Using the MediaPipe ImageClassifier task simplifies the boilerplate code significantly compared to raw TFLite Interpreter calls.

1. Add Dependencies

In your build.gradle:

dependencies {
    implementation 'com.google.mediapipe:tasks-vision:0.10.0'
}
Enter fullscreen mode Exit fullscreen mode

2. Implementation in Kotlin

import com.google.mediapipe.tasks.vision.imageclassifier.ImageClassifier

class SkinAnalyzer(val context: Context) {
    private var imageClassifier: ImageClassifier? = null

    init {
        val baseOptionsBuilder = BaseOptions.builder()
            .setModelAssetPath("skin_screener_v1.tflite")

        val optionsBuilder = ImageClassifier.ImageClassifierOptions.builder()
            .setBaseOptions(baseOptionsBuilder.build())
            .setMaxResults(2)
            .setScoreThreshold(0.5f)
            .setRunningMode(RunningMode.LIVE_STREAM)

        imageClassifier = ImageClassifier.createFromOptions(context, optionsBuilder.build())
    }

    fun analyzeFrame(bitmap: Bitmap) {
        val mpImage = BitmapImageBuilder(bitmap).build()
        imageClassifier?.classify(mpImage)
    }
}
Enter fullscreen mode Exit fullscreen mode

Critical Considerations: Accuracy & Ethics βš–οΈ

When building healthcare tools, remember:

  1. Bias: Skin lesion datasets are often skewed toward lighter skin tones. Use data augmentation to ensure your model generalizes across all ethnicities.
  2. Disclaimer: Always include a UI disclaimer that this tool is for screening purposes only and is not a definitive medical diagnosis.
  3. On-Device Privacy: The primary benefit of using TensorFlow Lite here is that no sensitive medical images ever leave the user's device.

Conclusion πŸš€

Deploying an optimized MobileNetV3 on Android is a game-changer for accessible healthcare. By combining Keras for training, TFLite for quantization, and MediaPipe for deployment, we’ve created a high-performance, private, and potentially life-saving application.

Ready to take your AI career to the next level?
Explore more production-ready AI architectures and healthcare tech trends over at wellally.tech/blog.

If you found this guide helpful, drop a πŸ’– and let me know in the comments: What medical AI use case should I cover next?

Top comments (0)