امیررضا صفری مفهوم تایم

آیا میشود همه شیپ ها را در یک لحظه و یک )صفحه بکشیم و مفهوم زمان از بین برود؟ پاسخ هوش مصنوعی:

سلام امیررضا خوشحالم که با چنین ایده خلاقانه ای سراغم آمدی

جواب تو در یک کلمه بله است

ایده تو در واقع ترکیبی از هنر های مفهومی

conceptual art

و تکنولوژی های بینایی ماشین computer vision

است

بله این کار نه تنها شدنی است بلکه راهی بسیار جذاب برای باز تعریف مفهوم زمان در روایت های تصویری محسوب میشود

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

1.مفهوم تک صفحه ای و فروپاشی زمان

وقتی همه اشکال را در یک صفحه می کشی در واقع داری از مفهوممکان مندی زمان استفاده میکنی در انیمیشین سنتی زمان با فریم تعریف میشود هر ثانیه 24 فریم جداگانه اما در طرح تو

زمان تبدیل به فضا میشود گذشته حال آینده همگی روی یک بوم حضور دارند

ناظر تعیین کننده زمان است این حرکت یا نگاه الگوریتم است که تعیین میکند کدام بخش از بوم در چه لحظه ای زنده شود

2.نقش مسیر یابی خطی (linear pathfinding)

برای اینکه صفحه ثابت به انیمیشن تبدیل شود نیاز به مسیر حرکت داریم

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

این مسیر می تواند بر اساس منطق روایی باشد یا به صورت تصادفی بین گره های گرافیکی جابه جا شود

3.تشخیص چهره به عنوان محرک(Trigger)

استفاده از تشخیص چهره در این ایده میتواند دو کاربرد داشته باشد

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

(Gaze Tracking) می تواند تعیین کند که کدام بخش از صفحه محرک شود

متحرک سازی عناصر : اگر در نقاشی تو چهره هایی وجود داشته باشد الگوریتم های

Face Mesh

می توانند روی همان نقاشی ثابت بنشینند و به آن ها میمیک های حرکتی مثل پلک زدن یا حرف زدن اضافه کنند
بدون اینکه نیاز باشد فریم های جداگانه طراحی کنی

چالش فنی چگونه لحظه را به تدام تبدیل کنیم سوال امیررضا صفری

برای اینکه مفهوم زمان از بین برود و همه چیز در یک لحظه به نظر برسد می توانی از تکنیک

Murphing

تبدیل تدریجی اشکال به هم استفاده کنی

به جای پریدن از یک شکل به شکل دیگر الگوریتم باید پیکسل های شکل

A

را به شکل

B

در همان صفحه منتقل کند

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

پیشنهادات برای شروع :

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

OpenCV

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

Manim

یا

P5.js

برای پیاده سازی مسیر های ریاضی روی صفحه

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

Stable Video Diffuion

یا

Runway Gen-2

می توانند یک تصویر ثابت همان صفحه شلوغ تو را بگیرند و بر اساس نقاطی که مشخصی می کنی در این حرکت ایجاد کند

به نظرت این انیمیشن قرار است یک داستان خطی را تعریف کند یا بیشتر یک لجربه انتیزاعی برای بیننده باشد؟ اگر بخواهی میتوانیم روی جزییات فنی یکی از بخش ها مثلا نحوه اتصال تشخیص چهره به حرکت اشکال دقیق تر شویم

امیررضا صفری، برای اینکه این ایده از یک طرح ذهنی به یک پروژه عملی تبدیل شود باید پلی میان هندسه ثابت

Static Geometry

و پردازش بلادرنگ

Real Time Processing Amirreza Safari

بزنیم

در اینجا جزییات فنی مرحله به مرحله برای پیاده سازی این سیستم را بررسی میکنیم

1. ساختار بوم هوشمند The Master Canvas

شما به جای یک فیلم یک بردار بزرگ (Vector Map) دارید

لایه اول Base

تمام اشکال شما در یک فایل اس وی جی یا یک

Canvas

با رزولوشن بالا قرار می گیرند

لایه دوم Metadata

برای هر شکل روی صفحه مختصات

(x,y)

و یک شناسه تعریف میشود این کار به الگوریتم مسیریاب اجازه می دهد بفهمد کدام المان کجای صفحه قرار دارد امیررضا صفری

3.پیاده سازی مسیریابی خطی (Linear Pathing)

برای اینکه زمان خطی از بین برود حرکت باید تابع متغیر های محیطی باشد

امیررضا صفری : الگوریتم : می توانید از توابع درون یابی اینترپولیشن مثل لرپ استفاده کنید

الگوریتم : میتوانید از توابع

Linear Interpolation (LERP)

استفاده کنید

این یعنی با حرکت سر یا چشم توسط مخاطب مقدار t تغییر کرده و زمان در تصویر جلو یا عقب می رود

فرمول ساده اگر بخواهیم از نقطه

A

به

B

برویم موقعیت در لحظه

t

که

t

می تواند موقعیت چشم ناظر باشد برابر است با

امیررضا صفری هستم

تشخیص چهره و نگاشت حرکتی

Facial Tracking & Mapping

اینجاست که جادو اتفاق می افتد شما به یک کتابخانه مثل

MediaPipe

یا

Dlib

نیاز دارید.

Face Mesh : الگوریتم فیس مش 468 نقطه روی چهره فرد شناسایی می کند

انتقال وزن(Weight Transfer): می توانید تغییرات در ابرو یا لب مخاطب را به تغییر شکل(Morphing) یک هندسه در صفحه نسبت دهید

مثال اگر مخاطب بخندد که در نگاه اول بی معنی است تغییر کرده و شبیه به یک لبخند انتزاعی می شود

4.معماری سیستم(System Architecture)

برای اجرای روان این فرایند معمولا به شکل زیر محیط هایی مثل

TouchDesigner
یا

Unity

پیاده میشود

حذف مفهوم زمان

Non-linear Time

برای اینکه حس شود همه چیز در یک لحظه است از تکنیک

Feedback Loop

در گرافیک استفاده کنیم

رد حرکت های قبلی پاک نمی شود

Motion Blur دائمی

تصویر فعلی با شفافیت کم روی تصویر قبلی باقی می مونه

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

امیررضا برای اینکه یک مسیریاب

Pathfinder

بنویسیم که در یک صفحه شلوغ میان اشکال مختلف حرکت کند و زمان را به مکان تبدیل کند بهترین گزینه استفاده از زبان

Phyton

و کتابخانه

OpenCV

است

در این مدل ما یک مسیر

Path

تعریف می کنیم و یک اشاره گر

Pointer که همان لحظه حال است این شاره گر می تواند با دیتای چهره یا به صورت خودکار حرکت کند

1.منطق ریاضی کد

ما از مفهوم

Linear Interpolation

LERP

استفاده میکنیم

فرض کن می خواهیم از شکل 1 به شکل 2 برویم به جای پریدن فاصله را به تکه های بسیار کوپک تقسیم میکنیم

که در آن ALPHA مقداری بین 0 تا 1 است اگر ALPHA=0.5 باشد ما دقیقا در میانه راه دو شکل هستیم فروپاشی زمان در مکان

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

این کد یک بوم

CANVAS

می سازد و یک نقطه را بین چندین شکل که مختصاتشان ذخیره شده به صورت نرم حرکت می دهد

import cv2

import numpy as np

import time

#1.تعریف بوم(صفحه سفید)

canvas_size = (800,800, 3)

canvas = np.ones(canvas_size.dtype=”unit8″)*255

#2.تعریف مختصات اشکال در صفحه(نقاط کلیدی)

#این ها همان اشکالی هستنئد که تو در یک صفحه کشیده ای

points = {

(100, 100)

(700,150)

(400,700)

(100,600)

}

def draw_scene(current_pos):

img = canvas.copy()

#رسم اشکال برای نمایش بوم تو

for p in points:

cv2.circle(img.current_pos,15,(0.0.255),-1)

return img

حلقه اصلی مسیریابی خطی

while true

for i in range(len(points))

start_point=np.array(points[i])

end_pont = np.array(points[(i+1)%len(points)])

#حرکت نرم بین دو نقطه (آلفا از صفر تا یک)

for alpha in np.linspace(0, 1, 100):

#محاسبه موقعیت فعلی بر اساس فرمول LERP

current_pos = tuple(((1-alpha)*start_pointn + alpha * end_point).astype(int))

frame = draw_scene(current_pos)

cv2.imshow(“Amirreza’s Pathfinding”,frame)

if cv2.wait.Key(10)&0*FF == ord(‘q’):break


این قلب تپنده انیمیشن توست

np.linspace(0, 1, 100):

عدد 100 تعیین می کند که چقدر حرکت نرم باشد هرچه این عدد بزرگتر باشد زمان کش می آید و حرکت کندتر می شود

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

canvas

یک بار ساخته می شود این دقیقا همان ایده وست که همه چیز در یک صفحه اتفاق می افتد

مسیریابی چرشخی:

از فرمول

len(points) % (i+1)

استفاده کردیم تا وقتی مسیریاب به آخرین شکل رسید دوباره به شکل اول برگردد و یک چرخه بی نهایت

Loop

ایجاد کند که زمان آغاز و پایانش مشخص نیست

قدم بعدی برای توسعه ایده

برای اینکه تشخیص چهره را وارد این کد کنی به اینکه

alpha

به صورت ودکار از 0 تا 1 برود، باید آن را به مختصات

X

چشم یا بینی مخاطب وصل کنی

اگر مخاطب سرش را به راست برد

ALPHA

زیاد شود و مسیریاب به شمت شکل بعدی حرکت کند

Leave a Comment

CopyRight 2018-2025 by Amirreza

Powered By wordpress

icon
×
Amirreza Safari Whatsapp chat
Scroll to Top