ویرگول
ورودثبت نام
Ehsan Shahbazi
Ehsan Shahbaziتلگرام: my_neuralnotes@
Ehsan Shahbazi
Ehsan Shahbazi
خواندن ۵ دقیقه·۴ ماه پیش

بیا با من فیلم ببین فقط یه جور دیگس! (آپدیت ۳۱مرداد)

اگه بعد خوندن پست و نگاه کردن به ویدیو، نفهمیدی چی شده، توی آپدیت بعدی سطح عموم توضیح میدم ولی بخوام تو یه تیکه کوچیک بگم که همه بفهمن:

هر فریم فیلم رو تبدیل به نوشته(متن) کردیم و با نشون دادن پیوسته اون متن ها، فریم فیلم رو ساختیم.

دیدین با نقطه و این چیزا، همشو میزارن کنار هم و یه عکس یا نوشته بزرگ تری درست میکنن؟ اینجا هم همین کارو کردیم ولی رنگ اضافه کردیم و آپشن های دیگه

چند وقت پیش تصمیم گرفتم یه تایمی رو استراحت کنم. یعنی کورس و درس و کار و هر چیز دیگه ای رو تعطیل کنم و لش کنم🥸. ۳ روز از اون روز میگذره و الان امشب شده. نتیجه لش شدنم رو اومدم بنویسم. خیلی وقته تو ویرگول چیزی ننوشته بودم!🥲

قسمت صفر:‌ لش کردم لش کردن نیست!

خب لش کردم ول کردم همه چیزو ولی نشستم پشت سیستم!‌😂 آره البته اینبار به خاطر یه چیز دیگه. دفترچه ۴۰ برگ ایده هام پر شده بود.📜 گفتم دیگه اینجوری پیش بره سرعت تولید ایده از انجامش به شدت زیاده و چند تا زندگی جدید میخوام تا همش رو انجام بدم!🥸 دست به کار شدم و رندوم انگشت مبارکم👇🏻 رو انداختم وسط دفتر با چشم بسته! و نتیجه اش این پست شد! در ادامه می فهمیم منظورم چیه! (میخوام از ماتریکس خارج شممممممم😂)

سیس مغزم اون تایم
سیس مغزم اون تایم

قسمت یک: ایده چی بود و کی بود؟

یه ایده مسخره!😐😂 ولی خب من عاشق این ایده های مریضم! از این قرار بود که میخواستم فیلم رو به جای اینکه توی پلیر نگاه کنم، روی ترمینال (کامند لاین) باز کنم! آره تو اون صفحه سیاه که فقط کلمه داره میخوام فیلم پلی کنم و نگاه کنم! برا همین میگم مسخره اس! ولی خب خیلی کیف میده. 😂😭

صفحه command line (cmd) که گفتم
صفحه command line (cmd) که گفتم

لامصب بعدش فهمیدم چه غلطی کردم!‌😭😂 سگ مصب از اون چیزی که فک میکردم سخت تر بوده! ولی خب من موز روزای سختم!🍌 دست به کار شدیم. بقیه پستی که شما تو چند دقیقه میخونید حاصل ۳ روزه. لذت ببرید ازش!

قسمت دوم: خوشتیپ از کجا شروع کنیم؟

نمی دونمممم! اینجا چند صفحه چرک نویس و سرچ کردن داشتم تا بلاخره معماری پروژه و لوازم لازم رو نوشتم و یه جا جمع کردم. اینجا قراره که خیلی وارد جزئیات نشم ولی توضیح میدم! چون اکثر مخاطب ها برنامه نویس نیستن.

مواد لازم: یه کیلو مغز مریض + اعصاب ایوب + یه خرده باید در مورد openCV برای پردازش فریم ها بلد باشین + پایتون + pygame یه ذره + numpy هم ضروریه ولی مبتدی

قسمت سوم: دست به کد بشیم جیگر

طولم به حضورتون معماری پروژه رو به ۶ قسمت تقسیم کردم و قراره قسمت به قسمت توسعه بدیم بریم جلو.

  1. تولید فریم ها از روی فیلم

  2. بهینه کردن برای صفحه کنسول

  3. خاکستری کردن و نرمال سازی بردار فریم

  4. نوشتن تابع برای تبدیل شدت با کاراکتر

  5. اضافه کردن رنگ به بلوک ها

  6. ساختن تابع رندر برای ترمینال

  7. و چیزای جزئی رو هر قسمت!

و.ن (وسط نوشت): آخه بچه خارش داری مگه!‌ بشین بستنی بخور خب!!!!!!!!!!!!!!!!!!!!!!!!!!!!😶‍🌫️

واکنش مغزم بعد اینکه فهمید چیکار کرده😂
واکنش مغزم بعد اینکه فهمید چیکار کرده😂

قسمت چهارم: پیش نیاز ها رو نصب کنیم

من از numpy و openvc-python و ffmpeg برای پخش صدا استفاده کردم.

اوووووف حاجی منصرف شدم😭 ۴۰۰ خط کد رو اینجا بنویسم نیم قرن طول میکشه اسکرول کنی!!! ول کن فقط توضیح میدم چطوری از کجا چیکار کردم.😂

آلارم صبح گوشیم در حالیکه من بیدار بودم برعکس روزای قبلی
آلارم صبح گوشیم در حالیکه من بیدار بودم برعکس روزای قبلی

قسمت پنجم: برادر توضیح می دهد

  • ساختار و کانفیگ های اولیه مثل: طول و عرض صفحه، نرخ فریم، پخش صدا، تاخیر صدا

  • نیازه که یه ضریبی به ارتفاع فیلم بدیم چون طول و عرض ترمینال مقیاسش یکسان نیست

  • از ابزار های ترمینال مثل ANSI و Alt-screen برای اینکه تصویر هر فریم همون جای فریم قبلی باشه و هی سطر بعدی تایپ نشه و تمیز دیده بشه استفاده کردیم و وقتی فیلم تموم شه صفحه رو پاک کنه

  • اینجا دیکودر ویدیو رو مینویسم و با کمک cv2 فریم هارو میخونیم و به RGB تبدیلشون می کنیم. هر چقدر که نرخ فریم بیشتر انتخاب کنیم روان تر میشه (گرافیک قوی تری هم میخواد)

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

  • تابع نگاشت شدت رو مینویسم و شدت هارو به کاراکتر نگاشت میکنیم (برای اینکه از حلقه استفاده نکنیم چون کند میکنه کار رو میایم بردار میسازیم و generator سریع اون رو به ماتریس کاراکتر تبدیل میکنیم)

  • حالا وقت رنگ کردن رسیده: سه حالت رنگ داریم که خاموش، ANSI خاکستری و Truecolor (اینجا به شدت داشت رندر رو کند میکرد و بعدش فهمیدم رو هر پیکس یه رنگ میزنه و همین باعث تولید رنگ های خیلی زیادی میکنه. برای همین اومدم رنگ های نزدیک رو با هم گروه بندی کردم و با این حساب مثلا یه فریم با فریم بعدی دیگه نیاز نبود رنگش عوض شده در حالیکه یه ذره خیلی کوچیک رنگشون فرق داشت که به چشم نمیاد)

  • رندر صفحه یه کد روتین که ورود و خروج به Alt-Screen که اون بالا برای نشون دادن ویدیو رو یه جای ثابت نوشته بودیم مینویسیم. چیز خاصی نداره فقط اون رو چاپ میکنیم

  • حالا فیلم آماده هست منتهی صدا نداره!‌ فیلم هم بدون صدا نمیشه! برای همین از ffmpeg استفاده میکنیم. وقتی رندر شروع به کار میکنه این رو صدا میزنیم و صدا پخش میشه پشت ضمینه. اگه گرافیک ضعیف بود یا فریم سریع یا کند رندر شد، تاخیر ایجاد میده بین صدا که اون رو با دو روش میتونیم هندل کنیم. یکی اینکه کاربر میگه چند ثانیه تاخیر داشته باش. یه روش هم اینه سرعت خروجی فریم ها به Alt-Screen رو با سرعت پخش ffmpeg سینک کنیم. (این کار رو واقعیتش انجام ندادم چون وقتی لازم میشه که بخوای تو شدت بالایی رندر بگیری یا گرافیک سیستم ضعیف باشه. من صرفا میخواستم فیلم نشون داده بشه)‌

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

قسمت ششم: خب تیک انجام شد این ایده رو هم زدیم

تیک زدن ایده هایی که جامه عمل پوشیده میشه رو خیلی دوست دارم🤤😂 و برام لذت بخشه! اصلا نفهمیدم این ۳ روز چطوری گذشت.🥲 نفهمیدم کی شب شد کی صبح. اینم استراحتم بود و از فردا دوباره بر میگردیم به روال قبلی!

آقا بریم نتیجه رو ببینیم؟؟؟🥸🥂

https://www.aparat.com/v/qqf0f23

https://www.aparat.com/v/qqf0f23

اگه لینک آپارات فیلمش براتون نمیاد

https://virgool.io/@ehsanshahbazii/d/h7c4rj4pniwv

از اینجا انگار میاد

آپدیت: آقا عالیییییییییییی ://///////////

فدا سرتون بابا اینجا فیلم رو آپلود کردم میتونی ببینی:

https://ehsan.storage.iran.liara.space/br.mp4

آپدیت: کد رو سه مود ascii , braille و block نوشته بودم که بهترین حالتش همون block بود. برای همین اون یکی ها رو توی پست نگفتم. یکی از دوستان گفت که میشه با اون روش هم نوشت. گفتم آپدیت کنم پست رو و ویدیو اون رو هم بزارم:

از این لینک میتونید ببینید و مقایسه کنید:

https://ehsan.storage.iran.liara.space/Hyper.mp4

برنامه نویسیهوش مصنوعیفیلمپایتونکتاب
۳۲
۵۰
Ehsan Shahbazi
Ehsan Shahbazi
تلگرام: my_neuralnotes@
شاید از این پست‌ها خوشتان بیاید