ایجاد عنوانی از کلمات کلیدی برای تصویر

مدل های یادگیری عمیق امروزه در حل مسائل مختلف بر روی تصاویر و ویدیوها کاربرد فراوانی دارند. یکی از این مسائل، تولید عنوان بر اساس تصاویر ورودی است. در این مقاله، قصد داریم با استفاده از دو مدل یادگیری عمیق پیش آموزش داده شده، یک عنوان برای تصویر ورودی ایجاد کنیم.

مدل اول که از مدل ResNet50 بدون لایه‌ی کلاس بالا برای استخراج ویژگی‌ها استفاده می‌کنیم، برای تشخیص ویژگی‌های بصری از تصویر استفاده می‌شود. این مدل با استفاده از یک شبکه عصبی عمیق، ویژگی‌های بالادستی متصل به کلاس‌های مختلف تصاویر را استخراج می‌کند.

مدل دوم که از یک مدل شبکه عصبی عمیق به نام SSD300 برای تشخیص اشیاء در تصویر استفاده می‌کنیم. این مدل قادر است تا چندین شیء مختلف را در یک تصویر تشخیص دهد. برای اینکه مدل بتواند اشیاء را به درستی تشخیص دهد، از یک نقشه برچسب استفاده می‌کنیم که شاخص کلاس‌ها را به نام‌های اجسام مختلف نگاشت می‌کند.

با ادغام قابلیت‌های این دو مدل، ابتدا با استفاده از مدل ResNet50 ویژگی‌های تصویر را استخراج می‌کنیم. سپس با استفاده از مدل SSD300 اشیاء موجود در تصویر را تشخیص داده و نام آن‌ها را استخراج می‌کنیم. در نهایت، با استفاده از نام‌های اشیاء شناسایی شده، یک عنوان برای تصویر ایجاد می‌کنیم.

در مجموع، این روش ترکیب قابلیت‌های یک مدل برای استخراج ویژگی‌ها و یک مدل دیگر برای تشخیص اشیاء، منجر به ایجاد یک عنوان بر اساس اشیاء شناسایی شده در تصویر می‌شود.


import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

# Load pre-trained ResNet50 model
model = ResNet50(weights='imagenet')

def generate_title(image_path):
# Load and preprocess the image
img = tf.keras.preprocessing.image.load_img(image_path, target_size=(224, 224))
img_array = tf.keras.preprocessing.image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)

# Make predictions
predictions = model.predict(img_array)
# Decode predictions
decoded_predictions = decode_predictions(predictions, top=10)[0]

# Extract labels from predictions
labels = [label for (_, label, _) in decoded_predictions]

# Generate title based on labels
title = " ".join(labels)

return title

# Example usage
image_path = "example_image.jpg"
title = generate_title(image_path)
print("Generated Title:", title)

 

تصحیح جهت تصویر کارت اسکن شده با پایتون

یکی دیگر از کاربردهای مسئله تضیح داده شده در نوشته “کشف تصویر کوچک درون تصویر بزرگ با استفاده از پایتون و OpenCV” این هست که شما با استفاده از این کد می توانید یک نشانه خاص در کارت شناسایی را پیدا کرده و بر اساس آن تغییرات خاصی را اعمال کنید.

برای نمونه ما در اینجا یک نوع گواهینامه نمونه را که به صورت برعکس اسکن شده است به برنامه داده ایم و پس از پیدا کردن نشانه موجود در گوشه سمت راست و بالای کارت آن را به تعداد لازم rotate می کنیم تا تصویر گواهینامه با جهت درست نشان داده شود.

نمونه کد:

import cv2

def find_image_in_larger_image(small_image, large_image):

# Read images

# Check if images are loaded successfully

if small_image is None or large_image is None:

print("Error: Unable to load images.")

return None

# Get dimensions of both images

small_height, small_width = small_image.shape

large_height, large_width = large_image.shape

# Find the template (small image) within the larger image

result = cv2.matchTemplate(large_image, small_image, cv2.TM_CCOEFF_NORMED)

# Define a threshold to consider a match

threshold = 0.6

# Find locations where the correlation coefficient is greater than the threshold

locations = cv2.findNonZero((result >= threshold).astype(int))

# If no match is found

if locations is None:

return None

# Determine position of the matched areas

matched_positions = []

for loc in locations:

x, y = loc[0]

if x < large_width / 2:

position_x = "left"

else:

position_x = "right"

if y < large_height / 2:

position_y = "top"

else:

position_y = "bottom"

matched_positions.append((position_x, position_y))

return matched_positions

# Example usage

small_image_path = "mark.jpg"

large_image_path = "card.jpg"

small_image = cv2.imread(small_image_path, cv2.IMREAD_GRAYSCALE)

large_image = cv2.imread(large_image_path, cv2.IMREAD_GRAYSCALE)

rotated_large_image=large_image

positions = find_image_in_larger_image(small_image, large_image)

max_rotation = 10 # Set the maximum rotation limit

if positions:

position_x, position_y = positions[0]

print("Position: {}, {}".format(position_x, position_y))

while max_rotation>0:

max_rotation-=1

rotated_large_image = cv2.rotate(rotated_large_image, cv2.ROTATE_90_CLOCKWISE)

positions = find_image_in_larger_image(small_image, rotated_large_image)

if positions:

position_x, position_y = positions[0]

print("Position: {}, {}".format(position_x, position_y))

if(position_x=='right' and position_y=='top'):

cv2.imshow("Mark", small_image)

cv2.imshow("Original", large_image)

cv2.imshow("Result", rotated_large_image)

cv2.waitKey(0)

cv2.destroyAllWindows()

max_rotation=0

else:

print("No match found after {} rotations.".format(10-max_rotation))

else:

print("No match found after {} rotations.".format(10-max_rotation))

 

برای مشاهده در گیت هاب اینجا کلیک کنید.

تشخیص چهره با HOG و MTCNN

بررسی تکنیک‌های تشخیص چهره: HOG در مقابل MTCNN

تشخیص چهره یک کار اساسی در بینایی کامپیوتر با برنامه های کاربردی از سیستم های امنیتی گرفته تا رسانه های اجتماعی است. دو روش محبوب برای تشخیص چهره عبارتند از: هیستوگرام گرادیان های جهت دار (HOG) و شبکه های کانولوشن چند وظیفه ای (MTCNN). در این پست وبلاگ، هر دو تکنیک را بررسی خواهیم کرد و یک نمای کلی از اصول آنها ارائه می دهیم و کد پایتون را برای هر کدام به نمایش می گذاریم.

هیستوگرام گرادیان های جهت دار (HOG)

درک HOG

HOG یک توصیفگر ویژگی است که به طور گسترده برای تشخیص اشیا استفاده می شود. با تجزیه و تحلیل توزیع گرادیان ها در یک تصویر کار می کند و آن را به ویژه برای تشخیص اجسام با اشکال و بافت های متمایز موثر می کند.

چگونه کار می کند

الگوریتم HOG یک تصویر را به سلول های کوچک و همپوشانی تقسیم می کند، جهت گیری گرادیان را در هر سلول محاسبه می کند و سپس یک هیستوگرام از این جهت ها ایجاد می کند. سپس این هیستوگرام ها به هم متصل می شوند تا بردار ویژگی نهایی را تشکیل دهند که برای آموزش ماشین بردار پشتیبان (SVM) یا طبقه بندی کننده دیگر استفاده می شود.

مثال کد پایتون

ما با بررسی تشخیص چهره مبتنی بر HOG با استفاده از OpenCV در پایتون شروع خواهیم کرد. کد ارائه شده یک تصویر را بارگیری می کند، آشکارساز HOG را اعمال می کند، و کادرهای مرزی را در اطراف چهره های شناسایی شده ترسیم می کند.

در GitHub مشاهده کنید

شبکه های کانولوشن آبشاری چند کاره (MTCNN)

آشنایی با MTCNN

MTCNN یک مدل تشخیص چهره مبتنی بر یادگیری عمیق است که برای کنترل جهت گیری ها و مقیاس های مختلف چهره طراحی شده است. این شامل سه مرحله است: تشخیص چهره، رگرسیون جعبه مرزی، و محلی سازی نقطه عطف چهره.

چگونه کار می کند

MTCNN به صورت آبشاری عمل می کند و هر مرحله نتایج مرحله قبلی را اصلاح می کند. مرحله اول نواحی بالقوه صورت را شناسایی می کند، مرحله دوم جعبه های مرزی را اصلاح می کند، و مرحله سوم نقاط عطف صورت را تعیین می کند. اطلاعات ترکیبی تشخیص چهره دقیق را فراهم می کند.

مثال کد پایتون

در مرحله بعد، تشخیص چهره را با استفاده از MTCNN با کمک کتابخانه mtcnn در پایتون بررسی خواهیم کرد. کد یک تصویر را بارگیری می‌کند، آشکارساز MTCNN را اعمال می‌کند و تصویر را با کادرهای محدود در اطراف چهره‌های شناسایی شده نمایش می‌دهد.

در GitHub مشاهده کنید

انتخاب روش مناسب

در حالی که هر دو HOG و MTCNN برای تشخیص چهره موثر هستند، هر کدام نقاط قوت و محدودیت های خود را دارند. HOG قوی و از نظر محاسباتی کارآمد است و آن را برای کاربردهای بلادرنگ مناسب می کند. از سوی دیگر، MTCNN در مدیریت جهت گیری های مختلف چهره برتر است و برای سناریوهایی که ممکن است چهره ها در مقیاس ها و زوایای مختلف ظاهر شوند، مناسب است.

در کد پایتون همراه، نحوه پیاده‌سازی هر دو تکنیک و ارائه بینش در مورد استفاده از آنها را نشان می‌دهیم. با خیال راحت کد را آزمایش کنید و کشف کنید که کدام روش به بهترین وجه مناسب مورد استفاده خاص شما است.

برای توضیح دقیق کد، دستورالعمل‌های استفاده، و بحث در مورد عوامل مؤثر بر دقت تشخیص، به خواندن ادامه دهید.

درک هیستوگرام گرادیان های جهت دار (HOG) برای تشخیص چهره

معرفی
در حوزه بینایی کامپیوتری، تشخیص چهره به عنوان یک کار مهم با برنامه های کاربردی از امنیت و نظارت گرفته تا عکاسی و رسانه های اجتماعی عمل می کند. یکی از تکنیک های قدرتمندی که برای تشخیص اشیا، از جمله چهره ها به کار می رود، هیستوگرام گرادیان های جهت دار (HOG) است. در این مقاله، اصول پشت HOG، متدولوژی آن و پیاده سازی آن در پایتون با استفاده از کتابخانه OpenCV را بررسی خواهیم کرد.

مبانی HOG
HOG چیست؟
HOG یک توصیفگر ویژگی است که توزیع گرادیان های شدت در یک تصویر را ثبت می کند. HOG که توسط Navneet Dalal و Bill Triggs در سال 2005 توسعه یافت، ثابت کرده است که در وظایف تشخیص اشیا، به ویژه برای تشخیص عابران پیاده و چهره، بسیار موثر است.

HOG چگونه کار می کند؟
HOG بر این فرض عمل می کند که شکل و ظاهر محلی یک شی را می توان با توزیع گرادیان های شدت یا جهت های لبه مشخص کرد. با تقسیم یک تصویر به سلول های کوچک و همپوشانی، HOG جهت گیری گرادیان را در هر سلول محاسبه می کند و هیستوگرام هایی از این جهت ها ایجاد می کند. سپس این هیستوگرام ها به هم متصل می شوند تا یک بردار ویژگی را تشکیل دهند که به عنوان نمایشی از ظاهر جسم عمل می کند.

مراحل محاسبه HOG:
محاسبه گرادیان:
شیب تصویر را با استفاده از تکنیک هایی مانند عملگرهای Sobel برای شناسایی لبه ها محاسبه کنید.
تقسیم سلولی:
تصویر را به سلول های کوچک تقسیم کنید تا اطلاعات شیب محلی را بگیرید.
محاسبه هیستوگرام:
هیستوگرام جهت گیری های گرادیان در هر سلول را محاسبه کنید.
عادی سازی بلوک:
گروه‌هایی از سلول‌ها که به بلوک‌ها معروف هستند را عادی کنید تا تغییرات نور و کنتراست را در نظر بگیرید.
شکل گیری بردار ویژگی:
هیستوگرام های بلوک نرمال شده را به هم متصل کنید تا بردار ویژگی نهایی را تشکیل دهید.
پیاده سازی HOG در پایتون
حالا بیایید با استفاده از پایتون و OpenCV به جنبه عملی HOG بپردازیم. اسکریپت پایتون زیر تشخیص چهره مبتنی بر HOG را نشان می دهد:

import cv2

# Load the image

image = cv2.imread(‘path/to/your/image.jpg’)

# Convert the image to grayscale

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Create a HOG face detector

hog_face_detector = cv2.HOGDescriptor()

hog_face_detector.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

# Detect faces in the image using HOG

faces_hog, _ = hog_face_detector.detectMultiScale(gray_image)

# Draw bounding boxes around detected faces

for (x, y, w, h) in faces_hog:

cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)

# Display the image with bounding boxes

cv2.imshow(‘HOG Face Detection’, image)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

ملاحظات و نکات

تنظیم پارامترها:
آشکارسازهای مبتنی بر HOG اغلب دارای پارامترهایی هستند که می توانند برای عملکرد بهتر تنظیم شوند. پارامترهایی مانند ضریب مقیاس و حداقل اندازه اشیاء شناسایی شده را برای دستیابی به نتایج بهینه برای مورد استفاده خاص خود آزمایش کنید.

کارایی محاسباتی:
یکی از نقاط قوت HOG کارایی محاسباتی آن است که آن را برای کاربردهای بلادرنگ مناسب می کند. با این حال، اندازه پنجره تشخیص و پیچیدگی تصویر می تواند بر زمان پردازش تأثیر بگذارد.

محدودیت ها:
در حالی که HOG در بسیاری از سناریوها موثر است، ممکن است با چالش های خاصی مانند تغییرات در شرایط نوری و پس زمینه های پیچیده دست و پنجه نرم کند. درک این محدودیت ها هنگام انتخاب روش مناسب برای برنامه شما ضروری است.

نتیجه
هیستوگرام گرادیان های جهت دار (HOG) به سنگ بنای تشخیص اشیا تبدیل شده است و ابزاری قوی و کارآمد محاسباتی برای ثبت ویژگی های اساسی اشیاء در تصاویر ارائه می دهد. در زمینه تشخیص چهره، HOG یک تکنیک قابل اعتماد و همه کاره است.

با درک مفاهیم اساسی پشت HOG و آزمایش اجرای آن در پایتون، می توانید بینش ارزشمندی در مورد قابلیت ها و محدودیت های آن به دست آورید. مانند هر تکنیک بینایی کامپیوتری، تنظیم دقیق و سفارشی سازی کلید دستیابی به نتایج بهینه برای مورد استفاده خاص شما است.

در قسمت بعدی این مجموعه، روش قدرتمند دیگری برای تشخیص چهره، شبکه‌های کانولوشن آبشاری چند وظیفه‌ای (MTCNN) را بررسی می‌کنیم که درک جامعی از تکنیک‌های مختلف موجود برای این کار حیاتی بینایی رایانه ارائه می‌دهد. گوش به زنگ باشید!

کشف تصویر کوچک درون تصویر بزرگ با استفاده از پایتون و OpenCV

در این پست، ما یکی از کاربردهای جالب پردازش تصویر را با استفاده از زبان برنامه‌نویسی پایتون و کتابخانه OpenCV بررسی می‌کنیم. موضوع این پست کشف یک تصویر کوچک درون یک تصویر بزرگ است. این کاربرد می‌تواند برای شناسایی الگوها، تطابق تصاویر و یا حتی تشخیص چهره‌ها استفاده شود.

ابتدا باید اطمینان حاصل کنیم که کتابخانه OpenCV در محیط پایتون نصب شده باشد. اگر هنوز نصب نکرده‌اید، می‌توانید آن را با استفاده از دستورات زیر نصب کنید:

pip install opencv-python

pip install opencv-python-headless

حالا که OpenCV نصب شده است، می‌توانیم به کد پایتون برای کشف تصویر درون تصویر بپردازیم. کد زیر این کار را انجام می‌دهد:

import cv2

def find_image_in_larger_image(small_image_path, large_image_path):

# تصاویر را بخوانید

small_image = cv2.imread(small_image_path, cv2.IMREAD_GRAYSCALE)

large_image = cv2.imread(large_image_path, cv2.IMREAD_GRAYSCALE)

# بررسی موفقیت بارگذاری تصاویر

if small_image is None or large_image is None:

print("خطا: تصاویر قابل بارگذاری نیستند.")

return None

# ابعاد هر دو تصویر را دریافت کنید

small_height, small_width = small_image.shape

large_height, large_width = large_image.shape

# الگو (تصویر کوچک) را در داخل تصویر بزرگ پیدا کنید

result = cv2.matchTemplate(large_image, small_image, cv2.TM_CCOEFF_NORMED)

# آستانه‌ای تعیین کنید تا یک تطابق را در نظر بگیرید

threshold = 0.8

# مکان‌هایی را پیدا کنید که ضریب همبستگی بیشتر از آستانه باشد

locations = cv2.findNonZero((result >= threshold).astype(int))

# اگر هیچ تطابقی پیدا نشد

if locations is None:

print("هیچ تطابقی یافت نشد.")

return None

# مستطیل‌ها را دور محل‌های تطابقی رسم کنید

for loc in locations:

top_left = loc[0]

bottom_right = (top_left[0] + small_width, top_left[1] + small_height)

cv2.rectangle(large_image, top_left, bottom_right, (0, 255, 0), 2)

# نتیجه را نمایش دهید (اختیاری)

cv2.imshow("نتیجه", large_image)

cv2.waitKey(0)

cv2.destroyAllWindows()

return locations

# مثال استفاده

small_image_path = "تصویر_کوچک.jpg"

large_image_path = "تصویر_بزرگ.jpg"

find_image_in_larger_image(small_image_path, large_image_path)

 

برای مشاهده کد در گیت هاب کلیک کنید