Object Detection and Management System Predicted Images to Folders
Introduction
การจัดการชุดรูปภาพจำนวนมากอาจกลายเป็นงานที่น่ากังวล เมื่อเรามีรูปภาพจำนวนมาก การค้นหารูปภาพเฉพาะหรือรูปที่เราต้องการก็กลายเป็นเรื่องที่ท้าทายมากขึ้น เพื่อแก้ไขปัญหานี้ สามารถใช้ระบบตรวจหาวัตถุอัตโนมัติ ที่ได้จาก Roboflow ในบทความที่แล้ว -> คลิก
และในบทความนี้เราจะจัดการรูปภาพโดยใช้เทคนิคการมองเห็นด้วย computer vision เพื่อตรวจจับวัตถุภายในภาพและกระจายวัตถุเหล่านั้นไปยังโฟลเดอร์ที่คาดการณ์เอาไว้อย่างชาญฉลาด ทำให้กระบวนการจัดการโฟลเดอร์ง่ายขึ้น ประหยัดเวลาและเพิ่มประสิทธิภาพในการทำงานอีกด้วย
Let’s get started!
Step 1 : ขั้นตอนแรกเราต้องสร้าง folders ที่ต้องการจัดเก็บรูปภาพที่จะถูกทำนาย (ในที่นี้จะกำหนดให้รูปภาพทุกรูปที่ยังไม่ได้ทำนายอยู่ใน folders ผสมป้าย)
Step 2 : หลังจากนั้นไปที่ Command Prompt เปิดใช้งาน Jupyter notebook เพื่อ Run code ในขั้นตอนถัดไป
step 3 : ไปที่ https://roboflow.com/ โปรเจกต์ของเราเพื่อเอา model ที่ได้ไปใช้งาน
เมื่อเชื่อมต่อเสร็จแล้วจะขึ้นดังนี้…
loading Roboflow workspace...
loading Roboflow project...
step 4: เขียน code เชื่อมต่อไปยัง folders ที่เราต้องการ โดยกำหนด path ของเราให้ถูกต้อง
from PIL import Image
import os
import shutil
import time
# เก็บรูปทุกรูปที่รวมอยู่ใน folders เดียว
source_dir = r"C:\Users\asus\Desktop\ผสมป้าย"
# โดยกำหนด path ของเราให้ถูกต้อง
destination_dirs = {
#'ชื่อ class' : # เส้นทาง path
'PTT_OR': r"C:\Users\asus\Desktop\PTT_OR",
'Bangchak_Greenmile': r"C:\Users\asus\Desktop\Bangchak_Greenmile",
'Sprite': r"C:\Users\asus\Desktop\Sprite",
"
"
"
"
# จนครบทุก folders ที่เราต้องการส่งรูปภาพไปเก็บไว้
}
# Define the target width and height for resizing
target_width = 1248
target_height = 800
# Get a list of image files in the source directory
image_files = [
os.path.join(source_dir, filename)
for filename in os.listdir(source_dir)
if filename.lower().endswith(('.jpg', '.jpeg', '.png'))
]
for image_file in image_files:
# Open the image file
image = Image.open(image_file)
# Resize the image
resized_image = image.resize((target_width, target_height))
# Save the resized image to a temporary file
temp_file = r"C:\Users\asus\Desktop\resized_image.png" # Use a PNG file for temporary storage
resized_image.save(temp_file)
# Check if the image file is a supported format
if image_file.lower().endswith(('.jpg', '.jpeg', '.png')):
# Perform prediction on the resized image
result = model.predict(temp_file, confidence=85, overlap=30).json()
print(result)
# Check if there is a prediction result
if 'predictions' in result and len(result['predictions']) > 0:
# Get the predicted class
predicted_class = result['predictions'][0]['class']
# Move the image file to the corresponding destination directory based on the predicted class
if predicted_class in destination_dirs:
time.sleep(1) # Add a 1-second delay
try:
shutil.move(image_file, destination_dirs[predicted_class])
except PermissionError:
print(f"Permission denied. Skipping file: {image_file}")
else:
print(f"No destination directory defined for class: {predicted_class}. Skipping...")
else:
print(f"No prediction for image: {image_file}. Skipping...")
else:
print(f"Unsupported file format: {image_file}. Skipping...")
# Delete the temporary file
os.remove(temp_file)
หลังจากเริ่มการทำงาน จะแสดงผลดังนี้…
step 5 : เท่านี้รูปภาพทุกรูปก็ถูกกระจายออกไปตาม folders ที่เราต้องการแล้ว
Mission Complete ^^
ระบบนี้ช่วยลดความซ้ำซ้อนในการคัดแยกรูปภาพในโฟลเดอร์และช่วยให้เราค้นหาภาพได้ง่ายมากขึ้น และประหยัดเวลาได้มากจริงๆ
สุดท้ายบทความนี้เป็นการใช้ Object Detection โดยเรียกใช้ผ่านทาง Roboflow ถ้าในอนาคตเราต้องการทำ Object Detection กับชนิดของวัตถุใหม่ๆ เราต้องป้อนข้อมูลรูปภาพของชนิดวัตถุเหล่านั้น และทำ annotate ในการสร้างกรอบสี่เหลี่ยม (bounding box) รอบวัตถุนั้น ในแต่ละรูปภาพให้โมเดลเรียนรู้ใหม่ตั้งแต่ต้
โมเดลถึงจะสามารถ Detect รูปภาพของวัตถุชนิดใหม่ๆ ที่เราต้องการได้ …
ผู้เขียนขอขอบคุณ ❤
เนื้อหาในบทความมีความผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยครับ