Skip to content

Commit 141ce66

Browse files
repo setup
1 parent d64e533 commit 141ce66

File tree

12 files changed

+237
-1
lines changed

12 files changed

+237
-1
lines changed

README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,94 @@
1-
# oakd-uvc-launcher
1+
# OAK-D UVC Launcher
2+
3+
A sleek, one-click GUI app to turn your Luxonis OAK-D camera into a standard UVC webcam — perfect for use in Zoom, Google Meet, OBS, and more.
4+
5+
No more fumbling with scripts, udev rules, or systemd services. Just install, click, and stream.
6+
7+
## Features
8+
9+
- Simple start/stop interface
10+
- Automatically detects OAK-D device
11+
- Starts UVC mode using uvc_rgb.py
12+
- Clean .deb installer — system integrated
13+
- No terminal or coding required after install
14+
- Works with all apps that support /dev/video*
15+
16+
## Screenshots
17+
18+
(Add screenshots in a folder named screenshots/ and reference them here)
19+
20+
| Launcher | Camera in Google Meet |
21+
|----------|----------------|
22+
| ![Launcher](screenshots/oakd-gui-active.png) | ![Google Meet](screenshots/oakd_in_gmeet.png) |
23+
24+
## Installation
25+
26+
Download the latest .deb from the Releases page:
27+
28+
wget https://github.com/Pixeptron-Vision//oakd-uvc-launcher/releases/download/v1.0.0/oakd-uvc.deb
29+
sudo dpkg -i oakd-uvc.deb
30+
sudo apt --fix-broken install # If needed
31+
32+
Once installed, launch from your app menu:
33+
OAK-D Webcam GUI
34+
35+
## System Requirements
36+
37+
- Linux (Debian/Ubuntu)
38+
- Python 3.8+
39+
- depthai (installed in your virtualenv or system Python)
40+
- Tkinter (sudo apt install python3-tk)
41+
42+
## How It Works
43+
44+
- GUI is built with Tkinter
45+
- Script uses uvc_rgb.py from depthai-python
46+
- Starts OAK-D as /dev/video*
47+
- Works seamlessly with apps expecting a webcam
48+
49+
## Build It Yourself (Optional)
50+
51+
git clone https://github.com/YOUR_USERNAME/oakd-uvc-launcher.git
52+
cd oakd-uvc-launcher
53+
chmod +x build_deb.sh
54+
./build_deb.sh
55+
56+
This will create a fresh oakd-uvc.deb in the root directory.
57+
58+
## Uninstall
59+
60+
sudo apt remove oakd-uvc
61+
62+
This will remove the app, launcher, and all system integration files.
63+
64+
## Troubleshooting
65+
66+
Device not found?
67+
Make sure your OAK-D is connected and shows up in:
68+
69+
lsusb | grep 03e7:2485
70+
71+
No video in Zoom/Meet?
72+
Run this and look for a Luxonis webcam device:
73+
74+
v4l2-ctl --list-devices
75+
76+
Still stuck? Open an issue on GitHub and I’ll help you out.
77+
78+
## Contributions
79+
80+
Pull requests are welcome! Want to add:
81+
- System tray support?
82+
- Auto-start at boot?
83+
- OBS scene toggling?
84+
85+
Fork the repo and go wild!
86+
87+
## Author
88+
89+
Made with ❤️ by Sri Chakra
90+
Built to get the OAK-D camera work as a webcam.
91+
92+
## License
93+
94+
This project is licensed under the MIT License.

build_deb.sh

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
APP_NAME="oakd-uvc"
6+
VERSION="1.0.0"
7+
ARCH="amd64"
8+
BUILD_DIR="./${APP_NAME}_${VERSION}"
9+
BIN_NAME="oakd-uvc-gui"
10+
BIN_PATH="./dist/${BIN_NAME}"
11+
ICON_SRC="./oakd-uvc.png"
12+
DESKTOP_SRC="./desktop/oakd-uvc.desktop"
13+
14+
echo "🧹 Cleaning previous build..."
15+
rm -rf "$BUILD_DIR"
16+
mkdir -p "$BUILD_DIR/DEBIAN"
17+
mkdir -p "$BUILD_DIR/usr/local/bin"
18+
mkdir -p "$BUILD_DIR/usr/share/applications"
19+
mkdir -p "$BUILD_DIR/usr/share/icons/hicolor/64x64/apps"
20+
21+
echo "📦 Creating control file..."
22+
cat <<EOF > "$BUILD_DIR/DEBIAN/control"
23+
Package: $APP_NAME
24+
Version: $VERSION
25+
Architecture: $ARCH
26+
Maintainer: Sri Chakra
27+
Depends: libc6 (>= 2.31), libglib2.0-0, libgtk-3-0
28+
Description: GUI app to toggle OAK-D UVC mode for Zoom/Meet
29+
A friendly Tkinter GUI that allows you to activate and deactivate webcam mode on your Luxonis OAK-D device with one click.
30+
EOF
31+
32+
echo "📁 Copying app binary..."
33+
cp "$BIN_PATH" "$BUILD_DIR/usr/local/bin/$BIN_NAME"
34+
chmod +x "$BUILD_DIR/usr/local/bin/$BIN_NAME"
35+
36+
echo "📁 Copying .desktop launcher..."
37+
cp "$DESKTOP_SRC" "$BUILD_DIR/usr/share/applications/oakd-uvc.desktop"
38+
39+
echo "🖼️ Copying icon..."
40+
cp "$ICON_SRC" "$BUILD_DIR/usr/share/icons/hicolor/64x64/apps/oakd-uvc.png"
41+
42+
echo "📦 Building .deb package..."
43+
dpkg-deb --build "$BUILD_DIR"
44+
45+
echo "✅ Done. Built: ${BUILD_DIR}.deb"

debian/DEBIAN/control

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Package: oakd-uvc
2+
Version: 1.0.0
3+
Architecture: amd64
4+
Maintainer: Sri-Chakra
5+
Depends: libc6 (>= 2.31), libglib2.0-0, libgtk-3-0
6+
Description: GUI app to toggle OAK-D UVC mode for Zoom/Meet
7+
A friendly Tkinter GUI that allows you to activate and deactivate webcam mode on your Luxonis OAK-D device with one click.

debian/usr/local/bin/oakd-uvc-gui

11.6 MB
Binary file not shown.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[Desktop Entry]
2+
Type=Application
3+
Name=OAK-D Webcam GUI
4+
Exec=/usr/local/bin/oakd-uvc-gui
5+
Icon=oakd-uvc
6+
Terminal=false
7+
Categories=Utility;
1.23 MB
Loading

desktop/oakd-uvc.desktop

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[Desktop Entry]
2+
Type=Application
3+
Name=OAK-D Webcam GUI
4+
Exec=/usr/local/bin/oakd-uvc-gui
5+
Icon=oakd-uvc
6+
Terminal=false
7+
Categories=Utility;

oakd-uvc.png

1.23 MB
Loading

oakd_uvc_gui.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import tkinter as tk
2+
from tkinter import messagebox
3+
import subprocess
4+
import threading
5+
import os
6+
import signal
7+
import time
8+
9+
UVC_SCRIPT = "/path to/depthai-python/examples/UVC/uvc_rgb.py" # update this path as per your setup
10+
VENV_ACTIVATE = "/path to/environments/depthai/bin/activate" #update this path as per your setup
11+
uvc_process = None
12+
13+
def is_device_connected():
14+
try:
15+
lsusb = subprocess.check_output(["lsusb"]).decode()
16+
return "03e7:2485" in lsusb
17+
except Exception:
18+
return False
19+
20+
def start_uvc():
21+
global uvc_process
22+
if uvc_process is not None:
23+
messagebox.showinfo("Info", "UVC mode is already running.")
24+
return
25+
26+
if not is_device_connected():
27+
messagebox.showerror("Error", "OAK-D device not connected.")
28+
return
29+
30+
def run_uvc():
31+
global uvc_process
32+
command = f"bash -c 'source {VENV_ACTIVATE} && python {UVC_SCRIPT}'"
33+
uvc_process = subprocess.Popen(command, shell=True, preexec_fn=os.setsid)
34+
35+
threading.Thread(target=run_uvc).start()
36+
status_label.config(text="UVC Running...")
37+
38+
def stop_uvc():
39+
global uvc_process
40+
if uvc_process:
41+
os.killpg(os.getpgid(uvc_process.pid), signal.SIGINT)
42+
uvc_process = None
43+
status_label.config(text="Stopped")
44+
messagebox.showinfo("Info", "UVC mode stopped.")
45+
else:
46+
messagebox.showinfo("Info", "UVC mode is not running.")
47+
48+
def update_status():
49+
if is_device_connected():
50+
device_status.set("OAK-D connected")
51+
else:
52+
device_status.set("OAK-D not found")
53+
root.after(2000, update_status)
54+
55+
# GUI setup
56+
root = tk.Tk()
57+
root.title("OAK-D Webcam Control")
58+
59+
tk.Label(root, text="OAK-D UVC Control Panel", font=("Arial", 14)).pack(pady=10)
60+
61+
device_status = tk.StringVar()
62+
device_status.set("Checking device...")
63+
tk.Label(root, textvariable=device_status, fg="blue").pack()
64+
65+
status_label = tk.Label(root, text="Status: Idle", fg="green")
66+
status_label.pack(pady=5)
67+
68+
btn_frame = tk.Frame(root)
69+
btn_frame.pack(pady=10)
70+
71+
tk.Button(btn_frame, text="Start Webcam Mode", command=start_uvc, width=20).grid(row=0, column=0, padx=5)
72+
tk.Button(btn_frame, text="Stop Webcam Mode", command=stop_uvc, width=20).grid(row=0, column=1, padx=5)
73+
74+
tk.Button(root, text="Quit", command=root.quit, fg="red").pack(pady=10)
75+
76+
update_status()
77+
root.mainloop()

screenshots/aokd-gui-active.png

15.3 KB
Loading

0 commit comments

Comments
 (0)