Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Tạo chức năng nhận dạng ảnh trong app di động
Hướng Dẫn Đồ ÁnLập Trình AI

Tạo chức năng nhận dạng ảnh trong app di động

Chia sẻ
Chia sẻ

Tích hợp chức năng nhận dạng ảnh trên ứng dụng di động không còn là điều xa vời — người dùng ngày nay mong đợi ứng dụng có thể hiểu nội dung hình ảnh một cách tự nhiên: từ quét tài liệu, nhận diện sản phẩm, đến trợ giúp người khiếm thị. AI chạy offline trên smartphone đã trở thành yêu cầu cơ bản để đảm bảo tốc độ và bảo mật.

Bạn sẽ học cách nhúng một mô hình .tflite thực sự tồn tại và ổn định — cụ thể là ssdlite_mobilenet_v2_coco.tflite từ TensorFlow Object Detection Model Zoo (có thể tải được trong thời gian dài). Nếu bạn từng đọc qua Hướng dẫn sử dụng YOLOv8 để nhận diện đối tượng, Tạo hệ thống nhận diện khuôn mặt bằng OpenCV hoặc Tự động phân loại ảnh thời trang bằng AI, đây là bài viết giúp bạn mang mô hình AI đó vào thực tế smartphone.

Chọn model .tflite thật sự tồn tại

Bạn có thể tải mô hình từ GitHub nnsuite/testcases – nơi chứa bản ssd_mobilenet_v2_coco.tflite rõ ràng, đã tồn tại và sử dụng rộng rãi:

File là mô hình SSDLite MobileNet V2 pretrained trên COCO, hỗ trợ nhận diện 90 lớp đối tượng như người, xe, động vật, đồ dùng…

Tạo dự án Android và thêm TensorFlow Lite

Khởi tạo project Android Studio → chọn Empty Activity (Java). Sau đó chỉnh build.gradle (Module: app):

implementation 'org.tensorflow:tensorflow-lite:2.12.0'
implementation 'org.tensorflow:tensorflow-lite-support:0.4.3'
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.3'

Sau đó nhấn Sync Now.

Thêm model và labels vào assets

  • Tạo folder src/main/assets/

  • Tải ssd_mobilenet_v2_coco.tflite từ link ở trên vào folder này.

  • Tạo file labelmap.txt trong assets chứa tên 90 nhãn COCO (bạn có thể copy từ file .pbtxt và chuyển sang txt, giữ thứ tự).

Ví dụ nội dung labelmap:

person
bicycle
car
motorcycle
airplane
bus
train
truck
boat
traffic light
...

Thiết kế giao diện người dùng

Trong res/layout/activity_main.xml:

<LinearLayout ... >
    <ImageView
        android:id="@+id/imageView"
        ... />
    <Button
        android:id="@+id/btnPick"
        android:text="Chọn ảnh" />
    <TextView
        android:id="@+id/resultText"
        ... />
</LinearLayout>

Giao diện gồm: vùng hiển thị ảnh, nút chọn ảnh, và vùng hiển thị kết quả nhận diện.

Xử lý ảnh và chạy mô hình

Giải thích: Model .tflite này là object detection — bạn cần load mô hình, xử lý ảnh để tạo TensorImage, gọi Task API (ObjectDetector) để nhận danh sách kết quả gồm bounding box, nhãn và score.

Giải thích: TensorFlow Lite Task Vision API chèn toàn bộ bước tiền xử lý và hậu xử lý (non-max suppression) giúp code ngắn gọn và dễ bảo trì.

public class MainActivity extends AppCompatActivity {
    private static final int PICK_IMAGE = 100;
    private ObjectDetector objectDetector;
    private ImageView imageView;
    private TextView resultText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = findViewById(R.id.imageView);
        resultText = findViewById(R.id.resultText);

        try {
            ObjectDetector.ObjectDetectorOptions options =
                ObjectDetector.ObjectDetectorOptions.builder()
                    .setMaxResults(5)
                    .setScoreThreshold(0.4f)
                    .build();
            objectDetector = ObjectDetector.createFromFileAndOptions(
                this, "ssd_mobilenet_v2_coco.tflite", options);
        } catch (IOException e) {
            e.printStackTrace();
        }

        findViewById(R.id.btnPick).setOnClickListener(v -> {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, PICK_IMAGE);
        });
    }

    @Override
    protected void onActivityResult(int req, int res, Intent data) {
        super.onActivityResult(req, res, data);
        if (req == PICK_IMAGE && res == RESULT_OK && data != null) {
            try {
                Uri uri = data.getData();
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                imageView.setImageBitmap(bitmap);
                detectObjects(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private void detectObjects(Bitmap bitmap) {
        TensorImage image = TensorImage.fromBitmap(bitmap);
        List<Detection> results = objectDetector.detect(image);
        StringBuilder sb = new StringBuilder();
        for (Detection d : results) {
            String label = d.getCategories().get(0).getLabel();
            float score = d.getCategories().get(0).getScore();
            sb.append(label).append(" (").append(String.format("%.2f", score)).append(")\n");
        }
        resultText.setText(sb.toString());
    }
}

Mở rộng: nhận diện bằng camera tương tác thời gian thực

Bạn có thể dùng CameraX + TensorFlow Lite để xử lý khung hình thời gian thực. Task API vẫn dùng tương tự, kết quả Detection có thể vẽ bounding boxes bằng Canvas, overlay lên PreviewView.

So sánh model và hiệu năng

SSD-MobileNet-V2 là một trong những mô hình phổ biến cho mobile object detection. Theo đánh giá từ [TensorFlow Lite Object Detection Model Performance Comparison]:

  • Inference time khoảng 68ms trên CPU

  • Độ chính xác (mAP) ~60% trên COCO dataset

  • Dung lượng ~6MB, phù hợp để chạy offline trên smartphone

Model nhỏ như EfficientDet-Lite hoặc MobileDet cũng có giá trị nhưng thường cân bằng khác nhau giữa kích thước và độ chính xác.

Kết luận

Bạn vừa được hướng dẫn đầy đủ cách tích hợp mô hình .tflite ổn định vào ứng dụng Android để nhận diện vật thể từ ảnh tải lên. Từ việc tải model, xử lý ảnh, sử dụng Task API cho tới hiển thị kết quả, app của bạn sẽ hoạt động trơn tru offline mà không cần server.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!