<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Generative AI | Dat Viet Thanh Nguyen</title><link>https://datvtn.github.io/tags/generative-ai/</link><atom:link href="https://datvtn.github.io/tags/generative-ai/index.xml" rel="self" type="application/rss+xml"/><description>Generative AI</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 01 Jan 2025 00:00:00 +0000</lastBuildDate><image><url>https://datvtn.github.io/media/icon_hu82c06b08a282889123d30d9b11b05ced_13465_512x512_fill_lanczos_center_3.png</url><title>Generative AI</title><link>https://datvtn.github.io/tags/generative-ai/</link></image><item><title>Personality-Driven AI Avatar Bot</title><link>https://datvtn.github.io/project/personality-driven-ai-bot/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate><guid>https://datvtn.github.io/project/personality-driven-ai-bot/</guid><description>&lt;p>&lt;strong>Dec 2023 – Jan 2025&lt;/strong>&lt;/p>
&lt;h2 id="problem">Problem&lt;/h2>
&lt;p>Group chat applications are text-first. Adding an AI participant that feels like a &lt;em>character&lt;/em> rather than a chat completion means giving it a face, a voice, and a consistent personality — and generating all of that fast enough that it can take part in a live conversation rather than replying minutes later.&lt;/p>
&lt;h2 id="approach">Approach&lt;/h2>
&lt;p>I built the avatar generation side of the product: turning a character definition into a speaking AI avatar that could be dropped into a group chat.&lt;/p>
&lt;p>The pipeline combines several pieces I had been building in parallel:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Identity generation&lt;/strong> — a consistent visual identity per character, stable across every clip the bot produces.&lt;/li>
&lt;li>&lt;strong>Audio-driven talking head&lt;/strong> — driving lip-sync and head motion from a single audio stream while preserving the character&amp;rsquo;s identity, head pose, and facial expression.&lt;/li>
&lt;li>&lt;strong>Expression control&lt;/strong> — routing the character&amp;rsquo;s intended emotion (joy, sadness, anger) into the generated video, so the avatar&amp;rsquo;s delivery matches the tone of what it is saying.&lt;/li>
&lt;li>&lt;strong>Real-time diffusion video&lt;/strong> — a Stable Diffusion video generation pipeline producing avatar speech video directly from audio input.&lt;/li>
&lt;/ul>
&lt;p>The engineering constraint throughout was latency: a conversational avatar that lags is worse than no avatar, so each stage was optimised for real-time or near-real-time throughput rather than best-possible offline quality.&lt;/p>
&lt;h2 id="tech-stack">Tech stack&lt;/h2>
&lt;p>&lt;code>PyTorch&lt;/code> · &lt;code>Stable Diffusion&lt;/code> · &lt;code>TensorRT&lt;/code> · &lt;code>Python&lt;/code> · &lt;code>Docker&lt;/code>&lt;/p>
&lt;h2 id="outcome">Outcome&lt;/h2>
&lt;p>Shipped as the avatar generation component of a group chat application.&lt;/p>
&lt;!-- TODO: add concrete numbers here if they can be shared — e.g. end-to-end latency per utterance, resolution/FPS of generated video, number of supported characters. --></description></item><item><title>AI Photo Editing App</title><link>https://datvtn.github.io/project/ai-photo-editing/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://datvtn.github.io/project/ai-photo-editing/</guid><description>&lt;p>&lt;strong>Sep 2023 – Jan 2024&lt;/strong>&lt;/p>
&lt;h2 id="problem">Problem&lt;/h2>
&lt;p>The edits people actually want from a photo app — &lt;em>remove that person&lt;/em>, &lt;em>drop the background&lt;/em>, &lt;em>make the sky dramatic&lt;/em>, &lt;em>put him in a suit&lt;/em> — are each a different technical problem, but users expect all of them behind a single tap. Each feature needs an accurate mask, a plausible fill, and a result that survives being zoomed into.&lt;/p>
&lt;h2 id="approach">Approach&lt;/h2>
&lt;p>I built four editing features on a shared backbone of segmentation plus generative inpainting:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Object removal&lt;/strong> — segment the unwanted region, then inpaint it with surroundings-consistent content rather than a blur or clone-stamp patch.&lt;/li>
&lt;li>&lt;strong>Background removal&lt;/strong> — high-quality alpha matting around hard cases: hair, glasses, motion blur at the subject boundary.&lt;/li>
&lt;li>&lt;strong>Sky replacement&lt;/strong> — sky segmentation combined with colour harmonisation, so the relit foreground matches the new sky instead of looking pasted on.&lt;/li>
&lt;li>&lt;strong>Suit changer&lt;/strong> — garment-region segmentation and generative synthesis that keeps the subject&amp;rsquo;s identity and pose intact.&lt;/li>
&lt;/ul>
&lt;p>The common thread is that mask quality dominates perceived output quality: a strong generative model behind a sloppy mask still looks wrong at the edges, so most of the tuning effort went into the segmentation stage and its boundary refinement.&lt;/p>
&lt;h2 id="tech-stack">Tech stack&lt;/h2>
&lt;p>&lt;code>PyTorch&lt;/code> · &lt;code>Diffusion Models&lt;/code> · &lt;code>Segmentation networks&lt;/code> · &lt;code>OpenCV&lt;/code> · &lt;code>Python&lt;/code>&lt;/p>
&lt;h2 id="outcome">Outcome&lt;/h2>
&lt;p>Delivered as a set of consumer-facing editing features.&lt;/p>
&lt;!-- TODO: add before/after examples and any quality or runtime numbers that can be shared publicly. --></description></item></channel></rss>