<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SwordTomato</title>
    <description>The latest articles on DEV Community by SwordTomato (@swordtomato).</description>
    <link>https://dev.to/swordtomato</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2998188%2Ff0e85516-56bf-433e-a127-45616c4961d8.png</url>
      <title>DEV Community: SwordTomato</title>
      <link>https://dev.to/swordtomato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/swordtomato"/>
    <language>en</language>
    <item>
      <title>การพัฒนาโมเดล Machine Learning ด้วย Python: ตัวอย่างการจำแนกภาพด้วย TensorFlow</title>
      <dc:creator>SwordTomato</dc:creator>
      <pubDate>Mon, 31 Mar 2025 20:12:50 +0000</pubDate>
      <link>https://dev.to/swordtomato/kaarphathnaaomedl-machine-learning-dwy-python-tawyaangkaarcchamaenkphaaphdwy-tensorflow-32if</link>
      <guid>https://dev.to/swordtomato/kaarphathnaaomedl-machine-learning-dwy-python-tawyaangkaarcchamaenkphaaphdwy-tensorflow-32if</guid>
      <description>&lt;p&gt;ในบทความนี้ เราจะสร้างโมเดล Machine Learning สำหรับจำแนกภาพโดยใช้ &lt;strong&gt;TensorFlow&lt;/strong&gt; และ &lt;strong&gt;Keras&lt;/strong&gt; ซึ่งเป็นไลบรารียอดนิยมสำหรับการสร้างโมเดลปัญญาประดิษฐ์ (AI) โมเดลที่เราจะพัฒนาคือโมเดล &lt;strong&gt;Convolutional Neural Network (CNN)&lt;/strong&gt; ซึ่งเป็น &lt;strong&gt;Supervised Learning&lt;/strong&gt; ที่เรียนรู้จากภาพผ่าน &lt;strong&gt;Convolutional Layers&lt;/strong&gt; เพื่อดึงลักษณะสำคัญของภาพ จากนั้นลดขนาดข้อมูลด้วย &lt;strong&gt;Pooling Layer&lt;/strong&gt; และใช้ &lt;strong&gt;Fully Connected Layers&lt;/strong&gt; เพื่อทำนายผล โดยเขียนด้วย &lt;strong&gt;Python&lt;/strong&gt; และใช้ &lt;strong&gt;TensorFlow/Keras&lt;/strong&gt; ในการพัฒนาโครงสร้างโมเดล ฝึกสอนด้วยชุดข้อมูล &lt;strong&gt;MNIST&lt;/strong&gt; และประเมินผลด้วยค่าความแม่นยำของโมเดล&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;ขั้นตอนการทำงานของโมเดล&lt;/strong&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;นำเข้าไลบรารีที่จำเป็น&lt;/li&gt;
&lt;li&gt;โหลดและเตรียมข้อมูลภาพ (ใช้ชุดข้อมูล MNIST ซึ่งประกอบด้วยภาพตัวเลข 0-9)&lt;/li&gt;
&lt;li&gt;สร้างโครงสร้างของโมเดล CNN&lt;/li&gt;
&lt;li&gt;คอมไพล์และฝึกสอนโมเดล&lt;/li&gt;
&lt;li&gt;ทดสอบและประเมินผลโมเดล&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1.นำเข้าไลบรารีที่จำเป็น
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โค้ดด้านบนทำการนำเข้าไลบรารีที่จำเป็นในการพัฒนาโมเดล TensorFlow และ Keras สำหรับการสร้างโครงข่ายประสาทเทียม รวมถึง matplotlib และ numpy สำหรับการจัดการและแสดงผลข้อมูล&lt;/p&gt;

&lt;h2&gt;
  
  
  2.โหลดและเตรียมข้อมูลภาพ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mnist = keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราทำการโหลดชุดข้อมูล MNIST ซึ่งเป็นชุดข้อมูลภาพขาวดำของตัวเลข 0-9 ขนาด 28x28 พิกเซล จากนั้นปรับค่าพิกเซลให้อยู่ในช่วง 0-1 เพื่อให้โมเดลเรียนรู้ได้มีประสิทธิภาพมากขึ้น&lt;/p&gt;

&lt;h2&gt;
  
  
  3.สร้างโครงสร้างของโมเดล CNN
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model = keras.Sequential([
    keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)),
    keras.layers.MaxPooling2D((2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โมเดลที่ใช้คือ Convolutional Neural Network (CNN) ซึ่งมีโครงสร้างดังนี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conv2D: ชั้นคอนโวลูชันที่ใช้ตัวกรองขนาด 3x3 จำนวน 32 ตัว เพื่อดึงคุณลักษณะจากภาพ&lt;/li&gt;
&lt;li&gt;MaxPooling2D: ลดขนาดของภาพลงโดยใช้ฟังก์ชันแมกซ์พูลลิ่ง&lt;/li&gt;
&lt;li&gt;Flatten: แปลงข้อมูลภาพให้อยู่ในรูปเวกเตอร์ 1 มิติ&lt;/li&gt;
&lt;li&gt;Dense: มีสองชั้น - ชั้นแรกใช้ 128 นิวรอนพร้อมฟังก์ชัน ReLU และชั้นสุดท้ายใช้ 10 นิวรอนพร้อมฟังก์ชัน Softmax สำหรับการจำแนกประเภท 10 หมวดหมู่&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4.คอมไพล์และฝึกสอนโมเดล
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train.reshape(-1, 28, 28, 1), y_train, epochs=5)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โมเดลถูกคอมไพล์โดยใช้ Adam Optimizer และค่าความสูญเสีย (loss) ใช้ sparse_categorical_crossentropy เพื่อจัดการกับการจำแนกประเภทหลายหมวดหมู่ จากนั้นโมเดลถูกฝึกสอน (fit) เป็นเวลา 5 รอบ (epochs)&lt;/p&gt;

&lt;p&gt;จะได้ผลลัพธ์เป็น&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmnpd9jpsj1ekwxt2mm3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmnpd9jpsj1ekwxt2mm3.png" alt="Image description" width="618" height="201"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  5.ทดสอบและประเมินผลโมเดล
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;loss, accuracy = model.evaluate(x_test.reshape(-1, 28, 28, 1), y_test)
print(f"Accuracy: {accuracy*100:.2f}%")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;โมเดลถูกนำไปทดสอบด้วยชุดข้อมูลทดสอบ และแสดงค่าความแม่นยำของโมเดล&lt;/p&gt;

&lt;p&gt;จะได้ผลลัพธ์เป็น&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ltqnjldalq6gw4p36uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ltqnjldalq6gw4p36uu.png" alt="Image description" width="581" height="44"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ตัวอย่างการรันใช้งาน
&lt;/h2&gt;

&lt;p&gt;เมื่อรันโค้ดด้านล่าง โมเดลจะถูกฝึกด้วยข้อมูลภาพตัวเลข 0-9 และสามารถนำไปทดสอบกับชุดข้อมูลใหม่ได้ เช่น ใช้ภาพจากชุดข้อมูลทดสอบเพื่อให้โมเดลพยากรณ์ตัวเลขที่อยู่ในภาพ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ทดสอบโมเดลด้วยภาพจากชุดข้อมูลทดสอบ
for i in range(5):  # ทดสอบ 5 ภาพแรกจากชุดข้อมูลทดสอบ
    plt.imshow(x_test[i], cmap='gray')
    prediction = np.argmax(model.predict(x_test[i].reshape(-1, 28, 28, 1)))
    plt.title(f"Prediction: {prediction}")
    plt.show()
    print(f"โมเดลทำนายว่าเป็นเลข: {prediction}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จะได้ผลลัพธ์เป็น&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnchlcnyzmzeg8kvppkh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnchlcnyzmzeg8kvppkh6.png" alt="Image description" width="435" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ต่อไป เราจะลองมาสร้างตัวอย่างใหม่เป็นการจำแนกภาพด้วยสี
&lt;/h1&gt;

&lt;p&gt;เนื่องจากมีการเปลี่ยนจากการใช้ตัวเลขเป็นสี จึงต้องมีการแก้ไขโค้ดตัวเดิมดังนี้&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;ขั้นตอนการทำงานของโมเดล&lt;/strong&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;นำเข้าไลบรารีที่จำเป็น&lt;/li&gt;
&lt;li&gt;กำหนดโฟลเดอร์ที่เก็บภาพสี&lt;/li&gt;
&lt;li&gt;ฟังก์ชันโหลดภาพและป้ายกำกับ&lt;/li&gt;
&lt;li&gt;โหลดข้อมูลสี&lt;/li&gt;
&lt;li&gt;แบ่งข้อมูลเป็นชุดฝึกและทดสอบ&lt;/li&gt;
&lt;li&gt;สร้างโมเดล CNN&lt;/li&gt;
&lt;li&gt;คอมไพล์โมเดล&lt;/li&gt;
&lt;li&gt;ฝึกโมเดล&lt;/li&gt;
&lt;li&gt;บันทึกโมเดล&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1.นำเข้าไลบรารีที่จำเป็น
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
import cv2
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import train_test_split
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราจะใช้ไลบรารีต่างๆ เช่น TensorFlow/Keras สำหรับสร้างโมเดล, OpenCV สำหรับจัดการรูปภาพ และ Scikit-learn สำหรับแบ่งข้อมูลฝึกและทดสอบ&lt;/p&gt;

&lt;h2&gt;
  
  
  2.กำหนดโฟลเดอร์ที่เก็บภาพสี
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;color_images_dir = "color_images"
color_names = ['red', 'green', 'blue', 'orange', 'yellow']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราจะใช้โฟลเดอร์ชื่อ "color_images" ซึ่งในนั้นจะมีโฟลเดอร์ย่อย เช่น "red", "green", "blue" ฯลฯ โดยแต่ละโฟลเดอร์จะเก็บรูปภาพของสีนั้นๆสำหรับการเทร&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fccd0hah17q00azglj6cg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fccd0hah17q00azglj6cg.png" alt="Image description" width="218" height="225"&gt;&lt;/a&gt;&lt;br&gt;
โดยที่เราจะนำภาพสีต่างๆทั้งหมดมาใส่ในโฟลเดอร์เพื่อนำมาเทรนให้กับAIนั่นเอง&lt;/p&gt;

&lt;h2&gt;
  
  
  3.ฟังก์ชันโหลดภาพและป้ายกำกับ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def load_color_images(color_folder, colors):
    X, y = []

    for color in colors:
        color_path = os.path.join(color_folder, color)
        if not os.path.exists(color_path):
            print(f"Folder for {color} does not exist.")
            continue

        for filename in os.listdir(color_path):
            if filename.endswith(".jpg") or filename.endswith(".png"):
                img_path = os.path.join(color_path, filename)
                img = cv2.imread(img_path)
                img = cv2.resize(img, (64, 64))  # ปรับขนาดเป็น 64x64
                img = img / 255.0  # แปลงค่าพิกเซลเป็น 0-1
                X.append(img)
                y.append(colors.index(color))  # กำหนดป้ายกำกับตามสี

    return np.array(X), np.array(y)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราจะโหลดภาพจากแต่ละโฟลเดอร์, ปรับขนาดเป็น 64x64 พิกเซล, นำไปแปลงเป็นค่าระหว่าง 0-1 และสร้างป้ายกำกับตามสีของภาพ&lt;/p&gt;

&lt;h2&gt;
  
  
  4.โหลดข้อมูลสี
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X, y = load_color_images(color_images_dir, color_names)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ใช้ฟังก์ชัน load_color_images เพื่อดึงข้อมูลภาพและป้ายกำกับ&lt;/p&gt;

&lt;h2&gt;
  
  
  5.แบ่งข้อมูลเป็นชุดฝึกและทดสอบ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราจะใช้ train_test_split เพื่อแบ่งข้อมูลเป็น 80% สำหรับฝึก และ 20% สำหรับทดสอบ&lt;/p&gt;

&lt;h2&gt;
  
  
  6.สร้างโมเดล CNN
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model = Sequential([
    Conv2D(32, (3,3), activation='relu', input_shape=(64, 64, 3)),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(128, activation='relu'),
    Dense(len(color_names), activation='softmax')
])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราจะใช้ Convolutional Neural Network (CNN) ซึ่งประกอบไปด้วย&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conv2D (ชั้นโครงข่ายประสาทเทียมแบบคอนโวลูชัน)&lt;/li&gt;
&lt;li&gt;MaxPooling2D (ลดขนาดภาพ)&lt;/li&gt;
&lt;li&gt;Flatten (แปลงข้อมูลเป็นเวกเตอร์)&lt;/li&gt;
&lt;li&gt;Dense (Fully Connected Layer)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7.คอมไพล์โมเดล
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model.compile(optimizer=Adam(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ใช้ Adam Optimizer และ Sparse Categorical Crossentropy เป็นค่าความสูญเสีย&lt;/p&gt;

&lt;h2&gt;
  
  
  8.ฝึกโมเดล
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ให้โมเดลเรียนรู้จากข้อมูลที่เรามี โดยกำหนด epochs = 10&lt;/p&gt;

&lt;h2&gt;
  
  
  9.บันทึกโมเดล
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model.save('color_classification_model.h5')
print("Model saved successfully!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เมื่อโมเดลฝึกเสร็จแล้ว เราจะเซฟเป็นไฟล์ .h5 เพื่อให้สามารถโหลดกลับมาใช้งานได้&lt;/p&gt;

&lt;p&gt;จะได้ผลลัพธ์เป็น&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotkfqh4f7k01t13m1d7r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotkfqh4f7k01t13m1d7r.png" alt="Image description" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ในส่วนของการทดสอบ
&lt;/h2&gt;

&lt;p&gt;โดยการทำงานของโค้ดจะมี&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;นำเข้าไลบรารีที่จำเป็น&lt;/li&gt;
&lt;li&gt;โหลดโมเดลที่ฝึกเสร็จแล้ว&lt;/li&gt;
&lt;li&gt;ฟังก์ชันทำนายสีจากภาพ&lt;/li&gt;
&lt;li&gt;ฟังก์ชันทดสอบภาพทั้งหมดในโฟลเดอร์&lt;/li&gt;
&lt;li&gt;กำหนดโฟลเดอร์สำหรับทดสอบ&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1.นำเข้าไลบรารีที่จำเป็น
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import load_model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราจะใช้ TensorFlow/Keras ในการโหลดโมเดล, OpenCV ในการจัดการภาพ และ Matplotlib ในการแสดงผล&lt;/p&gt;

&lt;h2&gt;
  
  
  2.โหลดโมเดลที่ฝึกเสร็จแล้ว
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model = load_model('color_classification_model.h5')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราโหลดโมเดลจากไฟล์ color_classification_model.h5 ซึ่งเป็นโมเดลที่เราฝึกไว้&lt;/p&gt;

&lt;h2&gt;
  
  
  3.ฟังก์ชันทำนายสีจากภาพ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def predict_color(image_path):
    img = cv2.imread(image_path)
    if img is None:
        print(f"Unable to load image at {image_path}. Please check the path.")
        return

    img = cv2.resize(img, (64, 64))  # ปรับขนาดเป็น 64x64
    img = img / 255.0  # ปรับค่าให้เป็น 0-1
    prediction = model.predict(np.expand_dims(img, axis=0))
    predicted_color = np.argmax(prediction)  # หา index ของสีที่ทำนายได้

    # รายชื่อสี
    color_names = ['red', 'green', 'blue', 'orange', 'yellow']
    predicted_color_name = color_names[predicted_color]

    print(f"Predicted color for {image_path}: {predicted_color_name.upper()}")  # แสดงชื่อสีเป็นตัวใหญ่

    # แสดงภาพที่ทำนาย
    img = (img * 255).astype(np.uint8)  # แปลงกลับเป็น uint8 เพื่อแสดงภาพ
    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    plt.title(f"Predicted Color: {predicted_color_name.upper()}", fontsize=20)  # ใช้ตัวใหญ่ใน title
    plt.axis('off')  # ไม่ให้แสดงแกน
    plt.show()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ฟังก์ชันนี้จะ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;โหลดภาพจากพาธที่กำหนด&lt;/li&gt;
&lt;li&gt;ปรับขนาดเป็น 64x64 พิกเซล&lt;/li&gt;
&lt;li&gt;แปลงค่าสีให้อยู่ในช่วง 0-1&lt;/li&gt;
&lt;li&gt;ใช้โมเดลทำนายสีของภาพ&lt;/li&gt;
&lt;li&gt;แสดงผลชื่อสีที่ทำนายได้&lt;/li&gt;
&lt;li&gt;แสดงภาพพร้อมชื่อสี&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4.ฟังก์ชันทดสอบภาพทั้งหมดในโฟลเดอร์
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def test_all_images_in_folder(folder_path):
    if not os.path.exists(folder_path):  # ถ้าโฟลเดอร์ไม่มี ให้สร้าง
        print(f"Folder {folder_path} does not exist. Creating folder...")
        os.makedirs(folder_path)
    else:
        print(f"Folder {folder_path} exists.")

    # ตรวจสอบและทำนายทุกภาพในโฟลเดอร์
    for filename in os.listdir(folder_path):
        if filename.endswith(".jpg") or filename.endswith(".png"):
            image_path = os.path.join(folder_path, filename)
            predict_color(image_path)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ฟังก์ชันนี้จะ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ตรวจสอบว่ามีโฟลเดอร์เก็บภาพหรือไม่ ถ้าไม่มีให้สร้าง&lt;/li&gt;
&lt;li&gt;วนลูปตรวจสอบทุกไฟล์ในโฟลเดอร์&lt;/li&gt;
&lt;li&gt;ทำนายสีของทุกภาพที่พบ&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5.กำหนดโฟลเดอร์สำหรับทดสอบ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test_folder = "color_images/test_images"
test_all_images_in_folder(test_folder)  # ทดสอบทุกภาพในโฟลเดอร์
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เราจะใช้โฟลเดอร์ "color_images/test_images" สำหรับใส่ภาพที่ต้องการทดสอบ&lt;/p&gt;

&lt;p&gt;จะได้ผลลัพธ์เป็น&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzznss8nh8vgx46mbgn2j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzznss8nh8vgx46mbgn2j.png" alt="Image description" width="552" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3159mxya5jhmffuhtnb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3159mxya5jhmffuhtnb7.png" alt="Image description" width="547" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  สรุปเนื้อหา
&lt;/h1&gt;

&lt;p&gt;จากบทความนี้ เราได้เรียนรู้การสร้างโมเดล Machine Learning สำหรับการจำแนกภาพโดยใช้ TensorFlow และ Keras โมเดลที่ใช้คือ CNN ซึ่งเหมาะสำหรับการประมวลผลภาพและสามารถใช้งานได้จริงในหลายๆ ด้าน เช่น การจดจำลายมือ การวิเคราะห์ภาพทางการแพทย์ และอื่นๆ&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
