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 Hướng dẫn phân loại ảnh trái cây bằng CNN đơn giản
Hướng Dẫn Đồ ÁnLập Trình AI

Hướng dẫn phân loại ảnh trái cây bằng CNN đơn giản

Chia sẻ
Chia sẻ

Phân loại hình ảnh là một trong những ứng dụng phổ biến nhất của học sâu (Deep Learning) trong thị giác máy tính (Computer Vision). Một trong những ví dụ điển hình là nhận diện và phân loại các loại trái cây từ hình ảnh, với ứng dụng thực tế trong nông nghiệp thông minh, siêu thị tự động và hệ thống kiểm tra chất lượng sản phẩm.

Trong bài viết này, chúng ta sẽ cùng xây dựng một mô hình mạng nơ-ron tích chập (Convolutional Neural Network – CNN) đơn giản để phân loại các loại trái cây từ hình ảnh. Bài viết này đặc biệt phù hợp cho người mới bắt đầu vì từng bước đều được giải thích kỹ lưỡng và kèm theo ví dụ thực tế.

Mô tả bài toán

Bài toán đặt ra là: xây dựng một mô hình học sâu có khả năng phân loại hình ảnh thành các loại trái cây khác nhau (ví dụ: táo, chuối, cam, dâu…). Bộ dữ liệu được sử dụng là Fruit Images Dataset gồm hơn 10.000 ảnh của nhiều loại trái cây với kích thước 100×100 pixel.

Pipeline thực hiện bao gồm: tải dữ liệu, tiền xử lý ảnh, xây dựng mô hình CNN, huấn luyện, đánh giá, và thử nghiệm dự đoán trên ảnh mới.

Cài đặt thư viện cần thiết

Để làm việc với hình ảnh và xây dựng CNN, chúng ta cần một số thư viện quan trọng: TensorFlow/Keras để tạo mô hình, Pandas để xử lý dữ liệu, và Matplotlib để trực quan hóa.

Cài đặt các thư viện qua pip:

pip install tensorflow pandas matplotlib numpy

Import các thư viện:

import tensorflow as tf
from tensorflow.keras import layers, models
import matplotlib.pyplot as plt
import numpy as np
import os

Tải và khám phá dữ liệu

Trước khi huấn luyện mô hình, cần tải và khám phá dữ liệu để hiểu rõ cấu trúc: số lượng lớp, kích thước ảnh, và phân phối dữ liệu.

Sử dụng bộ dữ liệu Fruits 360 từ Kaggle:
📥 Tải tại đây

Giải nén dữ liệu vào thư mục fruits/ và sử dụng Keras ImageDataGenerator để đọc dữ liệu:

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_dir = 'fruits/fruits-360/Training'
test_dir = 'fruits/fruits-360/Test'

# Chuẩn hóa pixel và augment dữ liệu
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=(100, 100),
    batch_size=32,
    class_mode='categorical'
)

test_generator = test_datagen.flow_from_directory(
    test_dir,
    target_size=(100, 100),
    batch_size=32,
    class_mode='categorical'
)

Xây dựng mô hình CNN

CNN là kiến trúc mạng nơ-ron mạnh mẽ để xử lý dữ liệu hình ảnh. Nó có khả năng tự động trích xuất các đặc trưng từ ảnh (edges, textures, shapes) và học các mối quan hệ phức tạp để phân loại chính xác.

Tạo mô hình CNN đơn giản gồm các lớp Conv2D, MaxPooling2D, Flatten và Dense:

model = models.Sequential([
    layers.Conv2D(32, (3,3), activation='relu', input_shape=(100, 100, 3)),
    layers.MaxPooling2D(2,2),
    layers.Conv2D(64, (3,3), activation='relu'),
    layers.MaxPooling2D(2,2),
    layers.Conv2D(128, (3,3), activation='relu'),
    layers.MaxPooling2D(2,2),
    layers.Flatten(),
    layers.Dense(512, activation='relu'),
    layers.Dense(train_generator.num_classes, activation='softmax')
])

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Huấn luyện mô hình

Huấn luyện giúp mô hình điều chỉnh trọng số để giảm sai số dự đoán. Việc này được thực hiện lặp lại nhiều epoch trên dữ liệu huấn luyện.

Huấn luyện mô hình trong 10 epochs và theo dõi loss, accuracy:

history = model.fit(
    train_generator,
    epochs=10,
    validation_data=test_generator
)

Đánh giá mô hình

Đánh giá trên dữ liệu test giúp kiểm tra khả năng tổng quát hóa của mô hình khi gặp dữ liệu chưa từng thấy.

Đánh giá độ chính xác và trực quan hóa quá trình huấn luyện:

# Đánh giá
test_loss, test_acc = model.evaluate(test_generator)
print(f"Độ chính xác trên tập test: {test_acc:.2f}")

# Vẽ đồ thị loss và accuracy
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label='val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend(loc='lower right')
plt.show()

Dự đoán trên ảnh mới

Kiểm tra mô hình với ảnh mới để thấy khả năng nhận diện trong thực tế.

Dự đoán một ảnh ngoài tập dữ liệu:

from tensorflow.keras.preprocessing import image

img_path = 'sample_fruit.jpg'  # Đường dẫn ảnh mới
img = image.load_img(img_path, target_size=(100, 100))
img_array = image.img_to_array(img) / 255.0
img_array = np.expand_dims(img_array, axis=0)

prediction = model.predict(img_array)
predicted_class = np.argmax(prediction, axis=1)
class_labels = list(train_generator.class_indices.keys())
print("Loại trái cây dự đoán:", class_labels[predicted_class[0]])

Kết luận

Bằng cách sử dụng CNN đơn giản, chúng ta đã xây dựng thành công một hệ thống phân loại hình ảnh trái cây. Mô hình này có thể phân biệt hàng chục loại trái cây khác nhau từ hình ảnh với độ chính xác cao. Đây là một bước đệm để bạn khám phá các kiến trúc CNN phức tạp hơn như VGG, ResNet, hoặc thử sức với Transfer Learning.

Tiếp theo, bạn có thể triển khai mô hình thành API bằng FastAPI (Chuyển mô hình học máy sang ứng dụng thực tế bằng FastAPI) hoặc kết hợp với dữ liệu lớn hơn để xây dựng hệ thống phân loại quy mô công nghiệp (Tách vật thể ra khỏi nền đơn giản bằng python).

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!