Spaces:
Sleeping
Sleeping
File size: 4,523 Bytes
7c9c433 602af10 7c9c433 5c35c36 abae343 1c23832 abae343 1c23832 61c41ee 7c9c433 31f3668 6c948c7 e7c3482 7c9c433 e7c3482 31f3668 7c9c433 602af10 31f3668 e7c3482 7c9c433 1ac90c3 31f3668 e7c3482 31f3668 e7c3482 7c9c433 e7c3482 7c9c433 e7c3482 7c9c433 e7c3482 7c9c433 31f3668 602af10 31f3668 602af10 7c9c433 e7c3482 7c9c433 602af10 7c9c433 602af10 e7c3482 793587e 7c9c433 793587e 7c9c433 6c948c7 793587e e7c3482 7c9c433 31f3668 602af10 7c9c433 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# src/streamlit_app.py
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
import os
os.environ["STREAMLIT_HOME"] = "/tmp/.streamlit"
# ้้ CORSใ้ๆไฝฟ็จ่
็ตฑ่จ๏ผๅฏ้ธ๏ผ
os.environ["STREAMLIT_SERVER_ENABLE_CORS"] = "false"
os.environ["STREAMLIT_GATHER_USAGE_STATS"] = "false"
# ๅปบ็ฎ้
os.makedirs("/tmp/.streamlit", exist_ok=True)
# โโโโโโโโโโโโโโโ ๏ผ. ๆ DeepFace ็ HOME ๆๅฐ /tmp/.deepface โโโโโโโโโโโโโโโ
os.environ["DEEPFACE_HOME"] = "/tmp/.deepface"
# ๅปบๅฅฝ weights ๅญ็ฎ้๏ผDeepFace ไธ่ผๆฌ้ๅฐฑไธๆๅ mkdir /
os.makedirs("/tmp/.deepface/weights", exist_ok=True)
import streamlit as st
import cv2, numpy as np, base64, io
import librosa, joblib
from deepface import DeepFace
# โโ 1๏ธโฃ ่ผๅ
ฅๆๆๆจกๅ๏ผDeepFace + ไฝ ็่ช้ณๆจกๅ๏ผโโ
@st.cache_resource(show_spinner=False)
def load_models():
# a) DeepFace ้ ็ฑ
DeepFace.analyze(
img_path = np.zeros((224,224,3), dtype=np.uint8),
actions = ['emotion'],
enforce_detection=False
)
# b) ่ผๅ
ฅไฝ commit ๅฐ repo ็่ช้ณๆจกๅๆชๆก
# ๅๅพ็ฎๅๆชๆก (streamlit_app.py) ็่ณๆๅคพ่ทฏๅพ
root = os.path.dirname(__file__)
# ็ถๅพๅพ src/ ๅบไธ่ฎๆจกๅๆช
model_path = os.path.join(root, "voice_model.joblib")
audio_model = joblib.load(model_path)
return audio_model
audio_model = load_models()
# โโ 2๏ธโฃ ๆๆฌๆ
็ทๅๆๅฝๅผ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def analyze_text_fn(text: str) -> str:
if any(w in text for w in ["้ๅฟ","ๅฟซๆจ","ๆๅฟซ","ๅๆฆ","ๅๆ
","ๆญกๅ","่ๅฅฎ","้ซ่"]):
return "happy"
if any(w in text for w in ["็ๆฐฃ","ๆคๆ","ไธ็ฝ","็ผ็ซ","็ซๅคง","ๆฐฃๆค"]):
return "angry"
if any(w in text for w in ["ๅทๅฟ","้ฃ้","ๅญ","้ฃๅ","ๅฟ้
ธ","ๆ","ๆฒ","ๅ","็่ฆ","ๆ
","ๆ"]):
return "sad"
if any(w in text for w in ["้ฉ่จ","ๆๅค","ๅ","้ฉ่ฉซ","่ฉซ็ฐ","่จ็ฐ","ๅฅฝๅฅ"]):
return "surprise"
if any(w in text for w in ["ๆ","ๆๆผ","็ทๅผต","ๆผ","่ฝๆฏ","็"]):
return "fear"
return "neutral"
# โโ 3๏ธโฃ ่ช้ณๆ
็ทๅๆๅฝๅผ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def analyze_audio_fn(wav_bytes: bytes) -> str:
# ่ฎ wav bytes
y, sr = librosa.load(io.BytesIO(wav_bytes), sr=None)
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
mf = np.mean(mfccs.T, axis=0)
return audio_model.predict([mf])[0]
# โโ 4๏ธโฃ Streamlit ไป้ข โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
st.set_page_config(page_title="ๅคๆจกๆ
ๅณๆๆ
็ทๅๆ", layout="wide")
st.title("๐ฑ ๅคๆจกๆ
ๅณๆๆ
็ทๅๆ")
tabs = st.tabs(["๐ด Face๏ผๆฌๅฐๆธฌ่ฉฆ๏ผ", "๐ค ไธๅณ่ช้ณๆช", "โจ๏ธ ่ผธๅ
ฅๆๅญ"])
with tabs[0]:
st.header("Live Face๏ผๅ
้ๆฌๅฐ็่ฆฝๅจๆธฌ่ฉฆ๏ผ")
st.info("โ ๏ธ Hugging Face Spaces ็กๆณ็ดๆฅ้ๅๆๅฝฑๆฉ๏ผ่ซๅจๆฌๆฉไฝฟ็จ `streamlit run app.py` ๆธฌ่ฉฆใ")
# ้้ๅฆๆ็จ streamlit-webrtc ๆ่ฝๅจๆฌๅฐๅผๅซๆๅฝฑๆฉ
# ็็ฅ็คบ็ฏ๏ผๆๆนๆ gradio demo
with tabs[1]:
st.header("๐ค ไธๅณ WAV ๆช้ฒ่กๅๆ")
# ๆฏๆด .wav ไธๅณ
wav_file = st.file_uploader("่ซ้ธๆ .wav ้ณๆช", type=["wav"])
if wav_file is not None:
# ่ฎ bytes๏ผๅผๅซๅๆๅฝๅผ
wav_bytes = wav_file.read()
emo = analyze_audio_fn(wav_bytes)
st.success(f"๐ค ่ช้ณๅตๆธฌๅฐ็ๆ
็ท๏ผ**{emo}**")
with tabs[2]:
st.header("่ผธๅ
ฅๆๅญ้ฒ่กๆ
็ทๅๆ")
txt = st.text_area("่ซๅจๆญค่ผธๅ
ฅๆๅญ")
if st.button("้ๅงๅๆ"):
emo = analyze_text_fn(txt)
st.success(f"๐ ๆๆฌๅตๆธฌๅฐ็ๆ
็ท๏ผ**{emo}**")
|