Object Detection and Management System Predicted Images to Folders

nattakit pinyorattanakit
3 min readJul 17, 2023

--

pixabay.com

Introduction

การจัดการชุดรูปภาพจำนวนมากอาจกลายเป็นงานที่น่ากังวล เมื่อเรามีรูปภาพจำนวนมาก การค้นหารูปภาพเฉพาะหรือรูปที่เราต้องการก็กลายเป็นเรื่องที่ท้าทายมากขึ้น เพื่อแก้ไขปัญหานี้ สามารถใช้ระบบตรวจหาวัตถุอัตโนมัติ ที่ได้จาก Roboflow ในบทความที่แล้ว -> คลิก

และในบทความนี้เราจะจัดการรูปภาพโดยใช้เทคนิคการมองเห็นด้วย computer vision เพื่อตรวจจับวัตถุภายในภาพและกระจายวัตถุเหล่านั้นไปยังโฟลเดอร์ที่คาดการณ์เอาไว้อย่างชาญฉลาด ทำให้กระบวนการจัดการโฟลเดอร์ง่ายขึ้น ประหยัดเวลาและเพิ่มประสิทธิภาพในการทำงานอีกด้วย

Let’s get started!

Step 1 : ขั้นตอนแรกเราต้องสร้าง folders ที่ต้องการจัดเก็บรูปภาพที่จะถูกทำนาย (ในที่นี้จะกำหนดให้รูปภาพทุกรูปที่ยังไม่ได้ทำนายอยู่ใน folders ผสมป้าย)

ต้องสร้าง folders ให้ตรงตาม class ที่เราได้กำหนดเอาไว้ในบทความที่แล้ว ซึ่งมี 40 class ก็คือจำนวนชนิดของโฆษณาที่แตกต่างกัน

Step 2 : หลังจากนั้นไปที่ Command Prompt เปิดใช้งาน Jupyter notebook เพื่อ Run code ในขั้นตอนถัดไป

step 3 : ไปที่ https://roboflow.com/ โปรเจกต์ของเราเพื่อเอา model ที่ได้ไปใช้งาน

Take the code from this section and run it on Jupyter Notebook.

เมื่อเชื่อมต่อเสร็จแล้วจะขึ้นดังนี้…

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)

หลังจากเริ่มการทำงาน จะแสดงผลดังนี้…

The details will be the Confidence value and send the predicted image to the folders that we have specified.

step 5 : เท่านี้รูปภาพทุกรูปก็ถูกกระจายออกไปตาม folders ที่เราต้องการแล้ว

Mission Complete ^^

ระบบนี้ช่วยลดความซ้ำซ้อนในการคัดแยกรูปภาพในโฟลเดอร์และช่วยให้เราค้นหาภาพได้ง่ายมากขึ้น และประหยัดเวลาได้มากจริงๆ

สุดท้ายบทความนี้เป็นการใช้ Object Detection โดยเรียกใช้ผ่านทาง Roboflow ถ้าในอนาคตเราต้องการทำ Object Detection กับชนิดของวัตถุใหม่ๆ เราต้องป้อนข้อมูลรูปภาพของชนิดวัตถุเหล่านั้น และทำ annotate ในการสร้างกรอบสี่เหลี่ยม (bounding box) รอบวัตถุนั้น ในแต่ละรูปภาพให้โมเดลเรียนรู้ใหม่ตั้งแต่ต้
โมเดลถึงจะสามารถ Detect รูปภาพของวัตถุชนิดใหม่ๆ ที่เราต้องการได้ …

ผู้เขียนขอขอบคุณ ❤
เนื้อหาในบทความมีความผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยครับ

--

--

nattakit pinyorattanakit

AI Engineering and data science ———————————————————————— https://misternattakit.com