<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ishwor Subedi</title>
    <description>The latest articles on DEV Community by Ishwor Subedi (@ishworrsubedii).</description>
    <link>https://dev.to/ishworrsubedii</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1853794%2Fe50572c3-b535-46c2-9173-0c01f5a22502.gif</url>
      <title>DEV Community: Ishwor Subedi</title>
      <link>https://dev.to/ishworrsubedii</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ishworrsubedii"/>
    <language>en</language>
    <item>
      <title>Your Eyes Weren't Built for an 8-Hour Stare Contest With a Monitor — Here's What the Research Actually Says</title>
      <dc:creator>Ishwor Subedi</dc:creator>
      <pubDate>Fri, 21 Aug 2026 16:06:38 +0000</pubDate>
      <link>https://dev.to/ishworrsubedii/your-eyes-werent-built-for-an-8-hour-stare-contest-with-a-monitor-heres-what-the-research-3gbh</link>
      <guid>https://dev.to/ishworrsubedii/your-eyes-werent-built-for-an-8-hour-stare-contest-with-a-monitor-heres-what-the-research-3gbh</guid>
      <description>&lt;h3&gt;
  
  
  Digital eye strain isn't just "tired eyes." I dug into the studies, then built an open-source tool around the one part of the problem a webcam can actually fix.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsitblinksip.oxura.dev%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fworkspace-monitor.e01e1293.png%26w%3D1920%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsitblinksip.oxura.dev%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fworkspace-monitor.e01e1293.png%26w%3D1920%26q%3D75" alt="Live blink rate and posture analysis dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Somewhere between your second cup of coffee and your fourth hour of debugging, your eyes start to feel gritty. You blame the lighting, the screen brightness, maybe your last eye exam. What you probably don't blame — because it's invisible to you while it's happening — is that &lt;strong&gt;you've simply stopped blinking normally.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That single fact turned out to be well-documented, mechanistically simple, and almost entirely fixable with awareness. Here's what I found while researching it, and what I ended up building because of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually happens to your eyes on a screen
&lt;/h2&gt;

&lt;p&gt;A normal blink does two things: it spreads a fresh layer of tear film across the surface of your eye, and it clears debris. Under normal conditions, we blink around 15–20 times a minute without thinking about it.&lt;/p&gt;

&lt;p&gt;Put a screen in front of a human and something measurable changes. Reviews of digital eye strain point to altered blinking behavior — specifically &lt;em&gt;reduced frequency&lt;/em&gt; and &lt;em&gt;incomplete blinks&lt;/em&gt; (where the eyelid doesn't fully close) — as a real, recurring factor during prolonged digital device use. The mechanism is straightforward: fewer and shallower blinks mean longer gaps where the tear film is left exposed, and it can start to break up before the next blink arrives. That breakup is what produces the dryness and burning sensation associated with digital eye strain.&lt;/p&gt;

&lt;p&gt;This isn't a fringe theory. A randomized controlled trial specifically tested blink-reminder software against a control group of visual display terminal users and found measurable improvements in both blink rate &lt;em&gt;and&lt;/em&gt; dry-eye symptom scores in the group that got reminders. In other words: the intervention isn't just "sit less," it's specifically "blink more, on purpose," and that alone moved the needle in a controlled study.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is a genuinely hard problem to self-monitor
&lt;/h2&gt;

&lt;p&gt;Here's the catch: blinking is almost entirely unconscious. You can't reliably self-report your own blink rate any more than you can self-report your own breathing rate while focused on something else — the moment you pay attention to it, you change it. That's exactly why timer-based "take a break every 20 minutes" apps miss the point. They're measuring the clock, not the actual behavior that matters.&lt;/p&gt;

&lt;p&gt;What you actually need is passive, continuous measurement — something watching the behavior itself, not proxying for it with a countdown. That's a computer vision problem, not a scheduling problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-part loop I built around this: SitBlinkSip
&lt;/h2&gt;

&lt;p&gt;That's the entire premise behind &lt;a href="https://sitblinksip.oxura.dev/" rel="noopener noreferrer"&gt;SitBlinkSip&lt;/a&gt;, an open-source project I built to turn this research into something you actually run while you work. It tracks three things through your webcam, entirely on-device, with nothing recorded or uploaded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blink rate&lt;/strong&gt;, using eye-aspect-ratio (EAR) tracking on a real-time face mesh — the same underlying signal used in the clinical studies above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Posture&lt;/strong&gt;, using head-tilt angle and forward-lean detection, because slouching and eye strain tend to compound each other during long sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hydration&lt;/strong&gt;, on an independent timer, because dehydration and screen-related fatigue often show up together and neither one waits for the other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When your blink rate drops below a healthy minimum over the last minute, the screen blanks briefly with a short alert tone — a forced, unmissable "blink now" moment, deliberately more assertive than the other two nudges because it's the most time-sensitive. Posture drift gets a quieter sound + notification, since it's gradual rather than acute. Water reminders just ping on their own schedule.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Camera → Blink detection → Pattern monitoring → Timely reminder → More awareness → Healthier habits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That loop is the whole product philosophy: don't diagnose, don't lecture, just make an invisible behavior visible in the moment it's actually happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it deliberately does &lt;em&gt;not&lt;/em&gt; claim
&lt;/h2&gt;

&lt;p&gt;I want to be precise here, because health-adjacent tools get oversold constantly, and I'd rather undersell this one. Digital eye strain has multiple contributing factors beyond blink rate — screen brightness, viewing distance, ambient lighting, uncorrected vision, individual eye health, and more. SitBlinkSip focuses on blink awareness as &lt;em&gt;one&lt;/em&gt; measurable, fixable piece of that picture. It doesn't diagnose, treat, or cure any eye condition, and it isn't a substitute for an actual eye exam if something feels persistently wrong.&lt;/p&gt;

&lt;p&gt;What it &lt;em&gt;is&lt;/em&gt; good at: making a behavior you cannot consciously track — your own blink rate — visible enough that you can actually change it, with research suggesting that change alone produces measurable symptom improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways to run it, both free and open source
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ishworrsubedii/SitBlinkSip" rel="noopener noreferrer"&gt;Web dashboard&lt;/a&gt;&lt;/strong&gt; — Next.js + FastAPI + OpenCV/dlib, run locally via Docker, with the full research write-up and charts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ishworrsubedii/desktop-sitblinksip" rel="noopener noreferrer"&gt;Desktop app&lt;/a&gt;&lt;/strong&gt; — a native background app for Linux, Windows, and macOS built on PySide6 + MediaPipe, no server or database required, lives in your system tray.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# native desktop app, no Docker needed&lt;/span&gt;
git clone https://github.com/ishworrsubedii/desktop-sitblinksip.git
&lt;span class="nb"&gt;cd &lt;/span&gt;desktop-sitblinksip
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python &lt;span class="nt"&gt;-m&lt;/span&gt; sitblinksip_desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both are Apache-2.0 licensed. All the detection logic — the EAR thresholds, the posture-scoring math, the alert cooldowns — is readable in the source, because I think "trust me, it works" is a bad ask for anything that touches your webcam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;p&gt;If you want to go past my summary and read the actual research this project is built on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pubmed.ncbi.nlm.nih.gov/33181547/" rel="noopener noreferrer"&gt;Digital Screen Use and Dry Eye: A Review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pubmed.ncbi.nlm.nih.gov/39308959/" rel="noopener noreferrer"&gt;Digital Eye Strain: Updated Perspectives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pubmed.ncbi.nlm.nih.gov/34571605/" rel="noopener noreferrer"&gt;Efficacy of blink software in improving the blink rate and dry eye symptoms in visual display terminal users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pubmed.ncbi.nlm.nih.gov/26164310/" rel="noopener noreferrer"&gt;Blink Animation Software to Improve Blinking and Dry Eye Symptoms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pubmed.ncbi.nlm.nih.gov/23538437/" rel="noopener noreferrer"&gt;Blink rate, incomplete blinks and computer vision syndrome&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where this goes next
&lt;/h2&gt;

&lt;p&gt;The roadmap is deliberately modest and clearly labeled as "not yet built": deeper analytics per session, historical trends over weeks and months, wearable integration, and personalized recommendations based on your own long-term patterns. None of it is required for the core loop to be useful today — that's already sitting in your tray, watching a problem most of us didn't know we had a measurable fix for.&lt;/p&gt;

&lt;p&gt;If you spend most of your working day facing a screen, I'd rather you learn this from a study summary than from your own eyes at 4 p.m. Try it, read the code, and if you find a threshold that's wrong for your setup, open an issue — this is exactly the kind of project that gets better from real usage across different monitors, lighting, and webcams.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source &amp;amp; docs:&lt;/strong&gt; &lt;a href="https://github.com/ishworrsubedii/SitBlinkSip" rel="noopener noreferrer"&gt;github.com/ishworrsubedii/SitBlinkSip&lt;/a&gt; · &lt;a href="https://github.com/ishworrsubedii/desktop-sitblinksip" rel="noopener noreferrer"&gt;github.com/ishworrsubedii/desktop-sitblinksip&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live site:&lt;/strong&gt; &lt;a href="https://sitblinksip.oxura.dev/" rel="noopener noreferrer"&gt;sitblinksip.oxura.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Tags: Health Tech, Computer Vision, Open Source, Research, Software Engineering&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>SitBlinkSip Desktop: A Native App That Watches Your Blinks, Posture, and Water Breaks — With No Server, No Database, No Browser Tab</title>
      <dc:creator>Ishwor Subedi</dc:creator>
      <pubDate>Fri, 21 Aug 2026 16:05:59 +0000</pubDate>
      <link>https://dev.to/ishworrsubedii/sitblinksip-desktop-a-native-app-that-watches-your-blinks-posture-and-water-breaks-with-no-2lb3</link>
      <guid>https://dev.to/ishworrsubedii/sitblinksip-desktop-a-native-app-that-watches-your-blinks-posture-and-water-breaks-with-no-2lb3</guid>
      <description>&lt;h3&gt;
  
  
  A complete walkthrough of installing, configuring, and actually living with the open-source background app that keeps developers healthier during long screen sessions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsitblinksip.oxura.dev%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fworkspace-monitor.e01e1293.png%26w%3D1920%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsitblinksip.oxura.dev%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fworkspace-monitor.e01e1293.png%26w%3D1920%26q%3D75" alt="SitBlinkSip live health monitoring overlay showing blink rate and posture status" width="666" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you read my last post, you know why &lt;a href="https://sitblinksip.oxura.dev/" rel="noopener noreferrer"&gt;SitBlinkSip&lt;/a&gt; exists: developers forget to blink, slouch for hours, and skip water breaks, and a webcam is a genuinely good tool for catching all three in real time.&lt;/p&gt;

&lt;p&gt;This post is the practical one. I'm going to walk through &lt;strong&gt;SitBlinkSip Desktop&lt;/strong&gt; — the native companion app — end to end: what it does differently from the web dashboard, how to install it on your OS, and how to actually configure it so the nudges help instead of annoy you.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/ishworrsubedii/desktop-sitblinksip" rel="noopener noreferrer"&gt;github.com/ishworrsubedii/desktop-sitblinksip&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a separate desktop app?
&lt;/h2&gt;

&lt;p&gt;The original SitBlinkSip is a web dashboard: Next.js frontend, FastAPI backend, OpenCV + dlib for the computer vision, the whole thing running in Docker. It's great if you want the full dashboard experience with charts in your browser.&lt;/p&gt;

&lt;p&gt;But most days, I don't want to keep a browser tab and a Docker container alive just to get blink reminders. So the desktop app strips it down to the essentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No server.&lt;/strong&gt; No FastAPI process running in the background.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No database.&lt;/strong&gt; Nothing is logged or persisted beyond your local settings file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No browser tab.&lt;/strong&gt; It lives in your system tray (or menu bar on macOS) and stays out of your way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entirely local.&lt;/strong&gt; Just the webcam and a timer, processed on-device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It reuses the exact same detection logic as the web app — eye-aspect-ratio for blinks, head-tilt-angle and forward-displacement for posture — but swaps dlib for &lt;strong&gt;MediaPipe FaceMesh/Pose&lt;/strong&gt;, which means no giant landmark model file to download and no compiled dependency to build from source. The alert tones are shared with the web dashboard too, so it genuinely feels like the same product, just lighter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does, feature by feature
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blink counter&lt;/strong&gt; — no camera feed shown by default, just a small always-on-top widget with your blink count and blinks/minute. Press &lt;strong&gt;F6&lt;/strong&gt; (or use the tray menu) any time to reveal the live camera preview, and press it again to hide it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Blink now" nudge&lt;/strong&gt; — if your blink rate over the last minute drops below a healthy minimum, your screen blanks for a couple of seconds with a short alert tone, then resumes. It's deliberately more forceful than the other two alerts, because a missed blink is the most time-sensitive of the three.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Posture corrector&lt;/strong&gt; — the same webcam feed is periodically checked for head tilt and forward lean. When your posture score drops too low, you get a sound + notification — no screen blank, since posture drift is gradual rather than urgent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Water break reminders&lt;/strong&gt; — an independent timer nudges you on a configurable interval regardless of whether blink/posture tracking is paused, so you never skip hydration just because you turned off the other checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System tray control&lt;/strong&gt; — pause/resume tracking, toggle the camera preview, open settings, or quit, all from one menu.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing it on your OS
&lt;/h2&gt;

&lt;p&gt;SitBlinkSip Desktop ships as a native package for &lt;strong&gt;Linux, Windows, and macOS&lt;/strong&gt;, all built from the same source tree and the same PyInstaller spec.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OS&lt;/th&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.deb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Any desktop with a system tray. X11 recommended (see the hotkey note below).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;setup.exe&lt;/code&gt; (Inno Setup)&lt;/td&gt;
&lt;td&gt;Windows 10/11, 64-bit. Global F6 hotkey works out of the box.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.dmg&lt;/code&gt; (&lt;code&gt;.app&lt;/code&gt; bundle)&lt;/td&gt;
&lt;td&gt;macOS 11+, Apple Silicon and Intel. Runs as a menu-bar app, no Dock icon. Needs two permission grants on first run.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./packaging/linux/build-deb.sh
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; ./dist/sitblinksip-desktop_0.1.0_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Launch &lt;strong&gt;SitBlinkSip Desktop&lt;/strong&gt; from your applications menu, or run &lt;code&gt;sitblinksip-desktop&lt;/code&gt; from a terminal. Uninstall any time with &lt;code&gt;sudo apt remove sitblinksip-desktop&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExecutionPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;packaging\windows\build-windows.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This produces a runnable frozen app directory, and — if you have &lt;a href="https://jrsoftware.org/isdl.php" rel="noopener noreferrer"&gt;Inno Setup 6.3+&lt;/a&gt; installed — a full &lt;code&gt;setup.exe&lt;/code&gt; installer. It defaults to a per-user install, so no admin/UAC prompt is required. Since the build isn't code-signed, Windows SmartScreen will flag it on first run — click &lt;strong&gt;More info → Run anyway&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./packaging/macos/build-macos.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This produces &lt;code&gt;SitBlinkSip Desktop.app&lt;/code&gt; and a &lt;code&gt;.dmg&lt;/code&gt;. Two things worth knowing before you try it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The build is architecture-native (not universal2), because one of the vision dependencies (&lt;code&gt;opencv-contrib-python&lt;/code&gt;, pulled in by MediaPipe) doesn't publish a fat binary — build on Apple Silicon for Apple Silicon, Intel for Intel.&lt;/li&gt;
&lt;li&gt;The bundle is ad-hoc signed but not notarized, so the &lt;em&gt;first&lt;/em&gt; launch needs &lt;strong&gt;right-click → Open → Open&lt;/strong&gt; — a plain double-click will be blocked by Gatekeeper.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;macOS will also ask for two permissions on first run:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission&lt;/th&gt;
&lt;th&gt;Needed for&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Camera&lt;/td&gt;
&lt;td&gt;Blink and posture tracking (required)&lt;/td&gt;
&lt;td&gt;System Settings → Privacy &amp;amp; Security → Camera&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accessibility&lt;/td&gt;
&lt;td&gt;Global F6 hotkey (optional)&lt;/td&gt;
&lt;td&gt;System Settings → Privacy &amp;amp; Security → Accessibility&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you skip Accessibility, F6 still works while a SitBlinkSip window is focused — you just lose the &lt;em&gt;global&lt;/em&gt; hotkey, and the app tells you once via notification rather than leaving it silently dead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running from source (any OS)
&lt;/h3&gt;

&lt;p&gt;If you'd rather run it without building a package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;desktop-sitblinksip
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate        &lt;span class="c"&gt;# Windows: .venv\Scripts\activate&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python &lt;span class="nt"&gt;-m&lt;/span&gt; sitblinksip_desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll need Python 3.9–3.12 — MediaPipe is pinned to a version range that dropped support for the older &lt;code&gt;mediapipe.solutions&lt;/code&gt; API this app relies on above 3.12, so 3.13 isn't compatible yet. The &lt;code&gt;requirements.txt&lt;/code&gt; handles per-platform quirks (Windows needs one MediaPipe release lower than the others) automatically via environment markers, so a plain &lt;code&gt;pip install -r requirements.txt&lt;/code&gt; just does the right thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using it day to day
&lt;/h2&gt;

&lt;p&gt;Everything is driven from the tray icon (system tray on Linux, notification area on Windows, menu bar on macOS):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;How&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Show/hide the blink counter&lt;/td&gt;
&lt;td&gt;Tray icon → "Show/Hide counter"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minimize the counter to just the blink count&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;–&lt;/strong&gt; button on the counter widget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Show/hide the camera preview&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;F6&lt;/strong&gt;, or tray icon → "Show camera preview"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pause/resume tracking&lt;/td&gt;
&lt;td&gt;Tray icon → "Pause tracking"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable/disable posture checks&lt;/td&gt;
&lt;td&gt;Tray icon → "Posture checks" checkbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable/disable water reminders&lt;/td&gt;
&lt;td&gt;Tray icon → "Water break reminders" checkbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adjust sensitivity / thresholds&lt;/td&gt;
&lt;td&gt;Tray icon → "Settings…"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quit&lt;/td&gt;
&lt;td&gt;Tray icon → "Quit"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Settings are organized into &lt;strong&gt;Blink / Posture / Water / General&lt;/strong&gt; tabs, and persist to a local &lt;code&gt;config.json&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blink&lt;/strong&gt; — camera device index, EAR threshold, minimum blinks/minute, break-screen duration, cooldown between breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Posture&lt;/strong&gt; — head-tilt angle threshold, forward-lean threshold, posture score alert threshold, cooldown between alerts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Water&lt;/strong&gt; — reminder interval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;General&lt;/strong&gt; — sound on/off, launch on login.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My honest recommendation after running it for a while: turn the water reminder interval up slightly from the default if you already have a habit of keeping a bottle at your desk, and leave the blink threshold alone — it's tuned around the same clinical minimum blink-rate research the whole project is built on.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on the global F6 hotkey
&lt;/h2&gt;

&lt;p&gt;This is the one feature that genuinely behaves differently per platform, because each OS decides independently whether a regular app is allowed to listen for keys system-wide:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Global F6&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;✅ Works&lt;/td&gt;
&lt;td&gt;Installs a Win32 low-level keyboard hook, no permission needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux (X11)&lt;/td&gt;
&lt;td&gt;✅ Works&lt;/td&gt;
&lt;td&gt;Hooks X11 directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;⚠️ After granting Accessibility&lt;/td&gt;
&lt;td&gt;See the permissions table above.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux (Wayland)&lt;/td&gt;
&lt;td&gt;❌ Blocked&lt;/td&gt;
&lt;td&gt;Wayland's security model forbids system-wide key listeners for regular apps — a platform limitation, not a bug in the app.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Wherever F6 isn't available globally, it still works while a SitBlinkSip window has focus, and the tray/menu-bar menu always has a manual toggle — you're never stuck without a way to open the camera preview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the hood, briefly
&lt;/h2&gt;

&lt;p&gt;The stack is PySide6 + MediaPipe + OpenCV + NumPy + pynput, and it's genuinely cross-platform — most of the codebase is shared. The platform-specific differences (settings paths, camera backend, tray behavior, launch-on-login mechanism) are deliberately concentrated into two files, &lt;code&gt;platform_support.py&lt;/code&gt; and &lt;code&gt;autostart.py&lt;/code&gt;, rather than scattered through the feature code as &lt;code&gt;sys.platform&lt;/code&gt; checks. If you're curious how a cross-platform PySide6 app handles things like DirectShow vs. V4L2 vs. AVFoundation camera backends, or XDG autostart vs. registry &lt;code&gt;Run&lt;/code&gt; keys vs. launchd agents, the source is short enough to read in an afternoon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ishworrsubedii/desktop-sitblinksip.git
&lt;span class="nb"&gt;cd &lt;/span&gt;desktop-sitblinksip
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python &lt;span class="nt"&gt;-m&lt;/span&gt; sitblinksip_desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's Apache-2.0 licensed, actively developed, and contributions are welcome — especially around the packaging scripts, which are the trickiest part of shipping a native app on three OSes from one codebase.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop app &amp;amp; source:&lt;/strong&gt; &lt;a href="https://github.com/ishworrsubedii/desktop-sitblinksip" rel="noopener noreferrer"&gt;github.com/ishworrsubedii/desktop-sitblinksip&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live site &amp;amp; web dashboard:&lt;/strong&gt; &lt;a href="https://sitblinksip.oxura.dev/" rel="noopener noreferrer"&gt;sitblinksip.oxura.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it, I'd genuinely like to know what default threshold felt wrong for you — those are the kind of small tuning issues that are hard to catch alone and easy to fix with a GitHub issue.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: Open Source, Software Engineering, Cross Platform Development, Python, Developer Tools&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Kept Forgetting to Blink While Coding — So I Built an App That Watches My Eyes, Spine, and Water Bottle</title>
      <dc:creator>Ishwor Subedi</dc:creator>
      <pubDate>Fri, 21 Aug 2026 16:05:09 +0000</pubDate>
      <link>https://dev.to/ishworrsubedii/i-kept-forgetting-to-blink-while-coding-so-i-built-an-app-that-watches-my-eyes-spine-and-water-479i</link>
      <guid>https://dev.to/ishworrsubedii/i-kept-forgetting-to-blink-while-coding-so-i-built-an-app-that-watches-my-eyes-spine-and-water-479i</guid>
      <description>&lt;h3&gt;
  
  
  How a bad habit during long debugging sessions turned into SitBlinkSip, an open-source health companion for anyone who lives behind a screen
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsitblinksip.oxura.dev%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fworkspace-monitor.e01e1293.png%26w%3D1920%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsitblinksip.oxura.dev%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fworkspace-monitor.e01e1293.png%26w%3D1920%26q%3D75" alt="SitBlinkSip dashboard showing live blink rate and posture monitoring" width="666" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few months ago I noticed something strange: my eyes were burning by 3 p.m. every single day. Not from lack of sleep, not from bad lighting — from &lt;em&gt;not blinking&lt;/em&gt;. I'd get locked into a bug, stare at a stack trace for twenty straight minutes, and forget one of the most automatic things a human body does.&lt;/p&gt;

&lt;p&gt;Turns out I wasn't imagining it. When we focus hard on a screen, our blink rate drops and our blinks become incomplete — and that's directly linked to dry eyes and digital eye strain. On top of that, I was slouching harder the longer I coded, and my water bottle would sit untouched for six hours at a time.&lt;/p&gt;

&lt;p&gt;So, being an ML engineer who works with computer vision every day, I did what felt obvious: I pointed my own webcam at the problem.&lt;/p&gt;

&lt;p&gt;That's how &lt;strong&gt;SitBlinkSip&lt;/strong&gt; was born — a free, open-source wellness companion that watches your posture, your blink rate, and your hydration breaks while you work, and nudges you the moment one of them slips.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea in one sentence
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sit better. Blink more. Sip regularly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SitBlinkSip runs quietly in the background while you code, write, or design, using your webcam to track three simple things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Posture&lt;/strong&gt; — are you slouching or leaning forward?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blinking&lt;/strong&gt; — are you blinking often enough to keep your eyes healthy?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hydration&lt;/strong&gt; — how long has it been since your last water break?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When any of the three drifts out of a healthy range, you get a gentle nudge — a notification, a sound, or (for blinking specifically) a brief screen blank that forces a reset. No lectures, no guilt-trip pop-ups. Just a tap on the shoulder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it as computer vision, not a survey app
&lt;/h2&gt;

&lt;p&gt;There are plenty of "take a break" timer apps out there. Most of them are dumb clocks — they nag you every 20 minutes whether you've been slouching or sitting perfectly upright, blinking normally or staring like a gargoyle. That's not awareness, that's noise, and noise gets muted within a day.&lt;/p&gt;

&lt;p&gt;SitBlinkSip instead &lt;em&gt;measures&lt;/em&gt; what's actually happening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blink detection uses eye-aspect-ratio (EAR) tracking on your face mesh, the same technique used in academic dry-eye research, to count real blinks and calculate blinks per minute in real time.&lt;/li&gt;
&lt;li&gt;Posture checking looks at head-tilt angle and forward lean/displacement — the two most common signs of "laptop slouch" — and scores your posture continuously instead of guessing on a timer.&lt;/li&gt;
&lt;li&gt;Water reminders run on an independent interval so hydration nudges don't get skipped just because your posture happens to be perfect that hour.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything happens on-device. &lt;strong&gt;No video is ever recorded or uploaded&lt;/strong&gt; — frames are analyzed instantly and discarded. If you're the type of developer who instinctively covers their laptop camera with tape (I am), that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The research behind the "why"
&lt;/h2&gt;

&lt;p&gt;I didn't want to build a wellness app on vibes, so before writing a line of code I went looking for the actual science. A few things stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviews of digital eye strain consistently point to &lt;em&gt;changes in blinking behavior&lt;/em&gt; — lower frequency, more incomplete blinks — as a real contributor to dry-eye symptoms during prolonged screen use.&lt;/li&gt;
&lt;li&gt;Longer gaps between blinks let the tear film break up before the next blink arrives, which is a big part of why your eyes feel gritty by the afternoon.&lt;/li&gt;
&lt;li&gt;A randomized controlled trial on blink-reminder software specifically found improvements in both blink rate &lt;em&gt;and&lt;/em&gt; dry-eye symptom scores among visual display terminal users — which is basically the closest thing to a controlled study of "does nudging people to blink actually help," and the answer was yes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To be clear: SitBlinkSip doesn't diagnose or treat anything. Digital eye strain has a lot of contributing factors — screen brightness, distance, ambient light, your individual eye health. Blink awareness is just one measurable, fixable piece of that puzzle, and it happens to be the piece a webcam is uniquely good at watching.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually looks like day to day
&lt;/h2&gt;

&lt;p&gt;You open SitBlinkSip before a work session and forget about it. In the background:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start working&lt;/strong&gt; — SitBlinkSip starts watching posture, blink rate, and the clock since your last break.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay focused&lt;/strong&gt; — you keep coding normally. There's no camera preview shown by default, just a small always-on-top counter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get reminded&lt;/strong&gt; — the moment your blink rate dips, your posture score drops, or your water timer runs out, you get a nudge — sized to the urgency. A missed blink gets a brief screen blank (urgent, immediate). Posture drift gets a quiet notification (gradual, not urgent). Water is just a friendly ping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build better habits&lt;/strong&gt; — over enough sessions, the nudges become less necessary because the habit sticks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As one early tester (a full-stack developer) put it: &lt;em&gt;"SitBlinkSip has helped me maintain good posture and eye health during long coding sessions."&lt;/em&gt; That's the entire goal — not another dashboard to babysit, just a quiet second pair of eyes on your own eyes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways to run it
&lt;/h2&gt;

&lt;p&gt;SitBlinkSip actually ships as two different things, depending on how you like to work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The web dashboard&lt;/strong&gt; — a Next.js + FastAPI + OpenCV/dlib stack you spin up locally with Docker. Great if you want the visual dashboard, charts, and the full research write-up in your browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ishworrsubedii/desktop-sitblinksip" rel="noopener noreferrer"&gt;SitBlinkSip Desktop&lt;/a&gt;&lt;/strong&gt; — a native background app for Linux, Windows, and macOS. No server, no database, no browser tab to keep open — just the webcam, a tray icon, and a floating counter. This is the version built for people who want it to disappear into the OS and just work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll go deep on installing and using the desktop app in the next post — it's the one I personally run all day.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's open source, on purpose
&lt;/h2&gt;

&lt;p&gt;I built this alone, out of a genuinely annoying personal habit, and I'm releasing all of it — the computer vision pipeline, the API, the desktop app — under Apache-2.0. If you've ever wanted to see how blink and posture detection actually works under the hood, the repo is fully readable. If you want to add a feature, PRs are welcome.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# clone the web dashboard&lt;/span&gt;
git clone https://github.com/ishworrsubedii/SitBlinkSip.git
&lt;span class="nb"&gt;cd &lt;/span&gt;SitBlinkSip
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# or run the native desktop app from source&lt;/span&gt;
git clone https://github.com/ishworrsubedii/desktop-sitblinksip.git
&lt;span class="nb"&gt;cd &lt;/span&gt;desktop-sitblinksip
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python &lt;span class="nt"&gt;-m&lt;/span&gt; sitblinksip_desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm not trying to build another SaaS dashboard nobody opens twice. The roadmap is intentionally small and honest about what's &lt;em&gt;planned&lt;/em&gt; vs. shipped: deeper session analytics, historical trends over weeks and months, wearable integration, and personalized recommendations based on your own patterns. All of it optional, none of it required to get value from the core loop today.&lt;/p&gt;

&lt;p&gt;If you spend more hours looking at a monitor than at another human face most days — which, if you're reading this on a dev blog, you probably do — give it a try. Star the repo if it's useful, open an issue if something's broken, and let me know what nudging feature you'd want next.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web dashboard &amp;amp; source:&lt;/strong&gt; &lt;a href="https://github.com/ishworrsubedii/SitBlinkSip" rel="noopener noreferrer"&gt;github.com/ishworrsubedii/SitBlinkSip&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop app &amp;amp; source:&lt;/strong&gt; &lt;a href="https://github.com/ishworrsubedii/desktop-sitblinksip" rel="noopener noreferrer"&gt;github.com/ishworrsubedii/desktop-sitblinksip&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live site:&lt;/strong&gt; &lt;a href="https://sitblinksip.oxura.dev/" rel="noopener noreferrer"&gt;sitblinksip.oxura.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Next up: a full walkthrough of installing and configuring SitBlinkSip Desktop on Linux, Windows, and macOS.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: Open Source, Health Tech, Computer Vision, Developer Tools, Productivity&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Pose Estimation: A Simple Guide and Applications</title>
      <dc:creator>Ishwor Subedi</dc:creator>
      <pubDate>Fri, 13 Sep 2024 12:09:35 +0000</pubDate>
      <link>https://dev.to/ishworrsubedii/pose-estimation-a-simple-guide-and-applications-4852</link>
      <guid>https://dev.to/ishworrsubedii/pose-estimation-a-simple-guide-and-applications-4852</guid>
      <description>&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;Pose estimation is a technique used to find and track the positions of human joints in images or videos. This is useful in applications like virtual try-ons, health apps, and fitness monitoring. The goal is to identify key points, such as the elbows, shoulders, and knees, and track their movements. In this guide, we will explore pose estimation models, training methods, and applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje9x5j1tca40y6gfzha8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje9x5j1tca40y6gfzha8.png" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Models and Libraries for Pose Estimation
&lt;/h2&gt;

&lt;p&gt;Here are some popular models and libraries for pose estimation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MediaPipe&lt;/strong&gt;: A fast, easy-to-use library by Google for real-time pose estimation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YOLO-Pose&lt;/strong&gt;: A version of YOLO that detects key points in addition to objects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example (Using MediaPipe)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;mediapipe&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;mp&lt;/span&gt;

&lt;span class="n"&gt;mp_pose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;solutions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pose&lt;/span&gt;
&lt;span class="n"&gt;pose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mp_pose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Pose&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;cap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;VideoCapture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isOpened&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cvtColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COLOR_BGR2RGB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pose_landmarks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;mp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;solutions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drawing_utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;draw_landmarks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pose_landmarks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mp_pose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POSE_CONNECTIONS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Pose Estimation&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;

&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;release&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;destroyAllWindows&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Diagram: YOLO Training Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Input: Images with labeled key points (from CVAT)&lt;/li&gt;
&lt;li&gt;Processing: YOLO training to detect key points.&lt;/li&gt;
&lt;li&gt;Output: A model that can detect key points in new images.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Applications of Pose Estimation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  a. Virtual Try-On (e.g., Glasses Try-on)
&lt;/h3&gt;

&lt;p&gt;Pose estimation helps apps align virtual glasses with your face.&lt;/p&gt;

&lt;h3&gt;
  
  
  b. Fitness Apps
&lt;/h3&gt;

&lt;p&gt;Apps use pose estimation to help users correct their workout form.&lt;/p&gt;

&lt;h3&gt;
  
  
  c. Health Monitoring
&lt;/h3&gt;

&lt;p&gt;Pose estimation can track a patient's movements during physical therapy.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. A Simple Project Idea for Beginners
&lt;/h2&gt;

&lt;p&gt;You can build a basic &lt;strong&gt;Yoga Pose Detection App&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build custom logic to detect common yoga poses.&lt;/li&gt;
&lt;li&gt;Use MediaPipe or YOLO-Pose to detect key points during yoga.&lt;/li&gt;
&lt;li&gt;Provide feedback to users.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. Conclusion
&lt;/h2&gt;

&lt;p&gt;Pose estimation is a powerful tool used in many areas, from fitness to virtual try-on apps. Using libraries like MediaPipe and YOLO makes it easy to get started, and with tools like CVAT, you can even train your own models. This guide provides a basic overview to help you get started with pose estimation.&lt;/p&gt;




</description>
      <category>poseestimation</category>
      <category>machinelearning</category>
      <category>computervision</category>
    </item>
    <item>
      <title>Dockerized deployments, CI/CD, automated workflows for production in cloud environments</title>
      <dc:creator>Ishwor Subedi</dc:creator>
      <pubDate>Thu, 12 Sep 2024 12:29:23 +0000</pubDate>
      <link>https://dev.to/ishworrsubedii/dockerized-deployments-cicd-automated-workflows-for-production-in-cloud-environments-lob</link>
      <guid>https://dev.to/ishworrsubedii/dockerized-deployments-cicd-automated-workflows-for-production-in-cloud-environments-lob</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52pctn03w13ievhajaww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52pctn03w13ievhajaww.png" alt="Image description" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this blog, we’ll learn how to deploy a FastAPI app using Docker and automate it with CI/CD. We’ll go over why Docker is better than traditional SSH-based deployment, and how it simplifies the process of running apps in the cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Docker?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;With normal file setup, you manually upload files to a server via SSH. This often leads to issues like mismatched environments (e.g., different Python versions or missing libraries). Docker eliminates this problem by packaging everything (code, libraries, configurations) into a container.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: Docker ensures the app works the same on every machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: Once the container is created, you don’t have to worry about setting up environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Docker makes scaling your application easier, especially in cloud environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why Not Traditional SSH Deployment?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In traditional deployment, you often use &lt;code&gt;scp&lt;/code&gt; or &lt;code&gt;rsync&lt;/code&gt; to upload code, and manually configure environments via SSH, which can cause:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Environment issues&lt;/strong&gt;: Different setups on local vs. server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual errors&lt;/strong&gt;: Forgetting to install dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-consuming&lt;/strong&gt;: Manual steps every time you update the app.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Docker fixes this by packaging everything together. You create an image once, and then run it anywhere with Docker.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What is Docker?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker is a platform for running applications in containers. A &lt;strong&gt;Docker container&lt;/strong&gt; is a self-contained unit that packages your code and all its dependencies. With Docker, your app works the same in development and production.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dockerfile&lt;/strong&gt;: Instructions to build the Docker image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image&lt;/strong&gt;: Blueprint for the container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container&lt;/strong&gt;: Running instance of an image.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What is CI/CD?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;CI/CD (Continuous Integration/Continuous Delivery) automates testing, building, and deploying applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CI (Continuous Integration)&lt;/strong&gt;: Automatically test and integrate new code changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CD (Continuous Delivery)&lt;/strong&gt;: Automatically deploy tested code into production.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Creating a FastAPI App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We will create a simple FastAPI app and Dockerize it. Then, we'll automate the deployment using GitHub Actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. FastAPI App (&lt;code&gt;main.py&lt;/code&gt;)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# main.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@app.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;read_root&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, Dockerized FastAPI World!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;uvicorn&lt;/span&gt;
    &lt;span class="n"&gt;uvicorn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;2. Dockerfile&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Dockerfile&lt;/code&gt; is used to create a Docker image for our FastAPI app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Use an official Python runtime as a parent image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.9-slim&lt;/span&gt;

&lt;span class="c"&gt;# Set the working directory in the container&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Copy the current directory contents into the container&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . /app&lt;/span&gt;

&lt;span class="c"&gt;# Install FastAPI and Uvicorn&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;fastapi uvicorn

&lt;span class="c"&gt;# Expose the port FastAPI will run on&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8000&lt;/span&gt;

&lt;span class="c"&gt;# Command to run the app&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;3. Build and Run Docker Container&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To build and run the Docker container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; fastapi-app &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8000:8000 fastapi-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will make the app accessible at &lt;code&gt;http://localhost:8000&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Push to Docker Hub&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To share your Docker image, push it to Docker Hub.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Log in to Docker Hub:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker login
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tag your image:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag fastapi-app yourdockerhubusername/fastapi-app:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push the image to Docker Hub:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push yourdockerhubusername/fastapi-app:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;CI/CD Workflow with GitHub Actions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s how to automate Docker image building and deployment using GitHub Actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;GitHub Actions Workflow (&lt;code&gt;.github/workflows/docker.yml&lt;/code&gt;)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CI/CD for FastAPI Docker App&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build-and-push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout code&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up Docker Buildx&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker/setup-buildx-action@v1&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Login to DockerHub&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker/login-action@v2&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.DOCKER_USERNAME }}&lt;/span&gt;
        &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.DOCKER_PASSWORD }}&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build and Push Docker image&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;docker build -t yourdockerhubusername/fastapi-app:latest .&lt;/span&gt;
        &lt;span class="s"&gt;docker push yourdockerhubusername/fastapi-app:latest&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Log out from DockerHub&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker logout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This workflow builds and pushes your Docker image to Docker Hub automatically when changes are pushed to the &lt;code&gt;main&lt;/code&gt; branch. To set up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add your Docker Hub credentials (&lt;code&gt;DOCKER_USERNAME&lt;/code&gt; and &lt;code&gt;DOCKER_PASSWORD&lt;/code&gt;) as GitHub secrets.&lt;/li&gt;
&lt;li&gt;Create the &lt;code&gt;.github/workflows/docker.yml&lt;/code&gt; file.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Deploying Docker on RunPod&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To deploy your Docker container on &lt;strong&gt;RunPod&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create an account&lt;/strong&gt; at &lt;a href="https://runpod.io" rel="noopener noreferrer"&gt;RunPod&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a new pod&lt;/strong&gt; (choose the appropriate machine type).&lt;/li&gt;
&lt;li&gt;** Create a new template**&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faojl32wszvxrrput0ant.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faojl32wszvxrrput0ant.png" alt="Image description" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deploy the template based on your hardware requirements, such as CPU or GPU. It will automatically pull the Docker image from Docker Hub and initiate the container accordingly.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now your FastAPI app will be running on the cloud via RunPod.&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Commands
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/spreadsheets/d/1TTQe9kfH4ETbGYt9j3aTVl_Th3CNaGz82FKOuaCaWQc/edit?usp=sharing" rel="noopener noreferrer"&gt;Docker Installation instruction and commands&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this guide, we learned how to create a FastAPI app, Dockerize it, and automate its deployment using CI/CD. Docker simplifies the deployment process by ensuring the app runs consistently across environments. With tools like GitHub Actions and platforms like RunPod, you can automate the entire deployment process.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>cicd</category>
      <category>aiapplicationdeployment</category>
      <category>runpod</category>
    </item>
    <item>
      <title>Seamless Background Removal with ISNET, SAM, and YOLOSegment Integration</title>
      <dc:creator>Ishwor Subedi</dc:creator>
      <pubDate>Wed, 11 Sep 2024 12:45:59 +0000</pubDate>
      <link>https://dev.to/ishworrsubedii/seamless-background-removal-with-isnet-sam-and-yolosegment-integration-4b3f</link>
      <guid>https://dev.to/ishworrsubedii/seamless-background-removal-with-isnet-sam-and-yolosegment-integration-4b3f</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this blog, we will be covering advanced and seamless background removal techniques using three different architectures: ISNET, SAM, and YOLOSegment. We'll analyze their performance in terms of speed and quality and compare them to help you decide which one suits your project best.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. ISNET (Bria 1.4) - RmGB
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Model Link:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://huggingface.co/briaai/RMBG-1.4" rel="noopener noreferrer"&gt;ISNET Bria 1.4 RmGB Model&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;ISNET is a high-quality background removal model specifically designed for fine-grained edge detection. It's ideal for images where the separation between the foreground and background requires precision, such as product images or detailed portraits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture:
&lt;/h3&gt;

&lt;p&gt;ISNET leverages deep learning techniques with a focus on preserving details. Its architecture consists of multiple layers of convolutions, capturing both local and global information to perform accurate background removal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Suitable For:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Product photography&lt;/li&gt;
&lt;li&gt;Portraits with detailed hair and edges&lt;/li&gt;
&lt;li&gt;High-precision use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time taken&lt;/strong&gt; on RTX A4000: ~1.2 seconds per image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/path_to_image" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/path_to_image" alt="Sample Image - ISNET Background Removal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. YOLOSegment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Model Link:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.ultralytics.com/tasks/segment/" rel="noopener noreferrer"&gt;YOLOSegment Model&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;YOLOSegment is a real-time object detection and segmentation model, widely known for its speed. It is capable of segmenting objects and removing backgrounds with a focus on efficiency, making it suitable for use cases requiring rapid processing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture:
&lt;/h3&gt;

&lt;p&gt;YOLOSegment employs the YOLO (You Only Look Once) architecture, which balances speed and accuracy. Its segmentation head allows it to effectively separate objects from the background in a single pass, optimizing for real-time applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Suitable For:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Real-time applications&lt;/li&gt;
&lt;li&gt;Video streams or live processing&lt;/li&gt;
&lt;li&gt;Fast background removal tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time taken&lt;/strong&gt; on RTX A4000: ~0.3 seconds per image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/path_to_image" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/path_to_image" alt="Sample Image - YOLOSegment Background Removal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. SAM (Segment Anything Model)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Model Link:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/facebookresearch/segment-anything" rel="noopener noreferrer"&gt;SAM Model&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;SAM is designed to handle any segmentation task with minimal input, using a generalist approach. It works across a wide variety of images, and is great for semi-automated background removal where human oversight is required for complex scenes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture:
&lt;/h3&gt;

&lt;p&gt;The SAM architecture is a general-purpose segmentation model. It integrates transformer networks to analyze images and segment them based on context, making it flexible across diverse images with varying complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Suitable For:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;General-purpose segmentation&lt;/li&gt;
&lt;li&gt;Use cases where human input is needed&lt;/li&gt;
&lt;li&gt;Complex backgrounds or scenes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time taken&lt;/strong&gt; on RTX A4000: ~2.0 seconds per image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/path_to_image" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/path_to_image" alt="Sample Image - SAM Background Removal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Each model offers distinct advantages, depending on your specific needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ISNET&lt;/strong&gt;: Best for high-quality and precise background removal tasks where details matter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YOLOSegment&lt;/strong&gt;: Best for real-time applications where speed is essential, like live video or rapid image processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SAM&lt;/strong&gt;: Best for general-purpose background removal, especially where complex backgrounds or human oversight is needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose based on the priority of your task – whether it's quality, speed, or flexibility!&lt;/p&gt;

</description>
      <category>computervision</category>
      <category>machinelearning</category>
      <category>genai</category>
      <category>ishworsubedi</category>
    </item>
    <item>
      <title>Guide to Image Upscaling: Exploring GANs, Diffusion Models (LDSR), and OpenCV Methods</title>
      <dc:creator>Ishwor Subedi</dc:creator>
      <pubDate>Tue, 10 Sep 2024 12:35:33 +0000</pubDate>
      <link>https://dev.to/ishworrsubedii/guide-to-image-upscaling-exploring-gans-diffusion-models-ldsr-and-opencv-methods-4d9c</link>
      <guid>https://dev.to/ishworrsubedii/guide-to-image-upscaling-exploring-gans-diffusion-models-ldsr-and-opencv-methods-4d9c</guid>
      <description>&lt;p&gt;Hi, hello, and welcome! In this blog, we will explore various image upscaling techniques, examining and experimenting with different methods. We’ll compare the results to understand the core concepts and effectiveness of each approach. So, let’s dive in and get started!&lt;/p&gt;

&lt;p&gt;Here, we will be discussing different image upscaling techniques, including:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GAN-Based Image Upscaling Techniques&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESRGAN (Enhanced Super-Resolution GAN)&lt;/li&gt;
&lt;li&gt;RESRGAN4+ (Residual Enhanced Super-Resolution GAN)&lt;/li&gt;
&lt;li&gt;NMKD (Not My Kind of Dream)&lt;/li&gt;
&lt;li&gt;Superscale&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diffusion Architecture Upscaling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LDSR (Latent Diffusion Super Resolution)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OpenCV Techniques&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INTER_AREA&lt;/li&gt;
&lt;li&gt;INTER_LINEAR&lt;/li&gt;
&lt;li&gt;INTER_CUBIC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Comparision Between ESRGAN Vs RESRGAN4+ Vs NMKD vs Superscale Vs LDSR vs INTER_AREA Vs INTER_LINEAR Vs INTER_CUBIC
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" alt="ESRGAN" width="560" height="560"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ESRGAN&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" alt="RESRGAN4" width="560" height="560"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;RESRGAN4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" alt="ESRGAN" width="560" height="560"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;RESRGAN4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" alt="ESRGAN" width="560" height="560"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ESRGAN&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiys2bozhfv2r7swfwrp2.png" alt="ESRGAN" width="560" height="560"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ESRGAN&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ESRGAN (Enhanced Super-Resolution GAN)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How ESRGAN Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESRGAN is built on the GAN (Generative Adversarial Network) framework, designed to enhance image resolution by generating high-quality details from low-resolution inputs. It employs a deep residual network to refine the image through multiple convolutional layers, learning from a large dataset of high-resolution images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Focus:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The primary focus of ESRGAN is to improve texture and detail in upscaled images. By leveraging advanced network architectures and loss functions, ESRGAN aims to produce realistic and visually appealing results with sharp textures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESRGAN’s architecture includes a series of residual blocks that help preserve image details and improve quality. The model consists of a generator that creates high-resolution images and a discriminator that ensures the generated images are realistic by comparing them to actual high-resolution images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Loss Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Perceptual Loss:&lt;/strong&gt; Measures differences in high-level features between the generated and original high-resolution images, focusing on texture and detail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adversarial Loss:&lt;/strong&gt; Ensures the generated images are realistic by training the generator to fool the discriminator into thinking the images are real.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best For:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESRGAN is ideal for enhancing artistic images and photographs where maintaining fine details and textures is crucial.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time Taken on RTX 4000 GPU:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESRGAN typically processes images in a few minutes, depending on their resolution and complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  RESRGAN4 (Residual Enhanced Super-Resolution GAN)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How RESRGAN4 Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RESRGAN4 extends the ESRGAN framework with additional layers and improved residual blocks, aimed at refining image upscaling capabilities. It builds on ESRGAN’s approach but focuses on reducing artifacts and enhancing image sharpness further.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Focus:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RESRGAN4’s key focus is on achieving superior detail recovery and reducing artifacts in high-resolution images, providing even finer and more accurate results compared to its predecessors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This variant enhances the ESRGAN architecture by incorporating additional residual blocks and layers, which improve the network’s ability to capture and generate high-quality textures and details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Loss Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Perceptual Loss:&lt;/strong&gt; Provides a more refined measurement of high-level feature differences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Adversarial Loss:&lt;/strong&gt; Optimizes the generator to produce images that better mimic real high-resolution visuals, minimizing artifacts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best For:&lt;/strong&gt;&lt;br&gt;
RESRGAN4 is well-suited for applications requiring the highest level of detail and artifact reduction, such as detailed artwork or high-resolution textures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time Taken on RTX 4000 GPU:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processing times are similar to ESRGAN, generally a few minutes per image.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  NMKD (Not My Kind of Dream)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How NMKD Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NMKD uses a GAN-based approach similar to ESRGAN but incorporates unique modifications to the network architecture and training process to enhance image quality and reduce common artifacts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Focus:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NMKD focuses on delivering high-resolution images with minimal distortions and artifacts, using a distinct combination of loss functions to improve overall image quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The NMKD model features a GAN architecture with modifications aimed at reducing artifacts and improving the fidelity of the generated images. It uses specialized layers and training techniques to refine image details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Loss Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content Loss:&lt;/strong&gt; Ensures structural accuracy by comparing generated images to original high-resolution images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adversarial Loss:&lt;/strong&gt; Encourages the generator to produce images that are indistinguishable from real high-resolution images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best For:&lt;/strong&gt;&lt;br&gt;
NMKD is ideal for applications where reducing artifacts and enhancing image realism are priorities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time Taken on RTX 4000 GPU:&lt;/strong&gt;&lt;br&gt;
Typically processes images in a few minutes, depending on the resolution and model configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Superscale
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How Superscale Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Superscale employs advanced deep learning models to upscale images, using a combination of convolutional networks and interpolation methods to enhance resolution while preserving details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Focus:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The main focus of Superscale is to achieve high-quality image upscaling with attention to detail preservation and noise reduction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Superscale combines convolutional neural networks with advanced interpolation techniques to refine and upscale images, ensuring high fidelity and clarity in the output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Loss Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content Loss:&lt;/strong&gt; Ensures that the upscaled image maintains structural integrity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perceptual Loss:&lt;/strong&gt; Enhances image quality by comparing high-level features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best For:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Superscale is suitable for applications requiring detailed and high-quality image upscaling, including professional photography and high-definition media.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time Taken on RTX 4000 GPU:&lt;/strong&gt;&lt;br&gt;
Processing time varies but generally takes a few minutes per image, similar to other deep learning models.&lt;/p&gt;

&lt;h2&gt;
  
  
  LDSR (Latent Diffusion Super Resolution)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How LDSR Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LDSR leverages latent diffusion models to perform image upscaling. It compresses images into a lower-dimensional latent space and applies diffusion processes to enhance resolution while maintaining image details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Focus:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LDSR focuses on efficient image upscaling with a strong emphasis on maintaining detail and reducing artifacts through iterative refinement in the latent space.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LDSR’s architecture involves a latent space representation where images are refined through iterative denoising steps, allowing for high-quality upscaling with lower computational demands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Loss Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Latent Space Loss:&lt;/strong&gt; Measures differences within the latent space to refine image quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perceptual Loss:&lt;/strong&gt; Ensures that the upscaled image retains high-level features and details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best For:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LDSR is ideal for applications requiring efficient and high-quality image upscaling with a focus on detail preservation and artifact reduction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time Taken on RTX 4000 GPU:&lt;/strong&gt;&lt;br&gt;
Typically processes images in a few minutes, making it an efficient choice for high-resolution tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenCV Techniques
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How OpenCV Techniques Work:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenCV provides traditional methods for image upscaling through various interpolation techniques, each with different trade-offs in quality and performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Focus:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These methods focus on resizing images using mathematical techniques to balance quality and computational efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Techniques:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;INTER_AREA:&lt;/strong&gt; Uses pixel area relation for resampling; effective for downscaling and minimal quality loss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;INTER_LINEAR:&lt;/strong&gt; Bilinear interpolation method; balances quality and performance by averaging pixel values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;INTER_CUBIC:&lt;/strong&gt; Uses cubic convolution interpolation for smoother results; provides higher quality at the expense of computational time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best For:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenCV techniques are suitable for applications requiring fast and straightforward image resizing with acceptable quality, such as real-time processing and basic image adjustments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time Taken on RTX 4000 GPU:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processing times are generally very fast, often taking only a few seconds per image due to the simplicity of the interpolation methods.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>computervision</category>
      <category>machinelearning</category>
      <category>ai</category>
      <category>python</category>
    </item>
  </channel>
</rss>
