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

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

مدل اول که از مدل 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)

 

Hadoop: راه‌اندازی یک خوشه تک‌گره‌ای

هدف
این سند توضیح می‌دهد چگونه یک نصب Hadoop تک‌گره‌ای را راه‌اندازی و پیکربندی کنید تا بتوانید به سرعت عملیات ساده‌ای با استفاده از MapReduce Hadoop و سیستم فایل توزیع‌شده Hadoop (HDFS) انجام دهید.

توجه: تمام خوشه‌های Hadoop تولیدی از Kerberos برای احراز هویت تماس‌گیران و دسترسی امن به داده‌های HDFS استفاده می‌کنند، همچنین دسترسی محدود به خدمات محاسباتی (YARN و غیره) را محدود می‌کنند.این دستورالعمل‌ها شامل ادغام با هیچ سرویس Kerberos نمی‌شوند، همه کسانی که یک خوشه تولیدی را ایجاد می‌کنند باید اتصال به زیرساخت Kerberos سازمان خود را به عنوان بخش کلیدی از پیاده‌سازی در نظر بگیرند.

پیش‌نیازها
پلتفرم‌های پشتیبانی شده
GNU/Linux به عنوان یک پلتفرم توسعه و تولید پشتیبانی می‌شود. Hadoop در خوشه‌های GNU/Linux با 2000 گره نشان داده شده است.

نرم‌افزارهای مورد نیاز

– باید Java™ نصب باشد. نسخه‌های پیشنهادی Java در HadoopJavaVersions توصیف شده است.
– ssh باید نصب شده و sshd باید در حال اجرا باشد تا از اسکریپت‌های Hadoop استفاده شود که دیمون‌های Hadoop را از راه دور مدیریت می‌کنند، در صورت استفاده از اسکریپت‌های start و stop اختیاری. علاوه بر این، توصیه می‌شود که pdsh نیز نصب شود تا مدیریت بهتری از منابع ssh انجام شود.

نصب نرم‌افزار
اگر خوشه شما دارای نرم‌افزارهای لازم نباشد، باید آن‌ها را نصب کنید.

برای مثال در لینوکس اوبونتو:

$ sudo apt-get install ssh
$ sudo apt-get install pdsh

دانلود
برای دریافت یک توزیع Hadoop، یک نسخه پایدار اخیر را از یکی از آینه‌های دانلود Apache بارگیری کنید.
آماده‌سازی برای شروع خوشه Hadoop
بسته‌ی Hadoop دانلود شده را باز کنید. در توزیع، فایل etc/hadoop/hadoop-env.sh را ویرایش کنید و برخی پارامترها را به شکل زیر تعریف کنید:

# مقدار دهی به ریشه نصب جاوا

export JAVA_HOME=/usr/java/latest

امتحان دستور زیر را انجام دهید:

$ bin/hadoop

این دستور مستندات استفاده از اسکریپت hadoop را نمایش می‌دهد.

اکنون شما آماده شروع خوشه Hadoop خود در یکی از سه حالت پشتیبانی شده هستید:

– حالت محلی (Standalone)
– حالت نیمه-توزیع‌شده
– حالت کاملاً توزیع‌شده

عملیات مستقل
به طور پیش‌فرض، Hadoop برای اجرا در حالت غیرتوزیع‌شده تنظیم شده است، به عنوان یک فرآیند جاوا تکی این برای اشکال‌زدایی مفید است.

مثال زیر دایرکتوری conf را کپی می‌کند تا برای ورود به استفاده شود و سپس هر تطابق با عبارت منظم داده شده را پیدا و نمایش می‌دهد. خروجی به دایرکتوری خروجی داده می‌شود.

$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output ‘dfs[a-z.]+’
$ cat output/*

عملیات نیمه-توزیع‌شده
Hadoop همچنین می‌تواند در حالت نیمه-توزیع‌شده بر روی یک گره تکی اجرا شود که در آن هر دیمون Hadoop در یک پردازش جاوا جداگانه اجرا می‌شود.

پیکربندی
از موارد زیر استفاده کنید:

etc/hadoop/core-site.xml:

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml:

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
راه‌اندازی اتصال SSH بدون نیاز به گذرواژه
اکنون بررسی کنید که بتوانید به localhost بدون نیاز به گذرواژه متصل شوید:

$ ssh localhost
اگر نتوانید بدون نیاز به گذرواژه به localhost متصل شوید، دستورات زیر را اجرا کنید:

$ ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

اجرا
دستورات زیر برای اجرای یک کار MapReduce به صورت محلی استفاده می‌شوند. اگر می‌خواهید یک کار را بر روی YARN اجرا کنید، راهنمای YARN در یک گره تک را ببینید.

فرمت داده‌سازی فایل سیستم:

$ bin/hdfs namenode -format

شروع دیمون NameNode و دیمون DataNode:

 

$ sbin/start-dfs.sh

خروجی لاگ دیمون Hadoop در دایرکتوری $HADOOP_LOG_DIR نوشته می‌شود (به صورت پیش‌فرض در $HADOOP_HOME/logs).

صفحه وب NameNode را مشاهده کنید؛ به طور پیش‌فرض در دسترس است:

NameNode – http://localhost:9870/

پوشه‌های HDFS لازم برای اجرای کارهای MapReduce را ایجاد کنید:

$ bin/hdfs dfs -mkdir -p /user/<username>

فایل‌های ورودی را به فایل‌سیستم توزیع‌شده کپی کنید:

$ bin/hdfs dfs -mkdir input
$ bin/hdfs dfs -put etc/hadoop/*.xml input

چندین نمونه از مثال‌های ارائه شده را اجرا کنید:

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output ‘dfs[a-z.]+’

فایل‌های خروجی را بررسی کنید: فایل‌های خروجی را از فایل‌سیستم توزیع‌شده به فایل‌سیستم محلی کپی کرده و آن‌ها را بررسی کنید:

$ bin/hdfs dfs -get output output
$ cat output/*

یا

فایل‌های خروجی را در فایل‌سیستم توزیع‌شده مشاهده کنید:

$ bin/hdfs dfs -cat output/*

وقتی کار تمام شد، دیمون‌ها را با دستور زیر متوقف کنید:

$ sbin/stop-dfs.sh

YARN در یک گره تک
می‌توانید یک کار MapReduce را در YARN به حالت نیمه-توزیع‌شده اجرا کنید با تنظیم چندین پارامتر و اجرای دیمون ResourceManager و دیمون NodeManager به علاوه.

دستورات زیر فرض می‌کنند که مراحل ۱ تا ۴ از دستورات فوق از قبل انجام شده است.

پارامترها را به صورت زیر پیکربندی کنید:

etc/hadoop/mapred-site.xml:

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml:

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,

HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>

دیمون ResourceManager و دیمون NodeManager را راه‌اندازی کنید:

$ sbin/start-yarn.sh

صفحه وب ResourceManager را مشاهده کنید؛ به طور پیش‌فرض در دسترس است:

ResourceManager – http://localhost:8088/

یک کار MapReduce را اجرا کنید.

وقتی کار تمام شد، دیمون‌ها را با دستور زیر متوقف کنید:

$ sbin/stop-yarn.sh

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

یکی دیگر از کاربردهای مسئله تضیح داده شده در نوشته “کشف تصویر کوچک درون تصویر بزرگ با استفاده از پایتون و 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)

 

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

آموزش کامل عناصر HTML: اصول و راهنمای استفاده

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

  1. عنوان (<h1> تا <h6>): عناصر عنوان از <h1> تا <h6> برای تعریف عنوان‌های مختلف صفحه وب استفاده می‌شوند. عنوان با استفاده از این تگ‌ها تعریف می‌شود و از اهمیت ۱ (h1) تا اهمیت ۶ (h6) رتبه‌بندی می‌شود.
    <h1>عنوان اصلی</h1>
    <h2>عنوان فرعی</h2>
    ...
    <h6>عنوان کوچک</h6>
  2. پاراگراف (<p>): این تگ برای تعریف پاراگراف‌ها در صفحه‌های وب استفاده می‌شود.
    <p>این یک پاراگراف است.</p>
  3. تصاویر (<img>): از این تگ برای اضافه کردن تصاویر به صفحه وب استفاده می‌شود. باید آدرس تصویر را در ویژگی src این تگ قرار دهید.
    <img src="آدرس-تصویر.jpg" alt="توضیحات تصویر">
  4. لینک‌ها (<a>): این تگ برای ایجاد لینک‌ها به صفحات دیگر یا منابع دیگر در وب استفاده می‌شود. باید آدرس مقصد لینک را در ویژگی href این تگ قرار دهید.
    <a href="آدرس-مقصد">متن لینک</a>
  5. لیست‌ها: HTML دارای دو نوع اصلی از لیست‌ها است: لیست‌های مرتب (<ol>) و لیست‌های نامرتب (<ul>).
    <ul>
    <li>مورد اول</li>
    <li>مورد دوم</li>
    ...
    </ul>

    <ol>
    <li>مورد اول</li>
    <li>مورد دوم</li>
    ...
    </ol>

  6. جداول (<table>): این تگ برای ساخت جداول در صفحه وب استفاده می‌شود. از تگ‌های <tr> (ردیف)، <th> (سرستون) و <td> (سلول) برای ساختاردهی جدول استفاده می‌شود.
    <table>
    <tr>
    <th>سرستون ۱</th>
    <th>سرستون ۲</th>
    </tr>
    <tr>
    <td>مقدار ۱</td>
    <td>مقدار ۲</td>
    </tr>
    </table>

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

دنیای رنگارنگ تگ‌های HTML: بلوک‌های سازنده صفحات وب

HTML (HyperText Markup Language) زبان بنیادی وب است که برای ساختاردهی و نمایش محتوای صفحات وب به کار می‌رود. این زبان از مجموعه‌ای از تگ‌ها تشکیل شده است که به مرورگر دستور می‌دهند که چگونه متن، تصاویر، ویدئوها و سایر عناصر را در صفحه نمایش دهد.

تگ‌های HTML به دو دسته کلی تقسیم می‌شوند:

1. تگ‌های بلاک (Block Tags):

  • مانند بلوک‌های ساختمانی عمل می‌کنند و فضای مجزا در صفحه اشغال می‌کنند.
  • نمی‌توانند داخل یکدیگر قرار بگیرند.
  • شامل تگ‌های عناوین (<h1> تا <h6>)، پاراگراف‌ها (<p>)، لیست‌ها (<ul> و <ol>)، جداول (<table>) و فرم‌ها (<form>) می‌شوند.

مثال:

HTML

<h1>عنوان صفحه</h1>

<p>این یک پاراگراف است.</p>

<ul>

<li>مورد اول</li>

<li>مورد دوم</li>

</ul>

2. تگ‌های اینلاین (Inline Tags):

  • درون محتوای تگ‌های بلاک قرار می‌گیرند و فضای مجزا اشغال نمی‌کنند.
  • می‌توانند داخل یکدیگر قرار بگیرند.
  • شامل تگ‌های فرمت‌دهی متن (مانند <b> برای متن ضخیم</b> و <i> برای متن کج</i>)، لینک‌ها (<a>) و تصاویر (<img>) می‌شوند.

مثال:

HTML

<p>این یک پاراگراف است که <b>کلمه‌ای</b> <i>فونت کج</i> دارد.</p>

<a href=“https://www.example.com”>لینک به یک وب‌سایت</a>

<img src=“image.jpg” alt=“تصویر”>

علاوه بر این دو دسته اصلی، تگ‌های دیگری نیز وجود دارند که در دسته‌های فرعی قرار می‌گیرند، برای درک بهتر تگ‌ها، می‌توانید آنها را به دسته‌های زیر تقسیم کنید:

1. تگ‌های ساختاری:

  • <html><head><body><doctype html><meta><title><link><style>

2. تگ‌های متنی:

  • <b><i><u><pre><code><mark><del><ins><abbr><cite><q>

3. تگ‌های تصویری:

  • <img><figure><figcaption>

4. تگ‌های جدولی:

  • <table><tr><th><td><caption><colgroup><col>

5. تگ‌های فرم:

  • <form><input><select><textarea><label><fieldset><legend>

6. تگ‌های لیست:

  • <ul><ol><li>

7. تگ‌های بخش‌بندی:

  • <header><nav><article><aside><section><footer>

8. تگ‌های تعاملی:

  • <a><button><area><map>

9. تگ‌های رسانه‌ای:

  • <video><audio><source>

10. تگ‌های متا:

  • <meta>

نکات مهم:

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

با یادگیری انواع تگ‌های HTML، می‌توانید به دنیای طراحی وب قدم بگذارید و صفحات وب جذاب و کارآمدی را برای خود یا دیگران ایجاد کنید.

منابع برای یادگیری بیشتر:

با تسلط بر انواع تگ‌های HTML، می‌توانید خلاقیت خود را در طراحی صفحات وب به نمایش بگذارید و وب‌سایت‌هایی با ظاهری زیبا و کاربری آسان خلق کنید.

ساختار پایه HTML: اسکلت‌بندی صفحات وب

HTML (HyperText Markup Language) زبان بنیادی وب است که برای ساختاردهی و نمایش محتوای صفحات وب به کار می‌رود. این زبان از مجموعه‌ای از تگ‌ها تشکیل شده است که به مرورگر دستور می‌دهند که چگونه متن، تصاویر، ویدئوها و سایر عناصر را در صفحه نمایش دهد.

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

عناصر اصلی ساختار پایه HTML:

  • <!DOCTYPE html>: این تگ به مرورگر اعلام می‌کند که سند شما یک صفحه HTML است.
  • <html>: این تگ عنصر اصلی HTML را که شامل تمام محتوای صفحه وب شما است، مشخص می‌کند.
  • <head>: این تگ حاوی اطلاعاتی در مورد صفحه وب شما، مانند عنوان، متا دیتا و لینک‌های خارجی است.
  • <title>: این تگ عنوان صفحه وب شما را مشخص می‌کند که در نوار عنوان مرورگر نمایش داده می‌شود.
  • <body>: این تگ محتوای اصلی صفحه وب شما، مانند متن، تصاویر، ویدئوها و فرم‌ها را در بر می‌گیرد.

مثال یک سند HTML ساده:

HTML

<!DOCTYPE html>

<html>

<head>

<title>صفحه اول من</title>

</head>

<body>

<h1>عنوان صفحه</h1>

<p>این یک پاراگراف است.</p>

<img src=“image.jpg” alt=“تصویر”>

<a href=“https://www.example.com”>لینک به یک وب‌سایت</a>

</body>

</html>

نکات مهم:

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

با یادگیری ساختار پایه HTML، می‌توانید به دنیای طراحی وب قدم بگذارید و صفحات وب جذاب و کارآمدی را برای خود یا دیگران ایجاد کنید.

منابع برای یادگیری بیشتر:

با تسلط بر ساختار پایه HTML، گامی بلند در جهت تبدیل شدن به یک طراح وب موفق خواهید برداشت.

آشنایی با HTML و کاربردهای آن

HTML: زبان پایه وب

در دنیای امروز، اینترنت به بخش جدایی‌ناپذیری از زندگی ما تبدیل شده است. وب‌سایت‌ها به عنوان دروازه‌ای به دنیای اطلاعات، نقش مهمی در تبادل اطلاعات و ارائه خدمات ایفا می‌کنند. برای ایجاد این وب‌سایت‌ها، از زبانی به نام HTML (HyperText Markup Language) استفاده می‌شود.

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

کاربردهای HTML:

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

مزایای یادگیری HTML:

  • یادگیری آسان: HTML زبانی نسبتاً ساده است که یادگیری آن آسان است.
  • کاربردهای گسترده: HTML در طیف وسیعی از برنامه‌ها، از جمله طراحی وب‌سایت، توسعه اپلیکیشن‌های وب و ایمیل، کاربرد دارد.
  • پایه ای برای سایر زبان های برنامه نویسی وب: HTML پایه و اساس سایر زبان‌های برنامه‌نویسی وب، مانند CSS و JavaScript است.
  • مهارتی ارزشمند: توانایی یادگیری HTML مهارتی ارزشمند است که می‌تواند درهای فرصت‌های شغلی جدیدی را به روی شما باز کند.

منابع یادگیری HTML:

  • منابع آنلاین: منابع آنلاین متعددی برای یادگیری HTML به صورت رایگان یا با هزینه کم در دسترس هستند. وب‌سایت‌های W3Schools و MDN Web Docs از جمله این منابع هستند.
  • کتاب‌ها: کتاب‌های متعددی در مورد HTML به زبان فارسی و انگلیسی منتشر شده‌اند که می‌توانند به شما در یادگیری این زبان کمک کنند.
  • دوره‌های آموزشی: دوره‌های آموزشی آنلاین و حضوری مختلفی برای آموزش HTML برگزار می‌شوند که می‌توانند به شما در یادگیری این زبان به صورت ساختاریافته و با کمک مربیان مجرب کمک کنند.

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