Compare commits
5 Commits
79dab64ef3
...
52d06973cd
Author | SHA1 | Date |
---|---|---|
|
52d06973cd | |
|
12fda0a3ed | |
|
d963430854 | |
|
5855d15c09 | |
|
c1a6dc693d |
15
README.md
15
README.md
|
@ -304,19 +304,6 @@ python run.py --execution-provider openvino
|
||||||
- Use a screen capture tool like OBS to stream.
|
- Use a screen capture tool like OBS to stream.
|
||||||
- To change the face, select a new source image.
|
- To change the face, select a new source image.
|
||||||
|
|
||||||
## Tips and Tricks
|
|
||||||
|
|
||||||
Check out these helpful guides to get the most out of Deep-Live-Cam:
|
|
||||||
|
|
||||||
- [Unlocking the Secrets to the Perfect Deepfake Image](https://deeplivecam.net/index.php/blog/tips-and-tricks/unlocking-the-secrets-to-the-perfect-deepfake-image) - Learn how to create the best deepfake with full head coverage
|
|
||||||
- [Video Call with DeepLiveCam](https://deeplivecam.net/index.php/blog/tips-and-tricks/video-call-with-deeplivecam) - Make your meetings livelier by using DeepLiveCam with OBS and meeting software
|
|
||||||
- [Have a Special Guest!](https://deeplivecam.net/index.php/blog/tips-and-tricks/have-a-special-guest) - Tutorial on how to use face mapping to add special guests to your stream
|
|
||||||
- [Watch Deepfake Movies in Realtime](https://deeplivecam.net/index.php/blog/tips-and-tricks/watch-deepfake-movies-in-realtime) - See yourself star in any video without processing the video
|
|
||||||
- [Better Quality without Sacrificing Speed](https://deeplivecam.net/index.php/blog/tips-and-tricks/better-quality-without-sacrificing-speed) - Tips for achieving better results without impacting performance
|
|
||||||
- [Instant Vtuber!](https://deeplivecam.net/index.php/blog/tips-and-tricks/instant-vtuber) - Create a new persona/vtuber easily using Metahuman Creator
|
|
||||||
|
|
||||||
Visit our [official blog](https://deeplivecam.net/index.php/blog/tips-and-tricks) for more tips and tutorials.
|
|
||||||
|
|
||||||
## Command Line Arguments (Unmaintained)
|
## Command Line Arguments (Unmaintained)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -360,6 +347,8 @@ Looking for a CLI mode? Using the -s/--source argument will make the run program
|
||||||
- [*"This real-time webcam deepfake tool raises alarms about the future of identity theft"*](https://www.diyphotography.net/this-real-time-webcam-deepfake-tool-raises-alarms-about-the-future-of-identity-theft/) - DIYPhotography
|
- [*"This real-time webcam deepfake tool raises alarms about the future of identity theft"*](https://www.diyphotography.net/this-real-time-webcam-deepfake-tool-raises-alarms-about-the-future-of-identity-theft/) - DIYPhotography
|
||||||
- [*"That's Crazy, Oh God. That's Fucking Freaky Dude... That's So Wild Dude"*](https://www.youtube.com/watch?time_continue=1074&v=py4Tc-Y8BcY) - SomeOrdinaryGamers
|
- [*"That's Crazy, Oh God. That's Fucking Freaky Dude... That's So Wild Dude"*](https://www.youtube.com/watch?time_continue=1074&v=py4Tc-Y8BcY) - SomeOrdinaryGamers
|
||||||
- [*"Alright look look look, now look chat, we can do any face we want to look like chat"*](https://www.youtube.com/live/mFsCe7AIxq8?feature=shared&t=2686) - IShowSpeed
|
- [*"Alright look look look, now look chat, we can do any face we want to look like chat"*](https://www.youtube.com/live/mFsCe7AIxq8?feature=shared&t=2686) - IShowSpeed
|
||||||
|
- [*"They do a pretty good job matching poses, expression and even the lighting"*](https://www.youtube.com/watch?v=wnCghLjqv3s&t=551s) - TechLinked (LTT)
|
||||||
|
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
|
|
@ -799,73 +799,39 @@ def webcam_preview(root: ctk.CTk, camera_index: int):
|
||||||
|
|
||||||
|
|
||||||
def get_available_cameras():
|
def get_available_cameras():
|
||||||
"""Returns a list of available camera names and indices."""
|
"""
|
||||||
|
Safe camera detection for macOS and Unix-like systems that avoids threading and AVX crashes.
|
||||||
|
Returns a tuple of (camera_indices, camera_names).
|
||||||
|
"""
|
||||||
|
import cv2
|
||||||
|
import platform
|
||||||
|
|
||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
try:
|
try:
|
||||||
|
from pygrabber.dshow_graph import FilterGraph
|
||||||
graph = FilterGraph()
|
graph = FilterGraph()
|
||||||
devices = graph.get_input_devices()
|
devices = graph.get_input_devices()
|
||||||
|
|
||||||
# Create list of indices and names
|
|
||||||
camera_indices = list(range(len(devices)))
|
camera_indices = list(range(len(devices)))
|
||||||
camera_names = devices
|
camera_names = devices
|
||||||
|
|
||||||
# If no cameras found through DirectShow, try OpenCV fallback
|
|
||||||
if not camera_names:
|
|
||||||
# Try to open camera with index -1 and 0
|
|
||||||
test_indices = [-1, 0]
|
|
||||||
working_cameras = []
|
|
||||||
|
|
||||||
for idx in test_indices:
|
|
||||||
cap = cv2.VideoCapture(idx)
|
|
||||||
if cap.isOpened():
|
|
||||||
working_cameras.append(f"Camera {idx}")
|
|
||||||
cap.release()
|
|
||||||
|
|
||||||
if working_cameras:
|
|
||||||
return test_indices[: len(working_cameras)], working_cameras
|
|
||||||
|
|
||||||
# If still no cameras found, return empty lists
|
|
||||||
if not camera_names:
|
if not camera_names:
|
||||||
return [], ["No cameras found"]
|
return [], ["No cameras found"]
|
||||||
|
|
||||||
return camera_indices, camera_names
|
return camera_indices, camera_names
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error detecting cameras: {str(e)}")
|
print(f"[Camera Detection Error - Windows]: {e}")
|
||||||
return [], ["No cameras found"]
|
|
||||||
else:
|
|
||||||
# Unix-like systems (Linux/Mac) camera detection
|
|
||||||
camera_indices = []
|
|
||||||
camera_names = []
|
|
||||||
|
|
||||||
if platform.system() == "Darwin": # macOS specific handling
|
|
||||||
# Try to open the default FaceTime camera first
|
|
||||||
cap = cv2.VideoCapture(0)
|
|
||||||
if cap.isOpened():
|
|
||||||
camera_indices.append(0)
|
|
||||||
camera_names.append("FaceTime Camera")
|
|
||||||
cap.release()
|
|
||||||
|
|
||||||
# On macOS, additional cameras typically use indices 1 and 2
|
|
||||||
for i in [1, 2]:
|
|
||||||
cap = cv2.VideoCapture(i)
|
|
||||||
if cap.isOpened():
|
|
||||||
camera_indices.append(i)
|
|
||||||
camera_names.append(f"Camera {i}")
|
|
||||||
cap.release()
|
|
||||||
else:
|
|
||||||
# Linux camera detection - test first 10 indices
|
|
||||||
for i in range(10):
|
|
||||||
cap = cv2.VideoCapture(i)
|
|
||||||
if cap.isOpened():
|
|
||||||
camera_indices.append(i)
|
|
||||||
camera_names.append(f"Camera {i}")
|
|
||||||
cap.release()
|
|
||||||
|
|
||||||
if not camera_names:
|
|
||||||
return [], ["No cameras found"]
|
return [], ["No cameras found"]
|
||||||
|
|
||||||
return camera_indices, camera_names
|
# macOS or Linux
|
||||||
|
try:
|
||||||
|
print("[Info] Safely checking for available cameras...")
|
||||||
|
cap = cv2.VideoCapture(0)
|
||||||
|
if cap is None or not cap.isOpened():
|
||||||
|
print("[Warning] Default camera (index 0) not available.")
|
||||||
|
return [], ["No cameras found"]
|
||||||
|
cap.release()
|
||||||
|
return [0], ["Default Camera (Index 0)"]
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[Camera Detection Error - Unix]: {e}")
|
||||||
|
return [], ["No cameras found"]
|
||||||
|
|
||||||
|
|
||||||
def create_webcam_preview(camera_index: int):
|
def create_webcam_preview(camera_index: int):
|
||||||
|
|
Loading…
Reference in New Issue