نوشته‌ها

نحوه نمایش فایل‌های تغییر یافته بین دو کامیت در گیت

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

در این مقاله به شما نشان می‌دهیم که چگونه می‌توانید این کار را به راحتی با استفاده از دستورات گیت انجام دهید. فرض کنیم که شما معمولاً کامیت‌ها را با پیام خاصی مشخص می‌کنید، به عنوان مثال: COMMIT-MESSAGE. حالا می‌خواهیم ببینیم که از این کامیت تا آخرین کامیت (که با HEAD شناخته می‌شود)، چه فایل‌هایی تغییر کرده‌اند.

گام ۱: پیدا کردن هش کامیت

اولین قدم این است که کامیتی را که دارای پیام COMMIT-MESSAGE است پیدا کنیم. برای این کار از دستور زیر استفاده می‌کنیم:

git log --grep="COMMIT-MESSAGE"

این دستور لیستی از کامیت‌هایی که پیامشان حاوی عبارت COMMIT-MESSAGE است را نمایش می‌دهد. حالا باید هش (Hash) کامیت مورد نظر را از این لیست پیدا کنیم.

گام ۲: نمایش فایل‌های تغییر یافته بین دو کامیت

بعد از اینکه هش کامیت را پیدا کردید، باید فایل‌های تغییر یافته بین آن کامیت و آخرین کامیت (HEAD) را لیست کنید. برای این کار از دستور زیر استفاده می‌کنیم:

git diff --name-only HASH HEAD

در این دستور به جای HASH، هش کامیتی که در مرحله‌ی قبلی پیدا کردید را قرار دهید. این دستور لیستی از فایل‌هایی که در این بازه تغییر کرده‌اند را نمایش می‌دهد.

توضیح دستورها

  • git log --grep="پیام": این دستور برای جستجو در تاریخچه‌ی کامیت‌ها بر اساس پیام استفاده می‌شود. پارامتر --grep به گیت می‌گوید که کامیت‌هایی که پیامشان شامل عبارت مشخص شده است را نمایش دهد.
  • git diff --name-only: این دستور برای مقایسه دو کامیت استفاده می‌شود و به شما فقط نام فایل‌های تغییر یافته را نشان می‌دهد (بدون جزئیات تغییرات). اگر نیاز به دیدن تغییرات دقیق دارید، می‌توانید از دستور git diff بدون پارامتر --name-only استفاده کنید.

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

گیت (Git) یک سیستم کنترل نسخه توزیع‌شده است که برای مدیریت تغییرات در فایل‌ها و پروژه‌ها، به‌ویژه در پروژه‌های نرم‌افزاری، استفاده می‌شود. این ابزار به توسعه‌دهندگان امکان می‌دهد تا به‌طور همزمان روی پروژه‌ای کار کنند، تغییرات خود را پیگیری کنند و به نسخه‌های قبلی بازگردند.

اصول کارکرد گیت:

  1. ریپازیتوری (Repository): ریپازیتوری جایی است که پروژه ذخیره می‌شود. یک ریپازیتوری گیت به دو صورت می‌تواند باشد: محلی (روی سیستم شخصی) یا ریموت (مثلاً روی سرورهای گیت‌هاب).
  2. کامیت (Commit): هر بار که تغییرات مهمی در پروژه انجام می‌دهید، می‌توانید یک “کامیت” ایجاد کنید. کامیت در واقع مانند یک نقطه ذخیره است که وضعیت فعلی پروژه و تغییرات آن را ذخیره می‌کند.
  3. شاخه‌ها (Branches): شاخه‌ها به شما امکان می‌دهند که یک نسخه جداگانه از پروژه را بدون تأثیرگذاری بر شاخه اصلی (معمولاً به نام main یا master) توسعه دهید. این ویژگی برای کار روی ویژگی‌های جدید یا رفع مشکلات بسیار مفید است.
  4. مراحل کار با گیت:
    • ایجاد ریپازیتوری: با استفاده از دستور git init یک ریپازیتوری گیت جدید ایجاد می‌شود.
    • افزودن فایل‌ها به گیت: با استفاده از دستور git add می‌توانید فایل‌ها را برای کامیت کردن آماده کنید.
    • کامیت کردن تغییرات: با دستور git commit تغییرات خود را ذخیره می‌کنید.
    • مشاهده وضعیت: برای مشاهده وضعیت پروژه و فایل‌هایی که تغییر کرده‌اند از دستور git status استفاده می‌شود.
    • شاخه‌ها: برای ایجاد یک شاخه جدید از دستور git branch و برای جابجایی بین شاخه‌ها از دستور git checkout استفاده می‌شود.
  5. ریپازیتوری ریموت: می‌توانید یک ریپازیتوری گیت را به یک سرور ریموت (مثلاً GitHub) متصل کنید تا به‌صورت مشترک با دیگران روی پروژه کار کنید. دستور git push تغییرات شما را به سرور ریموت ارسال می‌کند و دستور git pull تغییرات جدید را از سرور ریموت دریافت می‌کند.
  6. مزایای گیت:
    • کنترل نسخه: هر تغییر در پروژه با تاریخچه کامل ذخیره می‌شود.
    • همکاری تیمی: چندین نفر می‌توانند به‌طور همزمان روی یک پروژه کار کنند.
    • شاخه‌ها: امکان کار بر روی ویژگی‌های جدید به‌صورت موازی.
    • پشتیبانی از ریموت: امکان همکاری از راه دور و استفاده از پلتفرم‌های میزبانی مانند GitHub، GitLab و Bitbucket.

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

تشخیص چهره با 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 در مدیریت جهت گیری های مختلف چهره برتر است و برای سناریوهایی که ممکن است چهره ها در مقیاس ها و زوایای مختلف ظاهر شوند، مناسب است.

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

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