AI影片翻譯與改變口型.20240127
### 本週分享
1. 環境安裝
1. Git, Anaconda, Python 3.10.6, Homebrew, Stable Diffusion
2. [參考文件](<https://ivonblog.com/posts/stable-diffusion-webui-manuals/installation/macos-installation/>)
3. mac m1 gpu error:於 webui-user.sh 加入以下參數
```
export COMMANDLINE_ARGS="--medvram --opt-split-attention --precision full --no-half --skip-torch-cuda-test"
```
3. Rask AI:
1. [數位時代:"Rask AI實測!一鍵把中文翻譯成60種語言、支援「原聲配音」,究竟有多好用?]( <https://www.bnext.com.tw/article/75357/rask-ai-video-translate>)
1. [Lip-Sync Multi-Speaker](<https://www.youtube.com/watch?v=WKkNCUSAgtw>)
1. [Rask AI 官網](<https://www.rask.ai/>)
4. 如何自建服務(流程架構)
1. API使用:Translate API和Text-to-Speech API
2. Speech-to-Text(stt),Text-to-Speech(tts)
3. OpenCV 讀取視頻
4. moviepy 提取音頻
5. what is OpenCV
OpenCV is the world's biggest computer vision library.
It's open source, contains over 2500 algorithms and is operated by the non-profit Open Source Vision Foundation.
1. [OpenCV 官網](<https://opencv.org/>)
2. [OpenCV github](<https://github.com/opencv/opencv>)

1. 預計待辦
1. python api 教學串接google/chatgpt api
-----------------------------------------------
### 實作流程
1. 環境套件
```python
pip install opencv-python
pip install google-cloud-translate
pip install google-cloud-texttospeech
```
1. 導入套件庫:在Python腳本中導入所需的庫,以便使用它們:
```python
import cv2
from google.cloud import translate_v2
from google.cloud import texttospeech
```
1. 初始化Google Cloud API:
* 在Google Cloud Console上創建一個專案。
* 啟用Translate API和Text-to-Speech API。
* 生成相應的API密鑰並保存到一個JSON文件中,例如 credentials.json。
* 設置環境變數以指定你的API密鑰文件的路徑:
```python
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/to/your/credentials.json"
translate_client = translate_v2.Client()
tts_client = texttospeech.TextToSpeechClient()
```
1. 讀取視頻並進行人臉檢測:
使用OpenCV讀取視頻,並使用人臉檢測庫(例如dlib或OpenCV自帶的人臉檢測)檢測視頻中的人臉。
1. 提取語音並進行翻譯:
* 使用視頻處理工具(例如moviepy)從視頻中提取音頻。
* 使用Google Cloud的語音識別API將音頻轉換為文本:
```python
# 使用你選擇的語音識別庫,這裡以Google Cloud Speech為例
# (需要將語音檔上傳至Google Cloud Storage並取得URI)
response = translate_client.recognize("gs://your-bucket/your-audio-file.wav", language_code="zh-TW")
text = response.results[0].alternatives[0].transcript
```
* 使用Translate API進行翻譯:
```python
translation = translate_client.translate(text, target_language="en")
translated_text = translation["input"]
```
1. 生成新的語音:
使用Text-to-Speech API生成翻譯後的語音:
```python
synthesis_input = texttospeech.SynthesisInput(text=translated_text)
voice = texttospeech.VoiceSelectionParams(language_code="en", name="en-US-Wavenet-D", ssml_gender=texttospeech.SsmlVoiceGender.NEUTRAL)
audio_config = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.LINEAR16)
response = tts_client.synthesize_speech(input=synthesis_input, voice=voice, audio_config=audio_config)
```
1. 人臉替換:
使用人臉替換庫(例如OpenCV)將原視頻中的人臉替換為模擬說話的人物的臉部。
1. 保存最終結果:
使用OpenCV或視頻處理庫將處理後的視頻保存到文件。
* 使用OpenCV讀取視頻可以使用cv2.VideoCapture類別。以下是一個簡單的示例,展示如何使用OpenCV讀取視頻:
```
import cv2
# 設定視頻文件的路徑
video_path = 'path/to/your/video.mp4' # 替換成實際的視頻文件路徑
# 創建一個VideoCapture對象
cap = cv2.VideoCapture(video_path)
# 檢查是否成功打開視頻
if not cap.isOpened():
print("無法打開視頻文件.")
exit()
# 逐幀讀取視頻
while True:
# 讀取一幀
ret, frame = cap.read()
# 檢查是否成功讀取幀
if not ret:
print("無法讀取幀.")
break
# 在這裡進行視頻處理,例如顯示視頻幀
cv2.imshow('Video Frame', frame)
# 如果按下 'q' 鍵,退出迴圈
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# 釋放VideoCapture對象和關閉視窗
cap.release()
cv2.destroyAllWindows()
```