Compare commits
	
		
			76 Commits 
		
	
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								 | 
						fdbc29c1a9 | |
| 
							
							
								 | 
						87d982e6f8 | |
| 
							
							
								 | 
						cf47dabf0e | |
| 
							
							
								 | 
						d0d90ecc03 | |
| 
							
							
								 | 
						2b70131e6a | |
| 
							
							
								 | 
						fc86365a90 | |
| 
							
							
								 | 
						1dd0e8e509 | |
| 
							
							
								 | 
						4e0ff540f0 | |
| 
							
							
								 | 
						f0fae811d8 | |
| 
							
							
								 | 
						42687f5bd9 | |
| 
							
							
								 | 
						9086072b8e | |
| 
							
							
								 | 
						12fda0a3ed | |
| 
							
							
								 | 
						d963430854 | |
| 
							
							
								 | 
						5855d15c09 | |
| 
							
							
								 | 
						fcc73d0add | |
| 
							
							
								 | 
						8d4a386a27 | |
| 
							
							
								 | 
						b98c5234d8 | |
| 
							
							
								 | 
						8bdc14a789 | |
| 
							
							
								 | 
						f121083bc8 | |
| 
							
							
								 | 
						745d449ca6 | |
| 
							
							
								 | 
						ec6d7d2995 | |
| 
							
							
								 | 
						e791f2f18a | |
| 
							
							
								 | 
						3795e41fd7 | |
| 
							
							
								 | 
						ab8a1c82c1 | |
| 
							
							
								 | 
						e1842ae0ba | |
| 
							
							
								 | 
						989106e914 | |
| 
							
							
								 | 
						de27fb8a81 | |
| 
							
							
								 | 
						28109e93bb | |
| 
							
							
								 | 
						fc312516e3 | |
| 
							
							
								 | 
						72049f3e91 | |
| 
							
							
								 | 
						6cb5de01f8 | |
| 
							
							
								 | 
						0bcf340217 | |
| 
							
							
								 | 
						994a63c546 | |
| 
							
							
								 | 
						d5a3fb0c47 | |
| 
							
							
								 | 
						9690070399 | |
| 
							
							
								 | 
						f3e83b985c | |
| 
							
							
								 | 
						e3e3638b79 | |
| 
							
							
								 | 
						4a7874a968 | |
| 
							
							
								 | 
						75122da389 | |
| 
							
							
								 | 
						7063bba4b3 | |
| 
							
							
								 | 
						bdbd7dcfbc | |
| 
							
							
								 | 
						a64940def7 | |
| 
							
							
								 | 
						fe4a87e8f2 | |
| 
							
							
								 | 
						9ecd2dab83 | |
| 
							
							
								 | 
						c9f36eb350 | |
| 
							
							
								 | 
						b1f610d432 | |
| 
							
							
								 | 
						d86c36dc47 | |
| 
							
							
								 | 
						532e7c05ee | |
| 
							
							
								 | 
						267a273cb2 | |
| 
							
							
								 | 
						938aa9eaf1 | |
| 
							
							
								 | 
						37bac27302 | |
| 
							
							
								 | 
						84836932e6 | |
| 
							
							
								 | 
						e879d2ca64 | |
| 
							
							
								 | 
						181144ce33 | |
| 
							
							
								 | 
						890beb0eae | |
| 
							
							
								 | 
						75b5b096d6 | |
| 
							
							
								 | 
						40e47a469c | |
| 
							
							
								 | 
						874abb4e59 | |
| 
							
							
								 | 
						18b259da70 | |
| 
							
							
								 | 
						01900dcfb5 | |
| 
							
							
								 | 
						07e30fe781 | |
| 
							
							
								 | 
						3dda4f2179 | |
| 
							
							
								 | 
						71735e4f60 | |
| 
							
							
								 | 
						90d5c28542 | |
| 
							
							
								 | 
						104d8cf4d6 | |
| 
							
							
								 | 
						ac3696b69d | |
| 
							
							
								 | 
						76fb209e6c | |
| 
							
							
								 | 
						2dcd552c4b | |
| 
							
							
								 | 
						66248a37b4 | |
| 
							
							
								 | 
						aa9b7ed3b6 | |
| 
							
							
								 | 
						51a4246050 | |
| 
							
							
								 | 
						3f1c072fac | |
| 
							
							
								 | 
						f91f9203e7 | |
| 
							
							
								 | 
						80477676b4 | |
| 
							
							
								 | 
						c728994e6b | |
| 
							
							
								 | 
						65da3be2a4 | 
								
									
									
										
											108
										
									
									README.md
									
									
									
									
								
								
							
							
										
											108
										
									
									README.md
									
									
									
									
								| 
						 | 
				
			
			@ -30,18 +30,13 @@ By using this software, you agree to these terms and commit to using it in a man
 | 
			
		|||
 | 
			
		||||
Users are expected to use this software responsibly and legally. If using a real person's face, obtain their consent and clearly label any output as a deepfake when sharing online. We are not responsible for end-user actions.
 | 
			
		||||
 | 
			
		||||
## Exclusive v2.2 Quick Start - Pre-built (Windows/Mac Silicon)
 | 
			
		||||
 | 
			
		||||
## Quick Start - Pre-built (Windows / Nvidia)
 | 
			
		||||
  <a href="https://deeplivecam.net/index.php/quickstart"> <img src="media/Download.png" width="285" height="77" />
 | 
			
		||||
 | 
			
		||||
  <a href="https://hacksider.gumroad.com/l/vccdmm"> <img src="https://github.com/user-attachments/assets/7d993b32-e3e8-4cd3-bbfb-a549152ebdd5" width="285" height="77" />
 | 
			
		||||
 | 
			
		||||
##### This is the fastest build you can get if you have a discrete NVIDIA GPU.
 | 
			
		||||
 | 
			
		||||
## Quick Start - Pre-built (Mac / Silicon)
 | 
			
		||||
    
 | 
			
		||||
  <a href="https://krshh.gumroad.com/l/Deep-Live-Cam-Mac"> <img src="https://github.com/user-attachments/assets/d5d913b5-a7de-4609-96b9-979a5749a703" width="285" height="77" />
 | 
			
		||||
##### This is the fastest build you can get if you have a discrete NVIDIA or AMD GPU or Mac Silicon, And you'll receive special priority support.
 | 
			
		||||
 
 | 
			
		||||
###### These Pre-builts are perfect for non-technical users or those who don’t have time to, or can't manually install all the requirements. Just a heads-up: this is an open-source project, so you can also install it manually.
 | 
			
		||||
###### These Pre-builts are perfect for non-technical users or those who don't have time to, or can't manually install all the requirements. Just a heads-up: this is an open-source project, so you can also install it manually. 
 | 
			
		||||
 | 
			
		||||
## TLDR; Live Deepfake in just 3 Clicks
 | 
			
		||||

 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +98,7 @@ Users are expected to use this software responsibly and legally. If using a real
 | 
			
		|||
 | 
			
		||||
## Installation (Manual)
 | 
			
		||||
 | 
			
		||||
**Please be aware that the installation requires technical skills and is not for beginners. Consider downloading the prebuilt version.**
 | 
			
		||||
**Please be aware that the installation requires technical skills and is not for beginners. Consider downloading the quickstart version.**
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
<summary>Click to see the process</summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +109,7 @@ This is more likely to work on your computer but will be slower as it utilizes t
 | 
			
		|||
 | 
			
		||||
**1. Set up Your Platform**
 | 
			
		||||
 | 
			
		||||
-   Python (3.10 recommended)
 | 
			
		||||
-   Python (3.11 recommended)
 | 
			
		||||
-   pip
 | 
			
		||||
-   git
 | 
			
		||||
-   [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA) - ```iex (irm ffmpeg.tc.ht)```
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +118,8 @@ This is more likely to work on your computer but will be slower as it utilizes t
 | 
			
		|||
**2. Clone the Repository**
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
https://github.com/hacksider/Deep-Live-Cam.git
 | 
			
		||||
git clone https://github.com/hacksider/Deep-Live-Cam.git
 | 
			
		||||
cd Deep-Live-Cam
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**3. Download the Models**
 | 
			
		||||
| 
						 | 
				
			
			@ -137,14 +133,52 @@ Place these files in the "**models**" folder.
 | 
			
		|||
 | 
			
		||||
We highly recommend using a `venv` to avoid issues.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
For Windows:
 | 
			
		||||
```bash
 | 
			
		||||
python -m venv venv
 | 
			
		||||
venv\Scripts\activate
 | 
			
		||||
pip install -r requirements.txt
 | 
			
		||||
```
 | 
			
		||||
For Linux:
 | 
			
		||||
```bash
 | 
			
		||||
# Ensure you use the installed Python 3.10
 | 
			
		||||
python3 -m venv venv
 | 
			
		||||
source venv/bin/activate
 | 
			
		||||
pip install -r requirements.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**For macOS:** Install or upgrade the `python-tk` package:
 | 
			
		||||
**For macOS:**
 | 
			
		||||
 | 
			
		||||
Apple Silicon (M1/M2/M3) requires specific setup:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# Install Python 3.11 (specific version is important)
 | 
			
		||||
brew install python@3.11
 | 
			
		||||
 | 
			
		||||
# Install tkinter package (required for the GUI)
 | 
			
		||||
brew install python-tk@3.10
 | 
			
		||||
 | 
			
		||||
# Create and activate virtual environment with Python 3.11
 | 
			
		||||
python3.11 -m venv venv
 | 
			
		||||
source venv/bin/activate
 | 
			
		||||
 | 
			
		||||
# Install dependencies
 | 
			
		||||
pip install -r requirements.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
** In case something goes wrong and you need to reinstall the virtual environment **
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# Deactivate the virtual environment
 | 
			
		||||
rm -rf venv
 | 
			
		||||
 | 
			
		||||
# Reinstall the virtual environment
 | 
			
		||||
python -m venv venv
 | 
			
		||||
source venv/bin/activate
 | 
			
		||||
 | 
			
		||||
# install the dependencies again
 | 
			
		||||
pip install -r requirements.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**Run:** If you don't have a GPU, you can run Deep-Live-Cam using `python run.py`. Note that initial execution will download models (~300MB).
 | 
			
		||||
| 
						 | 
				
			
			@ -153,12 +187,16 @@ brew install python-tk@3.10
 | 
			
		|||
 | 
			
		||||
**CUDA Execution Provider (Nvidia)**
 | 
			
		||||
 | 
			
		||||
1. Install [CUDA Toolkit 11.8.0](https://developer.nvidia.com/cuda-11-8-0-download-archive)
 | 
			
		||||
2. Install dependencies:
 | 
			
		||||
1. Install [CUDA Toolkit 12.8.0](https://developer.nvidia.com/cuda-12-8-0-download-archive)
 | 
			
		||||
2. Install [cuDNN v8.9.7 for CUDA 12.x](https://developer.nvidia.com/rdp/cudnn-archive) (required for onnxruntime-gpu):
 | 
			
		||||
   - Download cuDNN v8.9.7 for CUDA 12.x
 | 
			
		||||
   - Make sure the cuDNN bin directory is in your system PATH
 | 
			
		||||
3. Install dependencies:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
 | 
			
		||||
pip uninstall onnxruntime onnxruntime-gpu
 | 
			
		||||
pip install onnxruntime-gpu==1.16.3
 | 
			
		||||
pip install onnxruntime-gpu==1.21.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
3. Usage:
 | 
			
		||||
| 
						 | 
				
			
			@ -169,26 +207,46 @@ python run.py --execution-provider cuda
 | 
			
		|||
 | 
			
		||||
**CoreML Execution Provider (Apple Silicon)**
 | 
			
		||||
 | 
			
		||||
1. Install dependencies:
 | 
			
		||||
Apple Silicon (M1/M2/M3) specific installation:
 | 
			
		||||
 | 
			
		||||
1. Make sure you've completed the macOS setup above using Python 3.10.
 | 
			
		||||
2. Install dependencies:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
pip uninstall onnxruntime onnxruntime-silicon
 | 
			
		||||
pip install onnxruntime-silicon==1.13.1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. Usage:
 | 
			
		||||
3. Usage (important: specify Python 3.10):
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
python run.py --execution-provider coreml
 | 
			
		||||
python3.10 run.py --execution-provider coreml
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**Important Notes for macOS:**
 | 
			
		||||
- You **must** use Python 3.10, not newer versions like 3.11 or 3.13
 | 
			
		||||
- Always run with `python3.10` command not just `python` if you have multiple Python versions installed
 | 
			
		||||
- If you get error about `_tkinter` missing, reinstall the tkinter package: `brew reinstall python-tk@3.10`
 | 
			
		||||
- If you get model loading errors, check that your models are in the correct folder
 | 
			
		||||
- If you encounter conflicts with other Python versions, consider uninstalling them:
 | 
			
		||||
  ```bash
 | 
			
		||||
  # List all installed Python versions
 | 
			
		||||
  brew list | grep python
 | 
			
		||||
  
 | 
			
		||||
  # Uninstall conflicting versions if needed
 | 
			
		||||
  brew uninstall --ignore-dependencies python@3.11 python@3.13
 | 
			
		||||
  
 | 
			
		||||
  # Keep only Python 3.11
 | 
			
		||||
  brew cleanup
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
**CoreML Execution Provider (Apple Legacy)**
 | 
			
		||||
 | 
			
		||||
1. Install dependencies:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
pip uninstall onnxruntime onnxruntime-coreml
 | 
			
		||||
pip install onnxruntime-coreml==1.13.1
 | 
			
		||||
pip install onnxruntime-coreml==1.21.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. Usage:
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +261,7 @@ python run.py --execution-provider coreml
 | 
			
		|||
 | 
			
		||||
```bash
 | 
			
		||||
pip uninstall onnxruntime onnxruntime-directml
 | 
			
		||||
pip install onnxruntime-directml==1.15.1
 | 
			
		||||
pip install onnxruntime-directml==1.21.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. Usage:
 | 
			
		||||
| 
						 | 
				
			
			@ -218,7 +276,7 @@ python run.py --execution-provider directml
 | 
			
		|||
 | 
			
		||||
```bash
 | 
			
		||||
pip uninstall onnxruntime onnxruntime-openvino
 | 
			
		||||
pip install onnxruntime-openvino==1.15.0
 | 
			
		||||
pip install onnxruntime-openvino==1.21.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. Usage:
 | 
			
		||||
| 
						 | 
				
			
			@ -226,7 +284,6 @@ pip install onnxruntime-openvino==1.15.0
 | 
			
		|||
```bash
 | 
			
		||||
python run.py --execution-provider openvino
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
| 
						 | 
				
			
			@ -290,6 +347,9 @@ 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
 | 
			
		||||
 - [*"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
 | 
			
		||||
 - [*"They do a pretty good job matching poses, expression and even the lighting"*](https://www.youtube.com/watch?v=wnCghLjqv3s&t=551s) - TechLinked (LTT)
 | 
			
		||||
 - [*"Als Sean Connery an der Redaktionskonferenz teilnahm"*](https://www.golem.de/news/deepfakes-als-sean-connery-an-der-redaktionskonferenz-teilnahm-2408-188172.html) - Golem.de (German)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Credits
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -320,5 +380,3 @@ Looking for a CLI mode? Using the -s/--source argument will make the run program
 | 
			
		|||
   <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=hacksider/deep-live-cam&type=Date" />
 | 
			
		||||
 </picture>
 | 
			
		||||
</a>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "Quelle x Ziel Zuordnung",
 | 
			
		||||
    "select a source image": "Wähle ein Quellbild",
 | 
			
		||||
    "Preview": "Vorschau",
 | 
			
		||||
    "select a target image or video": "Wähle ein Zielbild oder Video",
 | 
			
		||||
    "save image output file": "Bildausgabedatei speichern",
 | 
			
		||||
    "save video output file": "Videoausgabedatei speichern",
 | 
			
		||||
    "select a target image": "Wähle ein Zielbild",
 | 
			
		||||
    "source": "Quelle",
 | 
			
		||||
    "Select a target": "Wähle ein Ziel",
 | 
			
		||||
    "Select a face": "Wähle ein Gesicht",
 | 
			
		||||
    "Keep audio": "Audio beibehalten",
 | 
			
		||||
    "Face Enhancer": "Gesichtsverbesserung",
 | 
			
		||||
    "Many faces": "Mehrere Gesichter",
 | 
			
		||||
    "Show FPS": "FPS anzeigen",
 | 
			
		||||
    "Keep fps": "FPS beibehalten",
 | 
			
		||||
    "Keep frames": "Frames beibehalten",
 | 
			
		||||
    "Fix Blueish Cam": "Bläuliche Kamera korrigieren",
 | 
			
		||||
    "Mouth Mask": "Mundmaske",
 | 
			
		||||
    "Show Mouth Mask Box": "Mundmaskenrahmen anzeigen",
 | 
			
		||||
    "Start": "Starten",
 | 
			
		||||
    "Live": "Live",
 | 
			
		||||
    "Destroy": "Beenden",
 | 
			
		||||
    "Map faces": "Gesichter zuordnen",
 | 
			
		||||
    "Processing...": "Verarbeitung läuft...",
 | 
			
		||||
    "Processing succeed!": "Verarbeitung erfolgreich!",
 | 
			
		||||
    "Processing ignored!": "Verarbeitung ignoriert!",
 | 
			
		||||
    "Failed to start camera": "Kamera konnte nicht gestartet werden",
 | 
			
		||||
    "Please complete pop-up or close it.": "Bitte das Pop-up komplettieren oder schließen.",
 | 
			
		||||
    "Getting unique faces": "Einzigartige Gesichter erfassen",
 | 
			
		||||
    "Please select a source image first": "Bitte zuerst ein Quellbild auswählen",
 | 
			
		||||
    "No faces found in target": "Keine Gesichter im Zielbild gefunden",
 | 
			
		||||
    "Add": "Hinzufügen",
 | 
			
		||||
    "Clear": "Löschen",
 | 
			
		||||
    "Submit": "Absenden",
 | 
			
		||||
    "Select source image": "Quellbild auswählen",
 | 
			
		||||
    "Select target image": "Zielbild auswählen",
 | 
			
		||||
    "Please provide mapping!": "Bitte eine Zuordnung angeben!",
 | 
			
		||||
    "At least 1 source with target is required!": "Mindestens eine Quelle mit einem Ziel ist erforderlich!",
 | 
			
		||||
    "At least 1 source with target is required!": "Mindestens eine Quelle mit einem Ziel ist erforderlich!",
 | 
			
		||||
    "Face could not be detected in last upload!": "Im letzten Upload konnte kein Gesicht erkannt werden!",
 | 
			
		||||
    "Select Camera:": "Kamera auswählen:",
 | 
			
		||||
    "All mappings cleared!": "Alle Zuordnungen gelöscht!",
 | 
			
		||||
    "Mappings successfully submitted!": "Zuordnungen erfolgreich übermittelt!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "Quell-zu-Ziel-Zuordnung ist bereits geöffnet."
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "Mapeador de fuente x destino",
 | 
			
		||||
    "select a source image": "Seleccionar imagen fuente",
 | 
			
		||||
    "Preview": "Vista previa",
 | 
			
		||||
    "select a target image or video": "elegir un video o una imagen fuente",
 | 
			
		||||
    "save image output file": "guardar imagen final",
 | 
			
		||||
    "save video output file": "guardar video final",
 | 
			
		||||
    "select a target image": "elegir una imagen objetiva",
 | 
			
		||||
    "source": "fuente",
 | 
			
		||||
    "Select a target": "Elegir un destino",
 | 
			
		||||
    "Select a face": "Elegir una cara",
 | 
			
		||||
    "Keep audio": "Mantener audio original",
 | 
			
		||||
    "Face Enhancer": "Potenciador de caras",
 | 
			
		||||
    "Many faces": "Varias caras",
 | 
			
		||||
    "Show FPS": "Mostrar fps",
 | 
			
		||||
    "Keep fps": "Mantener fps",
 | 
			
		||||
    "Keep frames": "Mantener frames",
 | 
			
		||||
    "Fix Blueish Cam": "Corregir tono azul de video",
 | 
			
		||||
    "Mouth Mask": "Máscara de boca",
 | 
			
		||||
    "Show Mouth Mask Box": "Mostrar área de la máscara de boca",
 | 
			
		||||
    "Start": "Iniciar",
 | 
			
		||||
    "Live": "En vivo",
 | 
			
		||||
    "Destroy": "Borrar",
 | 
			
		||||
    "Map faces": "Mapear caras",
 | 
			
		||||
    "Processing...": "Procesando...",
 | 
			
		||||
    "Processing succeed!": "¡Proceso terminado con éxito!",
 | 
			
		||||
    "Processing ignored!": "¡Procesamiento omitido!",
 | 
			
		||||
    "Failed to start camera": "No se pudo iniciar la cámara",
 | 
			
		||||
    "Please complete pop-up or close it.": "Complete o cierre el pop-up",
 | 
			
		||||
    "Getting unique faces": "Buscando caras únicas",
 | 
			
		||||
    "Please select a source image first": "Primero, seleccione una imagen fuente",
 | 
			
		||||
    "No faces found in target": "No se encontró una cara en el destino",
 | 
			
		||||
    "Add": "Agregar",
 | 
			
		||||
    "Clear": "Limpiar",
 | 
			
		||||
    "Submit": "Enviar",
 | 
			
		||||
    "Select source image": "Seleccionar imagen fuente",
 | 
			
		||||
    "Select target image": "Seleccionar imagen destino",
 | 
			
		||||
    "Please provide mapping!": "Por favor, proporcione un mapeo",
 | 
			
		||||
    "At least 1 source with target is required!": "Se requiere al menos una fuente con un destino.",
 | 
			
		||||
    "At least 1 source with target is required!": "Se requiere al menos una fuente con un destino.",
 | 
			
		||||
    "Face could not be detected in last upload!": "¡No se pudo encontrar una cara en el último video o imagen!",
 | 
			
		||||
    "Select Camera:": "Elegir cámara:",
 | 
			
		||||
    "All mappings cleared!": "¡Todos los mapeos fueron borrados!",
 | 
			
		||||
    "Mappings successfully submitted!": "Mapeos enviados con éxito!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "El mapeador de fuente x destino ya está abierto."
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "Source x Target Kartoitin",
 | 
			
		||||
    "select an source image": "Valitse lähde kuva",
 | 
			
		||||
    "Preview": "Esikatsele",
 | 
			
		||||
    "select an target image or video": "Valitse kohde kuva tai video",
 | 
			
		||||
    "save image output file": "tallenna kuva",
 | 
			
		||||
    "save video output file": "tallenna video",
 | 
			
		||||
    "select an target image": "Valitse kohde kuva",
 | 
			
		||||
    "source": "lähde",
 | 
			
		||||
    "Select a target": "Valitse kohde",
 | 
			
		||||
    "Select a face": "Valitse kasvot",
 | 
			
		||||
    "Keep audio": "Säilytä ääni",
 | 
			
		||||
    "Face Enhancer": "Kasvojen Parantaja",
 | 
			
		||||
    "Many faces": "Useampia kasvoja",
 | 
			
		||||
    "Show FPS": "Näytä FPS",
 | 
			
		||||
    "Keep fps": "Säilytä FPS",
 | 
			
		||||
    "Keep frames": "Säilytä ruudut",
 | 
			
		||||
    "Fix Blueish Cam": "Korjaa Sinertävä Kamera",
 | 
			
		||||
    "Mouth Mask": "Suu Maski",
 | 
			
		||||
    "Show Mouth Mask Box": "Näytä Suu Maski Laatiko",
 | 
			
		||||
    "Start": "Aloita",
 | 
			
		||||
    "Live": "Live",
 | 
			
		||||
    "Destroy": "Tuhoa",
 | 
			
		||||
    "Map faces": "Kartoita kasvot",
 | 
			
		||||
    "Processing...": "Prosessoi...",
 | 
			
		||||
    "Processing succeed!": "Prosessointi onnistui!",
 | 
			
		||||
    "Processing ignored!": "Prosessointi lopetettu!",
 | 
			
		||||
    "Failed to start camera": "Kameran käynnistäminen epäonnistui",
 | 
			
		||||
    "Please complete pop-up or close it.": "Viimeistele tai sulje ponnahdusikkuna",
 | 
			
		||||
    "Getting unique faces": "Hankitaan uniikkeja kasvoja",
 | 
			
		||||
    "Please select a source image first": "Valitse ensin lähde kuva",
 | 
			
		||||
    "No faces found in target": "Kasvoja ei löydetty kohteessa",
 | 
			
		||||
    "Add": "Lisää",
 | 
			
		||||
    "Clear": "Tyhjennä",
 | 
			
		||||
    "Submit": "Lähetä",
 | 
			
		||||
    "Select source image": "Valitse lähde kuva",
 | 
			
		||||
    "Select target image": "Valitse kohde kuva",
 | 
			
		||||
    "Please provide mapping!": "Tarjoa kartoitus!",
 | 
			
		||||
    "Atleast 1 source with target is required!": "Vähintään 1 lähde kohteen kanssa on vaadittu!",
 | 
			
		||||
    "At least 1 source with target is required!": "Vähintään 1 lähde kohteen kanssa on vaadittu!",
 | 
			
		||||
    "Face could not be detected in last upload!": "Kasvoja ei voitu tunnistaa edellisessä latauksessa!",
 | 
			
		||||
    "Select Camera:": "Valitse Kamera:",
 | 
			
		||||
    "All mappings cleared!": "Kaikki kartoitukset tyhjennetty!",
 | 
			
		||||
    "Mappings successfully submitted!": "Kartoitukset lähetety onnistuneesti!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "Lähde x Kohde Kartoittaja on jo auki."
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "ប្រភប x បន្ថែម Mapper",
 | 
			
		||||
    "select a source image": "ជ្រើសរើសប្រភពរូបភាព",
 | 
			
		||||
    "Preview": "បង្ហាញ",
 | 
			
		||||
    "select a target image or video": "ជ្រើសរើសគោលដៅរូបភាពឬវីដេអូ",
 | 
			
		||||
    "save image output file": "រក្សាទុកលទ្ធផលឯកសាររូបភាព",
 | 
			
		||||
    "save video output file": "រក្សាទុកលទ្ធផលឯកសារវីដេអូ",
 | 
			
		||||
    "select a target image": "ជ្រើសរើសគោលដៅរូបភាព",
 | 
			
		||||
    "source": "ប្រភព",
 | 
			
		||||
    "Select a target": "ជ្រើសរើសគោលដៅ",
 | 
			
		||||
    "Select a face": "ជ្រើសរើសមុខ",
 | 
			
		||||
    "Keep audio": "រម្លងសម្លេង",
 | 
			
		||||
    "Face Enhancer": "ឧបករណ៍ពង្រឹងមុខ",
 | 
			
		||||
    "Many faces": "ទម្រង់មុខច្រើន",
 | 
			
		||||
    "Show FPS": "បង្ហាញ FPS",
 | 
			
		||||
    "Keep fps": "រម្លង fps",
 | 
			
		||||
    "Keep frames": "រម្លងទម្រង់",
 | 
			
		||||
    "Fix Blueish Cam": "ជួសជុល Cam Blueish",
 | 
			
		||||
    "Mouth Mask": "របាំងមាត់",
 | 
			
		||||
    "Show Mouth Mask Box": "បង្ហាញប្រអប់របាំងមាត់",
 | 
			
		||||
    "Start": "ចាប់ផ្ដើម",
 | 
			
		||||
    "Live": "ផ្សាយផ្ទាល់",
 | 
			
		||||
    "Destroy": "លុប",
 | 
			
		||||
    "Map faces": "ផែនទីមុខ",
 | 
			
		||||
    "Processing...": "កំពុងដំណើរការ...",
 | 
			
		||||
    "Processing succeed!": "ការដំណើរការទទួលបានជោគជ័យ!",
 | 
			
		||||
    "Processing ignored!": "ការដំណើរការមិនទទួលបានជោគជ័យ!",
 | 
			
		||||
    "Failed to start camera": "បរាជ័យដើម្បីចាប់ផ្ដើមបើកកាមេរ៉ា",
 | 
			
		||||
    "Please complete pop-up or close it.": "សូមបញ្ចប់ផ្ទាំងផុស ឬបិទវា.",
 | 
			
		||||
    "Getting unique faces": "ការចាប់ផ្ដើមទម្រង់មុខប្លែក",
 | 
			
		||||
    "Please select a source image first": "សូមជ្រើសរើសប្រភពរូបភាពដំបូង",
 | 
			
		||||
    "No faces found in target": "រកអត់ឃើញមុខនៅក្នុងគោលដៅ",
 | 
			
		||||
    "Add": "បន្ថែម",
 | 
			
		||||
    "Clear": "សម្អាត",
 | 
			
		||||
    "Submit": "បញ្ចូន",
 | 
			
		||||
    "Select source image": "ជ្រើសរើសប្រភពរូបភាព",
 | 
			
		||||
    "Select target image": "ជ្រើសរើសគោលដៅរូបភាព",
 | 
			
		||||
    "Please provide mapping!": "សូមផ្ដល់នៅផែនទី",
 | 
			
		||||
    "At least 1 source with target is required!": "ត្រូវការប្រភពយ៉ាងហោចណាស់ ១ ដែលមានគោលដៅ!",
 | 
			
		||||
    "Face could not be detected in last upload!": "មុខមិនអាចភ្ជាប់នៅក្នុងការបង្ហេាះចុងក្រោយ!",
 | 
			
		||||
    "Select Camera:": "ជ្រើសរើសកាមេរ៉ា",
 | 
			
		||||
    "All mappings cleared!": "ផែនទីទាំងអស់ត្រូវបានសម្អាត!",
 | 
			
		||||
    "Mappings successfully submitted!": "ផែនទីត្រូវបានបញ្ជូនជោគជ័យ!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "ប្រភព x Target Mapper បានបើករួចហើយ។"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "소스 x 타겟 매퍼",
 | 
			
		||||
    "select a source image": "소스 이미지 선택",
 | 
			
		||||
    "Preview": "미리보기",
 | 
			
		||||
    "select a target image or video": "타겟 이미지 또는 영상 선택",
 | 
			
		||||
    "save image output file": "이미지 출력 파일 저장",
 | 
			
		||||
    "save video output file": "영상 출력 파일 저장",
 | 
			
		||||
    "select a target image": "타겟 이미지 선택",
 | 
			
		||||
    "source": "소스",
 | 
			
		||||
    "Select a target": "타겟 선택",
 | 
			
		||||
    "Select a face": "얼굴 선택",
 | 
			
		||||
    "Keep audio": "오디오 유지",
 | 
			
		||||
    "Face Enhancer": "얼굴 향상",
 | 
			
		||||
    "Many faces": "여러 얼굴",
 | 
			
		||||
    "Show FPS": "FPS 표시",
 | 
			
		||||
    "Keep fps": "FPS 유지",
 | 
			
		||||
    "Keep frames": "프레임 유지",
 | 
			
		||||
    "Fix Blueish Cam": "푸른빛 카메라 보정",
 | 
			
		||||
    "Mouth Mask": "입 마스크",
 | 
			
		||||
    "Show Mouth Mask Box": "입 마스크 박스 표시",
 | 
			
		||||
    "Start": "시작",
 | 
			
		||||
    "Live": "라이브",
 | 
			
		||||
    "Destroy": "종료",
 | 
			
		||||
    "Map faces": "얼굴 매핑",
 | 
			
		||||
    "Processing...": "처리 중...",
 | 
			
		||||
    "Processing succeed!": "처리 성공!",
 | 
			
		||||
    "Processing ignored!": "처리 무시됨!",
 | 
			
		||||
    "Failed to start camera": "카메라 시작 실패",
 | 
			
		||||
    "Please complete pop-up or close it.": "팝업을 완료하거나 닫아주세요.",
 | 
			
		||||
    "Getting unique faces": "고유 얼굴 가져오는 중",
 | 
			
		||||
    "Please select a source image first": "먼저 소스 이미지를 선택해주세요",
 | 
			
		||||
    "No faces found in target": "타겟에서 얼굴을 찾을 수 없음",
 | 
			
		||||
    "Add": "추가",
 | 
			
		||||
    "Clear": "지우기",
 | 
			
		||||
    "Submit": "제출",
 | 
			
		||||
    "Select source image": "소스 이미지 선택",
 | 
			
		||||
    "Select target image": "타겟 이미지 선택",
 | 
			
		||||
    "Please provide mapping!": "매핑을 입력해주세요!",
 | 
			
		||||
    "At least 1 source with target is required!": "최소 하나의 소스와 타겟이 필요합니다!",
 | 
			
		||||
    "Face could not be detected in last upload!": "최근 업로드에서 얼굴을 감지할 수 없습니다!",
 | 
			
		||||
    "Select Camera:": "카메라 선택:",
 | 
			
		||||
    "All mappings cleared!": "모든 매핑이 삭제되었습니다!",
 | 
			
		||||
    "Mappings successfully submitted!": "매핑이 성공적으로 제출되었습니다!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "소스 x 타겟 매퍼가 이미 열려 있습니다."
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "Mapeador de Origem x Destino",
 | 
			
		||||
    "select an source image": "Escolha uma imagem de origem",
 | 
			
		||||
    "Preview": "Prévia",
 | 
			
		||||
    "select an target image or video": "Escolha uma imagem ou vídeo de destino",
 | 
			
		||||
    "save image output file": "Salvar imagem final",
 | 
			
		||||
    "save video output file": "Salvar vídeo final",
 | 
			
		||||
    "select an target image": "Escolha uma imagem de destino",
 | 
			
		||||
    "source": "Origem",
 | 
			
		||||
    "Select a target": "Escolha o destino",
 | 
			
		||||
    "Select a face": "Escolha um rosto",
 | 
			
		||||
    "Keep audio": "Manter o áudio original",
 | 
			
		||||
    "Face Enhancer": "Melhorar rosto",
 | 
			
		||||
    "Many faces": "Vários rostos",
 | 
			
		||||
    "Show FPS": "Mostrar FPS",
 | 
			
		||||
    "Keep fps": "Manter FPS",
 | 
			
		||||
    "Keep frames": "Manter frames",
 | 
			
		||||
    "Fix Blueish Cam": "Corrigir tom azulado da câmera",
 | 
			
		||||
    "Mouth Mask": "Máscara da boca",
 | 
			
		||||
    "Show Mouth Mask Box": "Mostrar área da máscara da boca",
 | 
			
		||||
    "Start": "Começar",
 | 
			
		||||
    "Live": "Ao vivo",
 | 
			
		||||
    "Destroy": "Destruir",
 | 
			
		||||
    "Map faces": "Mapear rostos",
 | 
			
		||||
    "Processing...": "Processando...",
 | 
			
		||||
    "Processing succeed!": "Tudo certo!",
 | 
			
		||||
    "Processing ignored!": "Processamento ignorado!",
 | 
			
		||||
    "Failed to start camera": "Não foi possível iniciar a câmera",
 | 
			
		||||
    "Please complete pop-up or close it.": "Finalize ou feche o pop-up",
 | 
			
		||||
    "Getting unique faces": "Buscando rostos diferentes",
 | 
			
		||||
    "Please select a source image first": "Selecione primeiro uma imagem de origem",
 | 
			
		||||
    "No faces found in target": "Nenhum rosto encontrado na imagem de destino",
 | 
			
		||||
    "Add": "Adicionar",
 | 
			
		||||
    "Clear": "Limpar",
 | 
			
		||||
    "Submit": "Enviar",
 | 
			
		||||
    "Select source image": "Escolha a imagem de origem",
 | 
			
		||||
    "Select target image": "Escolha a imagem de destino",
 | 
			
		||||
    "Please provide mapping!": "Você precisa realizar o mapeamento!",
 | 
			
		||||
    "Atleast 1 source with target is required!": "É necessária pelo menos uma origem com um destino!",
 | 
			
		||||
    "At least 1 source with target is required!": "É necessária pelo menos uma origem com um destino!",
 | 
			
		||||
    "Face could not be detected in last upload!": "Não conseguimos detectar o rosto na última imagem!",
 | 
			
		||||
    "Select Camera:": "Escolher câmera:",
 | 
			
		||||
    "All mappings cleared!": "Todos os mapeamentos foram removidos!",
 | 
			
		||||
    "Mappings successfully submitted!": "Mapeamentos enviados com sucesso!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "O Mapeador de Origem x Destino já está aberto."
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "Сопоставитель Источник x Цель",
 | 
			
		||||
    "select a source image": "выберите исходное изображение",
 | 
			
		||||
    "Preview": "Предпросмотр",
 | 
			
		||||
    "select a target image or video": "выберите целевое изображение или видео",
 | 
			
		||||
    "save image output file": "сохранить выходной файл изображения",
 | 
			
		||||
    "save video output file": "сохранить выходной файл видео",
 | 
			
		||||
    "select a target image": "выберите целевое изображение",
 | 
			
		||||
    "source": "источник",
 | 
			
		||||
    "Select a target": "Выберите целевое изображение",
 | 
			
		||||
    "Select a face": "Выберите лицо",
 | 
			
		||||
    "Keep audio": "Сохранить аудио",
 | 
			
		||||
    "Face Enhancer": "Улучшение лица",
 | 
			
		||||
    "Many faces": "Несколько лиц",
 | 
			
		||||
    "Show FPS": "Показать FPS",
 | 
			
		||||
    "Keep fps": "Сохранить FPS",
 | 
			
		||||
    "Keep frames": "Сохранить кадры",
 | 
			
		||||
    "Fix Blueish Cam": "Исправить синеву камеры",
 | 
			
		||||
    "Mouth Mask": "Маска рта",
 | 
			
		||||
    "Show Mouth Mask Box": "Показать рамку маски рта",
 | 
			
		||||
    "Start": "Старт",
 | 
			
		||||
    "Live": "В реальном времени",
 | 
			
		||||
    "Destroy": "Остановить",
 | 
			
		||||
    "Map faces": "Сопоставить лица",
 | 
			
		||||
    "Processing...": "Обработка...",
 | 
			
		||||
    "Processing succeed!": "Обработка успешна!",
 | 
			
		||||
    "Processing ignored!": "Обработка проигнорирована!",
 | 
			
		||||
    "Failed to start camera": "Не удалось запустить камеру",
 | 
			
		||||
    "Please complete pop-up or close it.": "Пожалуйста, заполните всплывающее окно или закройте его.",
 | 
			
		||||
    "Getting unique faces": "Получение уникальных лиц",
 | 
			
		||||
    "Please select a source image first": "Сначала выберите исходное изображение, пожалуйста",
 | 
			
		||||
    "No faces found in target": "В целевом изображении не найдено лиц",
 | 
			
		||||
    "Add": "Добавить",
 | 
			
		||||
    "Clear": "Очистить",
 | 
			
		||||
    "Submit": "Отправить",
 | 
			
		||||
    "Select source image": "Выбрать исходное изображение",
 | 
			
		||||
    "Select target image": "Выбрать целевое изображение",
 | 
			
		||||
    "Please provide mapping!": "Пожалуйста, укажите сопоставление!",
 | 
			
		||||
    "At least 1 source with target is required!": "Требуется хотя бы 1 источник с целью!",
 | 
			
		||||
    "Face could not be detected in last upload!": "Лицо не обнаружено в последнем загруженном изображении!",
 | 
			
		||||
    "Select Camera:": "Выберите камеру:",
 | 
			
		||||
    "All mappings cleared!": "Все сопоставления очищены!",
 | 
			
		||||
    "Mappings successfully submitted!": "Сопоставления успешно отправлены!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "Сопоставитель Источник-Цель уже открыт."
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "ตัวจับคู่ต้นทาง x ปลายทาง",
 | 
			
		||||
    "select a source image": "เลือกรูปภาพต้นฉบับ",
 | 
			
		||||
    "Preview": "ตัวอย่าง",
 | 
			
		||||
    "select a target image or video": "เลือกรูปภาพหรือวิดีโอเป้าหมาย",
 | 
			
		||||
    "save image output file": "บันทึกไฟล์รูปภาพ",
 | 
			
		||||
    "save video output file": "บันทึกไฟล์วิดีโอ",
 | 
			
		||||
    "select a target image": "เลือกรูปภาพเป้าหมาย",
 | 
			
		||||
    "source": "ต้นฉบับ",
 | 
			
		||||
    "Select a target": "เลือกเป้าหมาย",
 | 
			
		||||
    "Select a face": "เลือกใบหน้า",
 | 
			
		||||
    "Keep audio": "เก็บเสียง",
 | 
			
		||||
    "Face Enhancer": "ปรับปรุงใบหน้า",
 | 
			
		||||
    "Many faces": "หลายใบหน้า",
 | 
			
		||||
    "Show FPS": "แสดง FPS",
 | 
			
		||||
    "Keep fps": "คงค่า FPS",
 | 
			
		||||
    "Keep frames": "คงค่าเฟรม",
 | 
			
		||||
    "Fix Blueish Cam": "แก้ไขภาพอมฟ้าจากกล้อง",
 | 
			
		||||
    "Mouth Mask": "มาสก์ปาก",
 | 
			
		||||
    "Show Mouth Mask Box": "แสดงกรอบมาสก์ปาก",
 | 
			
		||||
    "Start": "เริ่ม",
 | 
			
		||||
    "Live": "สด",
 | 
			
		||||
    "Destroy": "หยุด",
 | 
			
		||||
    "Map faces": "จับคู่ใบหน้า",
 | 
			
		||||
    "Processing...": "กำลังประมวลผล...",
 | 
			
		||||
    "Processing succeed!": "ประมวลผลสำเร็จแล้ว!",
 | 
			
		||||
    "Processing ignored!": "การประมวลผลถูกละเว้น",
 | 
			
		||||
    "Failed to start camera": "ไม่สามารถเริ่มกล้องได้",
 | 
			
		||||
    "Please complete pop-up or close it.": "โปรดดำเนินการในป๊อปอัปให้เสร็จสิ้น หรือปิด",
 | 
			
		||||
    "Getting unique faces": "กำลังค้นหาใบหน้าที่ไม่ซ้ำกัน",
 | 
			
		||||
    "Please select a source image first": "โปรดเลือกภาพต้นฉบับก่อน",
 | 
			
		||||
    "No faces found in target": "ไม่พบใบหน้าในภาพเป้าหมาย",
 | 
			
		||||
    "Add": "เพิ่ม",
 | 
			
		||||
    "Clear": "ล้าง",
 | 
			
		||||
    "Submit": "ส่ง",
 | 
			
		||||
    "Select source image": "เลือกภาพต้นฉบับ",
 | 
			
		||||
    "Select target image": "เลือกภาพเป้าหมาย",
 | 
			
		||||
    "Please provide mapping!": "โปรดระบุการจับคู่!",
 | 
			
		||||
    "At least 1 source with target is required!": "ต้องมีการจับคู่ต้นฉบับกับเป้าหมายอย่างน้อย 1 คู่!",
 | 
			
		||||
    "Face could not be detected in last upload!": "ไม่สามารถตรวจพบใบหน้าในไฟล์อัปโหลดล่าสุด!",
 | 
			
		||||
    "Select Camera:": "เลือกกล้อง:",
 | 
			
		||||
    "All mappings cleared!": "ล้างการจับคู่ทั้งหมดแล้ว!",
 | 
			
		||||
    "Mappings successfully submitted!": "ส่งการจับคู่สำเร็จแล้ว!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "ตัวจับคู่ต้นทาง x ปลายทาง เปิดอยู่แล้ว"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
{
 | 
			
		||||
    "Source x Target Mapper": "Source x Target Mapper",
 | 
			
		||||
    "select an source image": "选择一个源图像",
 | 
			
		||||
    "select a source image": "选择一个源图像",
 | 
			
		||||
    "Preview": "预览",
 | 
			
		||||
    "select an target image or video": "选择一个目标图像或视频",
 | 
			
		||||
    "select a target image or video": "选择一个目标图像或视频",
 | 
			
		||||
    "save image output file": "保存图像输出文件",
 | 
			
		||||
    "save video output file": "保存视频输出文件",
 | 
			
		||||
    "select an target image": "选择一个目标图像",
 | 
			
		||||
    "select a target image": "选择一个目标图像",
 | 
			
		||||
    "source": "源",
 | 
			
		||||
    "Select a target": "选择一个目标",
 | 
			
		||||
    "Select a face": "选择一张脸",
 | 
			
		||||
| 
						 | 
				
			
			@ -36,11 +36,11 @@
 | 
			
		|||
    "Select source image": "请选取源图像",
 | 
			
		||||
    "Select target image": "请选取目标图像",
 | 
			
		||||
    "Please provide mapping!": "请提供映射",
 | 
			
		||||
    "Atleast 1 source with target is required!": "至少需要一个来源图像与目标图像相关!",
 | 
			
		||||
    "At least 1 source with target is required!": "至少需要一个来源图像与目标图像相关!",
 | 
			
		||||
    "At least 1 source with target is required!": "至少需要一个来源图像与目标图像相关!",
 | 
			
		||||
    "Face could not be detected in last upload!": "最近上传的图像中没有检测到人脸!",
 | 
			
		||||
    "Select Camera:": "选择摄像头",
 | 
			
		||||
    "All mappings cleared!": "所有映射均已清除!",
 | 
			
		||||
    "Mappings successfully submitted!": "成功提交映射!",
 | 
			
		||||
    "Source x Target Mapper is already open.": "源 x 目标映射器已打开。"
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
											
												Binary file not shown.
											
										
									
								| 
		 After Width: | Height: | Size: 9.6 KiB  | 
											
												Binary file not shown.
											
										
									
								| 
		 Before Width: | Height: | Size: 9.0 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
import os 
 | 
			
		||||
import cv2
 | 
			
		||||
import numpy as np
 | 
			
		||||
 | 
			
		||||
# Utility function to support unicode characters in file paths for reading
 | 
			
		||||
def imread_unicode(path, flags=cv2.IMREAD_COLOR):
 | 
			
		||||
    return cv2.imdecode(np.fromfile(path, dtype=np.uint8), flags)
 | 
			
		||||
 | 
			
		||||
# Utility function to support unicode characters in file paths for writing
 | 
			
		||||
def imwrite_unicode(path, img, params=None):
 | 
			
		||||
    root, ext = os.path.splitext(path)
 | 
			
		||||
    if not ext:
 | 
			
		||||
        ext = ".png"
 | 
			
		||||
        result, encoded_img = cv2.imencode(ext, img, params if params else [])
 | 
			
		||||
        result, encoded_img = cv2.imencode(f".{ext}", img, params if params is not None else [])
 | 
			
		||||
        encoded_img.tofile(path)
 | 
			
		||||
        return True
 | 
			
		||||
    return False
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
name = 'Deep-Live-Cam'
 | 
			
		||||
version = '1.8'
 | 
			
		||||
version = '1.8.1'
 | 
			
		||||
edition = 'GitHub Edition'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,18 +42,29 @@ def get_frame_processors_modules(frame_processors: List[str]) -> List[ModuleType
 | 
			
		|||
 | 
			
		||||
def set_frame_processors_modules_from_ui(frame_processors: List[str]) -> None:
 | 
			
		||||
    global FRAME_PROCESSORS_MODULES
 | 
			
		||||
    current_processor_names = [proc.__name__.split('.')[-1] for proc in FRAME_PROCESSORS_MODULES]
 | 
			
		||||
 | 
			
		||||
    for frame_processor, state in modules.globals.fp_ui.items():
 | 
			
		||||
        if state == True and frame_processor not in frame_processors:
 | 
			
		||||
            frame_processor_module = load_frame_processor_module(frame_processor)
 | 
			
		||||
            FRAME_PROCESSORS_MODULES.append(frame_processor_module)
 | 
			
		||||
            modules.globals.frame_processors.append(frame_processor)
 | 
			
		||||
        if state == False:
 | 
			
		||||
        if state == True and frame_processor not in current_processor_names:
 | 
			
		||||
            try:
 | 
			
		||||
                frame_processor_module = load_frame_processor_module(frame_processor)
 | 
			
		||||
                FRAME_PROCESSORS_MODULES.remove(frame_processor_module)
 | 
			
		||||
                modules.globals.frame_processors.remove(frame_processor)
 | 
			
		||||
            except:
 | 
			
		||||
                pass
 | 
			
		||||
                FRAME_PROCESSORS_MODULES.append(frame_processor_module)
 | 
			
		||||
                if frame_processor not in modules.globals.frame_processors:
 | 
			
		||||
                     modules.globals.frame_processors.append(frame_processor)
 | 
			
		||||
            except SystemExit:
 | 
			
		||||
                 print(f"Warning: Failed to load frame processor {frame_processor} requested by UI state.")
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                 print(f"Warning: Error loading frame processor {frame_processor} requested by UI state: {e}")
 | 
			
		||||
 | 
			
		||||
        elif state == False and frame_processor in current_processor_names:
 | 
			
		||||
            try:
 | 
			
		||||
                module_to_remove = next((mod for mod in FRAME_PROCESSORS_MODULES if mod.__name__.endswith(f'.{frame_processor}')), None)
 | 
			
		||||
                if module_to_remove:
 | 
			
		||||
                    FRAME_PROCESSORS_MODULES.remove(module_to_remove)
 | 
			
		||||
                if frame_processor in modules.globals.frame_processors:
 | 
			
		||||
                    modules.globals.frame_processors.remove(frame_processor)
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                 print(f"Warning: Error removing frame processor {frame_processor}: {e}")
 | 
			
		||||
 | 
			
		||||
def multi_process_frame(source_path: str, temp_frame_paths: List[str], process_frames: Callable[[str, List[str], Any], None], progress: Any = None) -> None:
 | 
			
		||||
    with ThreadPoolExecutor(max_workers=modules.globals.execution_threads) as executor:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,17 @@ def pre_start() -> bool:
 | 
			
		|||
    return True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TENSORRT_AVAILABLE = False
 | 
			
		||||
try:
 | 
			
		||||
    import torch_tensorrt
 | 
			
		||||
    TENSORRT_AVAILABLE = True
 | 
			
		||||
except ImportError as im:
 | 
			
		||||
    print(f"TensorRT is not available: {im}")
 | 
			
		||||
    pass
 | 
			
		||||
except Exception as e:
 | 
			
		||||
    print(f"TensorRT is not available: {e}")
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
def get_face_enhancer() -> Any:
 | 
			
		||||
    global FACE_ENHANCER
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -55,16 +66,26 @@ def get_face_enhancer() -> Any:
 | 
			
		|||
        if FACE_ENHANCER is None:
 | 
			
		||||
            model_path = os.path.join(models_dir, "GFPGANv1.4.pth")
 | 
			
		||||
            
 | 
			
		||||
            match platform.system():
 | 
			
		||||
                case "Darwin":  # Mac OS
 | 
			
		||||
                    if torch.backends.mps.is_available():
 | 
			
		||||
                        mps_device = torch.device("mps")
 | 
			
		||||
                        FACE_ENHANCER = gfpgan.GFPGANer(model_path=model_path, upscale=1, device=mps_device)  # type: ignore[attr-defined]
 | 
			
		||||
                    else:
 | 
			
		||||
                        FACE_ENHANCER = gfpgan.GFPGANer(model_path=model_path, upscale=1)  # type: ignore[attr-defined]
 | 
			
		||||
                case _:  # Other OS
 | 
			
		||||
                    FACE_ENHANCER = gfpgan.GFPGANer(model_path=model_path, upscale=1)  # type: ignore[attr-defined]
 | 
			
		||||
            selected_device = None
 | 
			
		||||
            device_priority = []
 | 
			
		||||
 | 
			
		||||
            if TENSORRT_AVAILABLE and torch.cuda.is_available():
 | 
			
		||||
                selected_device = torch.device("cuda")
 | 
			
		||||
                device_priority.append("TensorRT+CUDA")
 | 
			
		||||
            elif torch.cuda.is_available():
 | 
			
		||||
                selected_device = torch.device("cuda")
 | 
			
		||||
                device_priority.append("CUDA")
 | 
			
		||||
            elif torch.backends.mps.is_available() and platform.system() == "Darwin":
 | 
			
		||||
                selected_device = torch.device("mps")
 | 
			
		||||
                device_priority.append("MPS")
 | 
			
		||||
            elif not torch.cuda.is_available():
 | 
			
		||||
                selected_device = torch.device("cpu")
 | 
			
		||||
                device_priority.append("CPU")
 | 
			
		||||
            
 | 
			
		||||
            FACE_ENHANCER = gfpgan.GFPGANer(model_path=model_path, upscale=1, device=selected_device)
 | 
			
		||||
 | 
			
		||||
            # for debug:
 | 
			
		||||
            print(f"Selected device: {selected_device} and device priority: {device_priority}")
 | 
			
		||||
    return FACE_ENHANCER
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ import insightface
 | 
			
		|||
import threading
 | 
			
		||||
import numpy as np
 | 
			
		||||
import modules.globals
 | 
			
		||||
import logging
 | 
			
		||||
import modules.processors.frame.core
 | 
			
		||||
from modules.core import update_status
 | 
			
		||||
from modules.face_analyser import get_one_face, get_many_faces, default_source_face
 | 
			
		||||
| 
						 | 
				
			
			@ -27,12 +28,14 @@ models_dir = os.path.join(
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def pre_check() -> bool:
 | 
			
		||||
    download_directory_path = abs_dir
 | 
			
		||||
    download_directory_path = models_dir
 | 
			
		||||
    model_url = "https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128.onnx"
 | 
			
		||||
    if "CUDAExecutionProvider" in modules.globals.execution_providers:
 | 
			
		||||
        model_url = "https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx"
 | 
			
		||||
 | 
			
		||||
    conditional_download(
 | 
			
		||||
        download_directory_path,
 | 
			
		||||
        [
 | 
			
		||||
            "https://huggingface.co/hacksider/deep-live-cam/blob/main/inswapper_128_fp16.onnx"
 | 
			
		||||
        ],
 | 
			
		||||
        [model_url],
 | 
			
		||||
    )
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +62,10 @@ def get_face_swapper() -> Any:
 | 
			
		|||
 | 
			
		||||
    with THREAD_LOCK:
 | 
			
		||||
        if FACE_SWAPPER is None:
 | 
			
		||||
            model_path = os.path.join(models_dir, "inswapper_128_fp16.onnx")
 | 
			
		||||
            model_name = "inswapper_128.onnx"
 | 
			
		||||
            if "CUDAExecutionProvider" in modules.globals.execution_providers:
 | 
			
		||||
                model_name = "inswapper_128_fp16.onnx"
 | 
			
		||||
            model_path = os.path.join(models_dir, model_name)
 | 
			
		||||
            FACE_SWAPPER = insightface.model_zoo.get_model(
 | 
			
		||||
                model_path, providers=modules.globals.execution_providers
 | 
			
		||||
            )
 | 
			
		||||
| 
						 | 
				
			
			@ -105,14 +111,20 @@ def process_frame(source_face: Face, temp_frame: Frame) -> Frame:
 | 
			
		|||
        many_faces = get_many_faces(temp_frame)
 | 
			
		||||
        if many_faces:
 | 
			
		||||
            for target_face in many_faces:
 | 
			
		||||
                temp_frame = swap_face(source_face, target_face, temp_frame)
 | 
			
		||||
                if source_face and target_face:
 | 
			
		||||
                    temp_frame = swap_face(source_face, target_face, temp_frame)
 | 
			
		||||
                else:
 | 
			
		||||
                    print("Face detection failed for target/source.")
 | 
			
		||||
    else:
 | 
			
		||||
        target_face = get_one_face(temp_frame)
 | 
			
		||||
        if target_face:
 | 
			
		||||
        if target_face and source_face:
 | 
			
		||||
            temp_frame = swap_face(source_face, target_face, temp_frame)
 | 
			
		||||
        else:
 | 
			
		||||
            logging.error("Face detection failed for target or source.")
 | 
			
		||||
    return temp_frame
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def process_frame_v2(temp_frame: Frame, temp_frame_path: str = "") -> Frame:
 | 
			
		||||
    if is_image(modules.globals.target_path):
 | 
			
		||||
        if modules.globals.many_faces:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -429,7 +429,7 @@ def create_source_target_popup(
 | 
			
		|||
            POPUP.destroy()
 | 
			
		||||
            select_output_path(start)
 | 
			
		||||
        else:
 | 
			
		||||
            update_pop_status("Atleast 1 source with target is required!")
 | 
			
		||||
            update_pop_status("At least 1 source with target is required!")
 | 
			
		||||
 | 
			
		||||
    scrollable_frame = ctk.CTkScrollableFrame(
 | 
			
		||||
        POPUP, width=POPUP_SCROLL_WIDTH, height=POPUP_SCROLL_HEIGHT
 | 
			
		||||
| 
						 | 
				
			
			@ -489,7 +489,7 @@ def update_popup_source(
 | 
			
		|||
    global source_label_dict
 | 
			
		||||
 | 
			
		||||
    source_path = ctk.filedialog.askopenfilename(
 | 
			
		||||
        title=_("select an source image"),
 | 
			
		||||
        title=_("select a source image"),
 | 
			
		||||
        initialdir=RECENT_DIRECTORY_SOURCE,
 | 
			
		||||
        filetypes=[img_ft],
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			@ -584,7 +584,7 @@ def select_source_path() -> None:
 | 
			
		|||
 | 
			
		||||
    PREVIEW.withdraw()
 | 
			
		||||
    source_path = ctk.filedialog.askopenfilename(
 | 
			
		||||
        title=_("select an source image"),
 | 
			
		||||
        title=_("select a source image"),
 | 
			
		||||
        initialdir=RECENT_DIRECTORY_SOURCE,
 | 
			
		||||
        filetypes=[img_ft],
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			@ -627,7 +627,7 @@ def select_target_path() -> None:
 | 
			
		|||
 | 
			
		||||
    PREVIEW.withdraw()
 | 
			
		||||
    target_path = ctk.filedialog.askopenfilename(
 | 
			
		||||
        title=_("select an target image or video"),
 | 
			
		||||
        title=_("select a target image or video"),
 | 
			
		||||
        initialdir=RECENT_DIRECTORY_TARGET,
 | 
			
		||||
        filetypes=[img_ft, vid_ft],
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			@ -1108,7 +1108,7 @@ def update_webcam_source(
 | 
			
		|||
    global source_label_dict_live
 | 
			
		||||
 | 
			
		||||
    source_path = ctk.filedialog.askopenfilename(
 | 
			
		||||
        title=_("select an source image"),
 | 
			
		||||
        title=_("select a source image"),
 | 
			
		||||
        initialdir=RECENT_DIRECTORY_SOURCE,
 | 
			
		||||
        filetypes=[img_ft],
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			@ -1160,7 +1160,7 @@ def update_webcam_target(
 | 
			
		|||
    global target_label_dict_live
 | 
			
		||||
 | 
			
		||||
    target_path = ctk.filedialog.askopenfilename(
 | 
			
		||||
        title=_("select an target image"),
 | 
			
		||||
        title=_("select a target image"),
 | 
			
		||||
        initialdir=RECENT_DIRECTORY_SOURCE,
 | 
			
		||||
        filetypes=[img_ft],
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,25 +1,21 @@
 | 
			
		|||
--extra-index-url https://download.pytorch.org/whl/cu118
 | 
			
		||||
--extra-index-url https://download.pytorch.org/whl/cu128
 | 
			
		||||
 | 
			
		||||
numpy>=1.23.5,<2
 | 
			
		||||
typing-extensions>=4.8.0
 | 
			
		||||
opencv-python==4.10.0.84
 | 
			
		||||
cv2_enumerate_cameras==1.1.15
 | 
			
		||||
onnx==1.16.0
 | 
			
		||||
onnx==1.18.0
 | 
			
		||||
insightface==0.7.3
 | 
			
		||||
psutil==5.9.8
 | 
			
		||||
tk==0.1.0
 | 
			
		||||
customtkinter==5.2.2
 | 
			
		||||
pillow==11.1.0
 | 
			
		||||
torch==2.5.1+cu118; sys_platform != 'darwin'
 | 
			
		||||
torch; sys_platform != 'darwin'
 | 
			
		||||
torch==2.5.1; sys_platform == 'darwin'
 | 
			
		||||
torchvision==0.20.1; sys_platform != 'darwin'
 | 
			
		||||
torchvision; sys_platform != 'darwin'
 | 
			
		||||
torchvision==0.20.1; sys_platform == 'darwin'
 | 
			
		||||
onnxruntime-silicon==1.16.3; sys_platform == 'darwin' and platform_machine == 'arm64'
 | 
			
		||||
onnxruntime-gpu==1.16.3; sys_platform != 'darwin'
 | 
			
		||||
onnxruntime-gpu==1.22.0; sys_platform != 'darwin'
 | 
			
		||||
tensorflow; sys_platform != 'darwin'
 | 
			
		||||
opennsfw2==0.10.2
 | 
			
		||||
protobuf==4.23.2
 | 
			
		||||
tqdm==4.66.4
 | 
			
		||||
gfpgan==1.3.8
 | 
			
		||||
tkinterdnd2==0.4.2
 | 
			
		||||
pygrabber==0.2
 | 
			
		||||
protobuf==4.25.1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue