728x90
반응형
1. Teachable Machine 오픈소스
- 티처블머신에서 만든 모델을 사이트에서 제공하는 오픈소스 tensorflow opencv keras 에서
웹캠 화면 사이즈가 (224,224) 로 제공되는 것을
(640,480)로 업그레이드 하여 활용해 보도록 하자.
https://swmakerjun.tistory.com/46
※ 티처블 머신 오픈소스 활용 예시 블로그
2. 파이썬 코드
from keras.models import load_model # TensorFlow is required for Keras to work
import cv2 # Install opencv-python
import numpy as np
# Disable scientific notation for clarity
np.set_printoptions(suppress=True)
# Load the model
model = load_model("keras_Model.h5", compile=False)
# Load the labels
class_names = open("labels.txt", "r").readlines()
# CAMERA can be 0 or 1 based on default camera of your computer
camera = cv2.VideoCapture(0)
# Set a larger window size for webcam display (e.g., 640x480)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while True:
# Grab the webcamera's image.
ret, image = camera.read()
# Check if the frame was successfully captured
if not ret:
print("Failed to grab frame")
break
# Resize the raw image into (224-height, 224-width) pixels for model input
input_image = cv2.resize(image, (224, 224), interpolation=cv2.INTER_AREA)
# Show the original image in a larger window
cv2.imshow("Webcam Image", image)
# Make the image a numpy array and reshape it to the model's input shape
input_image = np.asarray(input_image, dtype=np.float32).reshape(1, 224, 224, 3)
# Normalize the image array for model input
input_image = (input_image / 127.5) - 1
# Predict with the model
prediction = model.predict(input_image)
index = np.argmax(prediction)
class_name = class_names[index]
confidence_score = prediction[0][index]
# Print prediction and confidence score
print("Class:", class_name[2:], end="")
print("Confidence Score:", str(np.round(confidence_score * 100))[:-2], "%")
# Listen to the keyboard for presses.
keyboard_input = cv2.waitKey(1)
# 27 is the ASCII for the esc key on your keyboard.
if keyboard_input == 27:
break
camera.release()
cv2.destroyAllWindows()
3. 코드 설명
기존 오픈소스와 공통점:
- 모델 로딩: 두 코드 모두 keras_Model.h5 파일을 로드하여 학습된 Keras 모델을 사용합니다.
- 이미지 전처리: 이미지 입력을 224x224 픽셀로 리사이즈하고, 이를 모델에 맞는 입력 포맷으로 변환합니다.
- 예측 출력: 모델의 예측 결과를 출력하고, 가장 높은 확률을 가진 클래스와 해당 클래스의 신뢰도(확률)를 출력합니다.
- 웹캠 사용: 두 코드 모두 웹캠을 통해 이미지를 실시간으로 캡처하여 모델에 전달하는 흐름을 따릅니다.
기존 오픈소스와 차이점:
- 웹캠 창 크기:
- 티처블 머신 코드: 기본적으로 224x224 픽셀 크기로 이미지를 처리하고 웹캠 화면을 작은 크기로 출력합니다. 모델에 입력하기 위해 사용되는 이미지 크기가 곧 웹캠에 출력되는 크기입니다.
- 수정된 코드: 웹캠 창 크기를 640x480으로 크게 설정하여 더 큰 화면에서 실시간 웹캠을 볼 수 있도록 하였습니다. 대신 모델 입력 이미지만 224x224로 리사이즈하여 처리합니다.
- 오류 처리:
- 티처블 머신 코드: 일반적으로 카메라에서 이미지를 제대로 불러오지 못했을 때에 대한 처리 부분이 없거나 간단하게 넘어갑니다.
- 수정된 코드: ret 변수를 통해 카메라에서 프레임을 성공적으로 읽어왔는지 확인하고, 실패 시 오류 메시지를 출력하고 루프를 종료하는 안전장치가 추가되었습니다.
- 키보드 입력 처리:
- 티처블 머신 코드: 웹캠 창을 종료하려면 키보드 입력을 감지하여 ESC 키를 누르면 루프가 종료되도록 하였습니다.
- 수정된 코드: 이 부분은 동일하게 유지되어 있지만, 에러 처리를 통해 코드의 안정성을 강화했습니다.
- 출력 형식:
- 티처블 머신 코드: 클래스 예측 결과와 신뢰도를 출력하는 방식이 간단하게 구성되어 있습니다.
- 수정된 코드: 출력 형식에 약간의 개선이 있어, 신뢰도를 소수점 두 자리가 아닌 정수형으로 출력하는 부분이 추가되었습니다.
4. 웹캠 사이즈 비교
5. 실습 : 더 큰 사이즈로 수정하여 실행해 보자 !
6. putText 함수 활용하기 !
if confidence_score > 0.7:
text = f"Class: {class_name[2:]} - Confidence: {int(confidence_score * 100)}%"
cv2.putText(image, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
728x90
반응형
'인공지능 기초' 카테고리의 다른 글
아두이노 컨베이너벨트 코드 (0) | 2024.10.25 |
---|---|
mediapipe pose 모델 활용 (3) | 2024.10.01 |
Miniconda 로 가상환경 만들기. #2 [가상환경 생성과 라이브러리 설치] (1) | 2024.08.24 |
Miniconda 로 가상환경 만들기. #1 [Miniconda 설치와 실행] (0) | 2024.08.23 |
math 라이브러리 활용 (0) | 2023.11.28 |