Davidliu 3 هفته پیش
والد
کامیت
74ecd9b977
2فایلهای تغییر یافته به همراه38 افزوده شده و 42 حذف شده
  1. 38 42
      src/core/callcenter/test.py
  2. BIN
      src/core/callcenter/vad_example.wav

+ 38 - 42
src/core/callcenter/test.py

@@ -1,44 +1,40 @@
-#
-# import jieba
-#
-# TestStr = "能帮我查一下,我家水费欠多少"
-# seg_list = jieba.cut(TestStr, cut_all=False, HMM=True)
-# print ("Default Mode:", "/ ".join(seg_list))
-import json
-import uuid
-import mmh3
-
-from src.core.callcenter.dao import Bucket
-
-def get_bucket(custom_uuid=None, buckets=[]):
-    random_id = abs(mmh3.hash(custom_uuid))
-    for bucket in buckets:
-        num = (random_id % 100 + 100) % 100
-        if bucket.lower <= num < bucket.upper:
-            return num, bucket
-    return -1, buckets[0]
+
 
 if __name__ == '__main__':
-    # arr = ['C1879412349555838976','C1879412206890782720','C1879411969535119360','C1879411406290423808','C1879408024871899136','C1879407680997691392','C1879406254007390208','C1879404740748644352','C1879403850650226688','C1879402961977872384','C1879402509785763840','C1879402237567045632','C1879402005592674304','C1879400827102302208','C1879400778024751104','C1879400705488457728','C1879400533513605120','C1879400336188379136','C1879400327959154688','C1879399300082044928','C1879399233669435392','C1879396009050771456','C1879394097295396864','C1879393224498483200','C1879381728368398336','C1879381287505104896','C1879379466774515712','C1879376723787780096','C1879374004641468416','C1879373548330553344','C1879372415646175232','C1879367459866284032','C1879365634769424384','C1879364921326702592','C1879364787436130304','C1879363948554358784','C1879362454358724608','C1879360081448013824','C1879358294565457920','C1879358151116066816','C1879357497190518784','C1879357257641234432','C1879357023229972480','C1879355792935751680','C1879355755749052416','C1879354039309832192']
-    # buckets=[Bucket(id=1, name="传统", lower=0, upper=90), Bucket(id=2, name="AI",lower=90, upper=100)]
-    # for custom_uuid in arr:
-    #     num, bucket = get_bucket(custom_uuid=custom_uuid, buckets=buckets)
-    #     print(custom_uuid, num, bucket.name)
-
-    # message = """{"seg_id": 2, "cn": {"st": {"rt": [{"ws": [{"cw": [{"sc": 0.00, "w": "停水", "wp": "n", "rl": "0", "wb": 9, "wc": 0.00, "we": 64}], "wb": 9,"we": 64},{"cw": [{"sc": 0.00, "w": "咨询", "wp": "n", "rl": "0", "wb": 65, "wc": 0.00, "we": 132}], "wb": 65,"we": 132}]}], "bg": "9510", "type": "0", "ed": "10950"}}, "ls": false}"""
-    # message = '{"action":"result","code":"0","data":"{\"seg_id\":0,\"cn\":{\"st\":{\"rt\":[{\"ws\":[{\"cw\":[{\"sc\":0.00,\"w\":\"蜓\",\"wp\":\"n\",\"rl\":\"0\",\"wb\":13,\"wc\":0.00,\"we\":26}],\"wb\":0,\"we\":0}]}],\"bg\":\"9160\",\"type\":\"1\",\"ed\":\"0\"}},\"ls\":false}","desc":"success","sid":"rta108a8500@dx2f5f1b177d38000100"}'
-    # # 解析最外层 JSON
-    # message_dict = json.loads(message)
-    #
-    # # 解析嵌套的 JSON 字符串
-    # data = json.loads(message_dict['data'])
-    #
-    # # 提取 "w" 字段中的词汇
-    # words = ''.join(cw["w"] for item in data["cn"]["st"]["rt"] for ws in item["ws"] for cw in ws["cw"])
-    #
-    # print(words)
-
-    # 读取文件
-    with open('/Users/davidliu/hot_words.txt', 'r', encoding='utf-8') as f:
-        content = f.read()
-        print(content)
+    # pip install funasr torchaudio
+    from funasr import AutoModel
+    model = AutoModel(model="fsmn-vad", model_revision="v2.0.4")
+
+    import pyaudio
+    import struct
+
+    FORMAT = pyaudio.paInt16
+    CHANNELS = 1
+    RATE = 16000
+    FRAME_DURATION = 200  # ms
+    FRAME_SIZE = int(RATE * FRAME_DURATION / 1000)
+
+    audio = pyaudio.PyAudio()
+
+    stream = audio.open(
+        format=FORMAT,
+        channels=CHANNELS,
+        rate=RATE,
+        input=True,
+        frames_per_buffer=FRAME_SIZE
+    )
+
+    is_final = False
+    try:
+        cache = {}
+        while True:
+            frame = stream.read(FRAME_SIZE)
+            res = model.generate(input=frame, cache=cache, is_final=is_final, chunk_size=FRAME_DURATION)
+            if len(res[0]["value"]):
+                print('debugger',res[0]["value"][0])
+
+    except KeyboardInterrupt:
+        is_final = True
+        stream.stop_stream()
+        stream.close()
+        audio.terminate()

BIN
src/core/callcenter/vad_example.wav