AI 기반 제품 검수 프로그램 만들기: 불량품과 양품을 자동으로 구분하는 방법


제품 검수 과정에서 불량품을 찾아내는 것은 중요한 작업입니다. 전통적인 수작업 검수는 시간이 많이 들고 효율성이 떨어질 수 있지만, AI를 활용한 자동 검수 시스템을 도입하면 이 문제를 쉽게 해결할 수 있습니다. 이번 글에서는 AI와 OpenCV, TensorFlow를 이용해 제품의 양품과 불량품을 자동으로 구분하는 프로그램을 만드는 방법을 소개해드리겠습니다.

1. OpenCV와 TensorFlow 설치하기

먼저 Python에서 AI 프로그램을 개발하기 위해 OpenCV와 TensorFlow를 설치해야 합니다. 설치는 매우 간단합니다. 아래 명령어를 터미널에 입력하여 필요한 라이브러리를 설치하세요.

pip install tensorflow opencv-python

이 명령어를 실행하면 TensorFlow와 OpenCV 라이브러리가 설치되며, 이후 단계에서 사용할 준비가 완료됩니다.

2. 이미지 데이터 준비하기

AI 모델을 학습시키기 위해서는 데이터가 필요합니다. 제품의 **양품(good)**과 불량품(defective) 이미지를 각각의 폴더로 준비합니다. 예를 들어, 다음과 같은 구조로 데이터를 구성할 수 있습니다.

  • data/train/good : 양품 이미지 폴더
  • data/train/defective : 불량품 이미지 폴더
  • data/validation/good : 검증용 양품 이미지 폴더
  • data/validation/defective : 검증용 불량품 이미지 폴더

훈련 데이터와 검증 데이터를 준비하는 것은 모델의 성능을 높이는 데 중요합니다. 훈련 데이터는 모델을 학습시키는 데 사용되고, 검증 데이터는 학습한 모델의 성능을 평가하는 데 사용됩니다.

3. 이미지 전처리 및 데이터 증강

이미지를 학습시키기 전에 전처리 과정을 거쳐야 합니다. 이는 이미지를 정규화하거나 증강(augmentation)하여 모델의 성능을 높이는 데 도움을 줍니다. 이미지 증강은 회전, 확대, 이동 등의 기법을 사용하여 데이터의 다양성을 늘리고, 이를 통해 모델의 일반화 능력을 높이는 데 유리합니다.

아래 코드는 TensorFlow의 ImageDataGenerator를 사용해 이미지 데이터를 전처리하는 방법을 보여줍니다.

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=20, width_shift_range=0.2,
                                   height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
validation_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    'data/train', target_size=(150, 150), batch_size=20, class_mode='binary')

validation_generator = validation_datagen.flow_from_directory(
    'data/validation', target_size=(150, 150), batch_size=20, class_mode='binary')

4. CNN 모델 구축하기

제품 검수를 위해 우리는 Convolutional Neural Network (CNN) 모델을 사용합니다. CNN은 이미지의 특징을 효과적으로 추출하여 불량품을 구분하는 데 매우 유리합니다. 아래는 간단한 CNN 모델을 구축하는 코드입니다.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
    MaxPooling2D((2, 2)),
    Conv2D(64, (3, 3), activation='relu'),
    MaxPooling2D((2, 2)),
    Conv2D(128, (3, 3), activation='relu'),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(512, activation='relu'),
    Dense(1, activation='sigmoid')
])

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

이 모델은 여러 개의 Conv2D 계층을 사용해 이미지의 특징을 추출하며, 마지막 Dense 계층에서는 sigmoid 활성화 함수를 사용하여 제품이 양품인지 불량품인지 이진 분류를 수행합니다.

5. 모델 학습하기

CNN 모델이 준비되면 데이터를 사용해 모델을 학습시킵니다. 학습을 진행하면서 모델은 이미지의 패턴을 학습하고, 이를 바탕으로 새로운 이미지에 대해 불량 여부를 예측할 수 있게 됩니다.

history = model.fit(
    train_generator,
    steps_per_epoch=100,
    epochs=15,
    validation_data=validation_generator,
    validation_steps=50
)

6. 모델 저장 및 예측

모델 학습이 끝나면 이를 파일로 저장해 나중에 사용할 수 있습니다. 아래 코드는 학습된 모델을 저장하는 방법을 보여줍니다.

model.save('product_inspection_model.h5')

이제 이 모델을 이용해 새로운 제품의 이미지를 입력받아 양품인지 불량품인지 자동으로 판단할 수 있습니다.

7. 실전 적용을 위한 팁

  • 데이터의 다양성: 다양한 각도와 조명에서 촬영된 이미지로 학습해야 모델의 성능이 좋아집니다.
  • 모델 개선: 보다 높은 성능을 위해 ResNet, VGG 등 더 복잡한 구조의 모델을 사용해보는 것도 좋습니다.
  • 실시간 적용: OpenCV와 같은 라이브러리를 이용해 카메라와 연동하여 실시간으로 제품을 검사하는 시스템을 구현할 수 있습니다.

맺음말

AI를 활용한 제품 검수 자동화 시스템은 불량품 검출의 정확도를 높이고 시간과 비용을 절감하는 데 큰 도움을 줄 수 있습니다. 위에서 소개한 CNN 모델은 기본적인 구현 예시로, 더 많은 데이터와 적절한 하이퍼파라미터 튜닝을 통해 더욱 정교한 모델을 만들 수 있습니다. 이를 통해 생산 현장에서 효율적으로 불량품을 식별하는 자동화 시스템을 구축해보세요.


2930 Blog에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.