Hướng dẫn chuẩn bị Dataset hình ảnh cho dự án AI bằng cách tải dữ liệu tự động từ Bing

Trong các dự án AI liên quan đến Computer Vision như phân loại hình ảnh, nhận diện đối tượng, huấn luyện mô hình YOLO, CNN, hay xây dựng demo AI, dataset hình ảnh luôn là yếu tố quyết định đến chất lượng mô hình.

Tuy nhiên, không phải lúc nào chúng ta cũng có sẵn dữ liệu. Khi đó, cào dữ liệu hình ảnh từ Bing Images là một giải pháp nhanh, miễn phí và phù hợp cho các dự án học tập, nghiên cứu và demo.

Bài viết này sẽ hướng dẫn bạn từ A đến Z:

  • Lên ý tưởng dataset

  • Cào ảnh từ Bing

  • Lọc – làm sạch dữ liệu

  • Chuẩn hóa dataset để sẵn sàng huấn luyện AI


1. Xác định bài toán và yêu cầu dataset

Trước khi cào ảnh, bạn bắt buộc phải xác định rõ bài toán AI. Ví dụ:

Một số bài toán phổ biến

  • Phân loại hình ảnh (Image Classification)
    👉 Ví dụ: Phân biệt tiền thật – tiền giả

  • Nhận diện đối tượng (Object Detection)
    👉 Ví dụ: Phát hiện người, xe, chó mèo

  • Nhận diện thương hiệu / logo

  • Phân loại cây cảnh, hoa lá, sản phẩm…

Ví dụ dự án minh họa

Giả sử ta làm dự án:

Phân loại hình ảnh: Chó và Mèo

Ta sẽ cần:

  • Lớp 1: dog

  • Lớp 2: cat

Mỗi lớp nên có:

  • Tối thiểu: 300 – 500 ảnh

  • Tốt hơn: 1.000+ ảnh


2. Chuẩn bị môi trường

Cài Python (nếu chưa có)

Khuyến nghị Python 3.9 – 3.11

Kiểm tra:

python --version

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

pip install bing-image-downloader pillow tqdm opencv-python

3. Cào dữ liệu hình ảnh từ Bing Images

3.1. Sử dụng thư viện bing-image-downloader

Đây là cách đơn giản, nhanh và phổ biến nhất cho người mới.

Ví dụ code cào ảnh

from bing_image_downloader import downloader

downloader.download(
query=“dog”,
limit=500,
output_dir=“dataset”,
adult_filter=True,
force_replace=False,
timeout=60
)

downloader.download(
query=“cat”,
limit=500,
output_dir=“dataset”,
adult_filter=True,
force_replace=False,
timeout=60
)

Sau khi chạy xong, cấu trúc thư mục sẽ như sau:


3.2. Mẹo để cào ảnh chất lượng hơn

Thay vì chỉ dùng 1 từ khóa, hãy đa dạng hóa từ khóa:

keywords = [
"dog",
"puppy dog",
"dog photo",
"dog animal",
"cute dog"
]
for key in keywords:
downloader.download(
query=key,
limit=200,
output_dir=“dataset_raw/dog”,
adult_filter=True,
force_replace=False,
timeout=60
)

👉 Cách này giúp:

  • Giảm ảnh trùng

  • Tăng độ đa dạng góc chụp

  • Mô hình học tốt hơn


4. Làm sạch dữ liệu (Data Cleaning)

Sau khi cào xong, dataset chắc chắn sẽ có vấn đề:

  • Ảnh lỗi

  • Ảnh không đúng nội dung

  • Ảnh kích thước quá nhỏ

  • File không phải ảnh thật

4.1. Xóa ảnh lỗi không mở được

from PIL import Image
import os
def clean_images(folder):
for file in os.listdir(folder):
path = os.path.join(folder, file)
try:
img = Image.open(path)
img.verify()
except:
os.remove(path)
print(“Deleted:”, path)

clean_images(“dataset/dog”)
clean_images(“dataset/cat”)


4.2. Lọc ảnh kích thước quá nhỏ

from PIL import Image

def remove_small_images(folder, min_size=224):
for file in os.listdir(folder):
path = os.path.join(folder, file)
img = Image.open(path)
w, h = img.size
if w < min_size or h < min_size:
os.remove(path)

remove_small_images(“dataset/dog”)
remove_small_images(“dataset/cat”)


5. Chuẩn hóa kích thước ảnh

Hầu hết mô hình CNN yêu cầu ảnh có kích thước cố định như:

  • 224×224

  • 256×256

  • 416×416 (YOLO)

Resize ảnh về 224×224

import cv2
import os
def resize_images(folder, size=(224,224)):
for file in os.listdir(folder):
path = os.path.join(folder, file)
img = cv2.imread(path)
if img is not None:
img = cv2.resize(img, size)
cv2.imwrite(path, img)

resize_images(“dataset/dog”)
resize_images(“dataset/cat”)


6. Chia dataset: Train / Validation / Test

Tỷ lệ phổ biến:

  • Train: 70%

  • Validation: 20%

  • Test: 10%

Cấu trúc chuẩn

Code chia dataset

import os
import shutil
import random
def split_dataset(source, dest, train_ratio=0.7, val_ratio=0.2):
files = os.listdir(source)
random.shuffle(files)

train_end = int(len(files) * train_ratio)
val_end = int(len(files) * (train_ratio + val_ratio))

splits = {
“train”: files[:train_end],
“val”: files[train_end:val_end],
“test”: files[val_end:]
}

for split, file_list in splits.items():
os.makedirs(os.path.join(dest, split), exist_ok=True)
for f in file_list:
shutil.copy(
os.path.join(source, f),
os.path.join(dest, split, f)
)

split_dataset(“dataset/dog”, “dataset_final/dog”)
split_dataset(“dataset/cat”, “dataset_final/cat”)


7. Lưu ý quan trọng về bản quyền dữ liệu

⚠️ Cực kỳ quan trọng:

  • Dataset cào từ Bing chỉ nên dùng cho học tập, nghiên cứu, demo

  • Không dùng cho mục đích thương mại nếu chưa có quyền sử dụng

  • Khi làm sản phẩm thật → nên dùng dataset open-source hoặc dữ liệu tự thu thập


8. Tổng kết

Việc chuẩn bị dataset hình ảnh từ Bing gồm các bước chính:

  1. Xác định bài toán AI rõ ràng

  2. Cào dữ liệu từ Bing Images

  3. Làm sạch và lọc ảnh

  4. Chuẩn hóa kích thước

  5. Chia dataset chuẩn cho huấn luyện

Chỉ cần làm tốt bước dataset, chất lượng mô hình AI đã thành công 50%.

Be the first to comment

Leave a Reply

Your email address will not be published.


*