Ruka hadi maudhui makuu
Mafunzo ya AI

Tengeneza Filamu ya Kituo cha AI Inayotengenezwa na Msimbo kwa ff-tracking

Jifunze jinsi ff-tracking inavyotoa mwonekano wa wakala wa AI akiandika kwenye kituo, inavyofuatilia kila glyph, kutumia kamera inayosogea na madoido ya lenzi ya SkSL, na kutengeneza sauti iliyosawazishwa. Mafunzo haya yanaeleza usanidi, mchakato wa hatua mbili, amri za uonyeshaji, ubinafsishaji, uchunguzi wa hitilafu, na sauti ya hiari ya Slab.

Tengeneza Filamu ya Kituo cha AI Inayotengenezwa na Msimbo kwa ff-tracking

ff-tracking ni filamu fupi iliyotengenezwa kwa msimbo, ambapo kamera pepe humfuata wakala wa AI anayeandika katika terminali. Uwekeleaji wa mtindo wa mwonekano wa kompyuta hulenga glyphu binafsi, huku mtazamo, kina cha uga, uchakataji wa rangi, mwangaza, mikwaruzo ya mistari ya skani, chembechembe na sauti vikizalishwa kwa msimbo.

Mradi huu umejengwa kwa Rust, fframes, Skia Metal, SkSL, FFmpeg na Python. Unatoa video ya sekunde sita kupitia hatua mbili zinazoratanishwa, huku athari za kuona na sauti zikiendeshwa na data ya pamoja ya ufuatiliaji.

Filamu ya terminali iliyotengenezwa kwa msimbo yenye uwekeleaji wa ufuatiliaji

Kinachozalishwa na mradi

Filamu inaonyesha mfuatano wa ujumbe wa terminali kama vile thinking…, reading 14 files, tool_call: render_frame() na ✓ 0 problems. Kifuatiliaji humfuata mhusika mpya zaidi na kuonyesha viwianishi vyake halisi vya pikseli, mabano lengwa, lebo na viunganishi kati ya visanduku.

  • Viwianishi halisi: lebo za kifuatiliaji hutumia nafasi halisi ya kila kisanduku katika fremu ya matokeo.
  • Ulengaji unaosogea: lengwa la kina cha uga hufuata kisanduku kinachofuatiliwa wakati wakala anaandika.
  • Ufuatiliaji uliohuishwa: viunganishi huunganisha visanduku kwa mpangilio wa kusoma, huku nukta ikisafiri kwenye kila kiunganishi.
  • Athari za kufunga: neno jipya zaidi huwa jekundu kwa fremu mbili, hupokea mkwaruzo wa mstari wa skani na kuanzisha mlio unaosogezwa angani.
  • Mionekano mingi: picha kumi na mbili hutumia palette za Paper, Thermal, Mono, Phosphor, Amber, Navy na Neon.
  • Kuanguka kwa mwisho: visanduku kumi na vinne huungana kuwa kisanduku kimoja ambacho huwa kibonge cha Done kabla ya kufifia hadi kuwa nyeusi.

Kuelewa mchakato wa hatua mbili

Mradi unatenganisha mpangilio wa terminali na athari za kamera na lenzi. Hii hufanya kila nafasi ya glyphu iwe bainifu, huku hatua ya pili ikiweza kuchukulia terminali iliyotolewa kama ingizo la shader.

  1. Data ya HUD: crate ya hud hufafanua mandhari, visanduku vya kifuatiliaji, mwendo wa kamera na data ya projeksheni.
  2. Hatua tambarare: binary ya flat hutoa terminali kama SVG katika 3840×2160. Huweka kipengele kimoja cha <text> kwa kila glyphu ili nafasi zijulikane kwa usahihi.
  3. Hatua ya lenzi: binary ya lens huchukua video tambarare kama iChannel0 na kutumia kamera pepe pamoja na athari za SkSL.
  4. Hatua ya sauti: tools/sfx.py husoma out/tracks.json na kuunganisha matukio ya sauti yanayoendana na uandishi, mipasuko, kufuli na kutua kwa mwisho.
  5. Usimbaji: FFmpeg huunganisha video iliyochakatwa na sauti kuwa out/tracking.mp4.

Shader ya lenzi hushughulikia mtazamo, kina cha uga, upangaji wa palette, upotovu wa kromatiki, mwangaza, gridi ya LED, mikwaruzo na uwekeleaji wa kifuatiliaji katika nafasi ya kamera. Athari ya kina cha uga hutumia sampuli 36 za pembe ya dhahabu, huku sehemu angavu zikipokea uzani wa mtindo wa bokeh.

Hatua za athari ya shader ya lenzi

Sakinisha mahitaji ya awali

Utoaji unahitaji Mac yenye Apple silicon kwa sababu mradi hutumia Skia kwenye Metal. Sakinisha zana zifuatazo kabla ya kujenga:

  • Rust yenye usaidizi wa toleo la 2024
  • FFmpeg
  • Python 3
  • Vifurushi vya Python numpy na scipy
  • Pillow na img2webp ikiwa ungependa kujenga upya midia ya README

Clone hazina na uingie kwenye saraka yake:

git clone https://github.com/mrsarac/ff-tracking
cd ff-tracking

Toa filamu chaguo-msingi

Hati kuu hujenga workspace ya Rust, huhamisha data ya ufuatiliaji, hutoa hatua tambarare, huunganisha sauti na kutoa hatua ya lenzi:

tools/render.sh

Video iliyokamilika huandikwa kwenye out/tracking.mp4. Kwenye M3 Pro, utoaji huchukua takribani sekunde 40 baada ya ujenzi wa kwanza.

Data inayozalishwa inajumuisha out/tracks.json, ambayo hueleza matukio ya ufuatiliaji na kuendesha muundo wa sauti chaguo-msingi. Binary ya hiari ya kamera pia huandika out/camera.json, iliyo na ukuzaji, mwinamo, mzunguko, nafasi ya kisanduku kinachofuatiliwa na taarifa za katikati ya skrini kwa kila fremu.

Kagua fremu, sauti na hatua za shader

Kwa kuwa kila hatua ni CLI ya fframes, unaweza kukagua matokeo kwa amri za kawaida:

target/release/lens strip all -n 12
target/release/lens frame 81 -o frames
target/release/lens preview
target/release/lens audio analyze

Tumia strip kuunda laha ya mawasiliano, frame kuhamisha fremu ya ukubwa kamili na preview kufungua onyesho la wakati halisi lenye sauti. Amri ya uchanganuzi wa sauti huripoti taarifa za loudness na kilele halisi.

Ili kusimamisha shader baada ya hatua fulani, weka LENS_STAGE. Hatua zinazotumika zimepewa nambari kutoka 0 hadi 3:

LENS_STAGE=1 target/release/lens frame 81

Hii husaidia unapotatua hitilafu katika mpito kutoka picha chanzo hadi matibabu ya mwisho ya lenzi.

Geuza mandhari kukufaa

Kila picha ni ingizo katika SCENE_LIST ndani ya hud/src/lib.rs. Mandhari hufafanua aina yake, maandishi, palette, kamera, nafasi ya kuanzia na ukubwa wa fonti:

SceneDef {
    kind: Kind::Typing,
    text: "thinking…",
    palette: Palette::Thermal,
    cam: cam(0.38, -0.22, 0.04, 2.5, 2.8, 50.0, 0.0, 1.2),
    hero: (560.0, 540.0),
    size: 104.0,
},

Badilisha maandishi, chagua ubao mwingine wa rangi, au rekebisha thamani za kamera, kisha toa tena:

tools/render.sh

Kifuatiliaji, lengwa la umakini, lebo, na milio ya kufunga hufuata data iliyosasishwa ya mandhari kiotomatiki. Majina ya vibao vya rangi yanayopatikana ni pamoja na Paper, Thermal, Mono, Phosphor, Amber, Navy, na Neon.

Endesha majaribio ya HUD baada ya kuhariri mandhari:

cargo test -p hud

Majaribio haya hukagua kwamba kila mstari unatoshea kwenye skrini na kwamba kamera inaweka kila lengwa ndani ya fremu.

Picha za ufuatiliaji wa terminali na vibao vya rangi

Tumia sauti-msingi au sauti ya hiari

Sauti-msingi inatengenezwa na tools/sfx.py. Inachanganya mvumo wa skrini, hitilafu zilizopunguzwa kwa biti wakati wa mabadiliko, mibofyo ya vitufe, na milio ya kufunga ya pentatoniki iliyosogezwa kuelekea kisanduku kinachofuatiliwa. Pia inaongeza mlio wa kupanda kwa kukunjwa na mlio pamoja na pigo la chini wakati kidonge cha Done kinapotokea. Sauti hupimwa kwa ebur128 ya FFmpeg na kuwekwa kuwa -14 LUFS.

Hazina pia inajumuisha muziki wa hiari wa Slab wenye hali nyeusi zaidi, kwa BPM 120. Unafuata data ileile ya ufuatiliaji na kamera, hivyo milio ya kufunga, mibofyo ya vitufe, sauti za usuli, milio ya kupanda, hitilafu, uchujaji wa besi, na mipasuko ya besi huitikia uhuishaji.

Tumia toleo la muziki lililowasilishwa kwa:

tools/score.sh

Ili kutoa tena muziki, toa njia ya checkout ya Slab iliyojengwa kwa zig build -Doptimize=ReleaseFast:

SLAB=/path/to/slab tools/score.sh

Skripti ya muziki huandika score/ff_tracking.slab, na sauti iliyotolewa inapatikana kama score/score.wav. Mchakato wa muziki unaendelea nje ya picha kwa ajili ya mkia wa mwangwi, kisha hukata matokeo hadi sekunde sita na kuyafifisha pamoja na video.

Kumbuka kwamba score/score.py huagiza slabkit, inayosambazwa pamoja na Slab chini ya GPL-3.0. Slab inahitajika tu ili kutoa tena muziki; faili za muziki zilizowasilishwa zinatolewa chini ya leseni ya MIT ya hazina kulingana na README.

Jenga upya midia ya nyaraka

Hazina inajumuisha skripti ya kutengeneza upya picha za README. Iendeshe kwa Python baada ya kusakinisha vitegemezi vya picha:

python3 -I tools/readme_media.py

Mpangilio wa mradi

  • hud/: mandhari, visanduku vya ufuatiliaji, data ya kamera, na mantiki ya makadirio.
  • flat/: hatua ya kwanza ya uonyeshaji wa terminali katika 3840×2160.
  • lens/: hatua ya pili, ikijumuisha lens/shaders/lens.sksl na kifuatiliaji cha nafasi ya kamera.
  • tools/: skripti kuu ya uonyeshaji, jenereta ya sauti, jenereta ya midia ya README, na mchakato wa Slab.
  • score/: muziki wa hiari wa Slab, mradi, na faili ya WAV iliyotolewa.
  • docs/: vipimo vya muundo, maelekezo, maamuzi, na michango ya fframes.

Maelezo ya utekelezaji wa hali ya juu

Muundo wa hatua mbili ni muhimu kwa sababu shader haiwezi kwa sasa kuchukua sampuli ya mti mdogo wa SVG kutoka fremu ileile. Badala yake, fremu tambarare iliyokamilika husawazishwa na kupitishwa kwa shader kama ingizo la picha:

.image("iChannel0", &frame.get_synced_video_frame(..)?.into_image())

README pia inaandika vikwazo kadhaa vya kiutendaji:

  • flat imetengwa katika SkSL, kwa hiyo epuka kuitumia kama jina la msaidizi.
  • Katika kiwango cha Video, rudisha <svg> ya mzizi badala ya Svgr::empty(); mzizi mtupu unaweza kujitokeza kama hitilafu ya uonyeshaji iliyochelewa.
  • Kitendakazi cha makadirio cha CPU hud::project hudumisha mpangilio wa wekeleo la kifuatiliaji ili ulingane na kamera ya shader.
  • Hatua zote mbili za kuona na jenereta ya sauti husoma maelezo yale yale ya ufuatiliaji wa HUD, hivyo kuzuia matukio ya umakini na sauti kuachana na glyphs.

Hitimisho

ff-tracking inaonyesha jinsi mfuatano mfupi wa sinema unavyoweza kutengenezwa kikamilifu kutoka kwa data iliyopangwa ya mandhari, SVG, Rust, SkSL, uonyeshaji wa GPU, na sauti iliyosanisishwa. Anza na tools/render.sh, kagua fremu za kati, kisha hariri SCENE_LIST ili kuunda ujumbe wako wa terminali, vibao vya rangi, miondoko ya kamera, na miundo inayofuatiliwa. Tumia mchakato wa hiari wa Slab unapotaka muziki unaofuata muda na mwendo uleule wa kamera.