add human txt

This commit is contained in:
brige 2024-11-13 12:58:56 +08:00
parent d08a74b4e4
commit b3bbf40d95
6 changed files with 28 additions and 60 deletions

View File

@ -63,7 +63,8 @@ class AudioMalHandler(AudioHandler):
count = 0
for _ in range(self._context.batch_size * 2):
frame, _type = self.get_audio_frame()
self.frames.append(frame)
chunk, txt = frame
self.frames.append(chunk)
self.on_next_handle((frame, _type), 0)
count = count + 1
@ -103,7 +104,8 @@ class AudioMalHandler(AudioHandler):
frame = self._queue.get()
type_ = 0
else:
frame = np.zeros(self.chunk, dtype=np.float32)
chunk = np.zeros(self.chunk, dtype=np.float32)
frame = (chunk, '')
type_ = 1
# print('AudioMalHandler get_audio_frame type:', type_)
return frame, type_

View File

@ -121,52 +121,4 @@ class HumanRender(AudioHandler):
# self._video_render.stop()
# self._exit_event.clear()
# self._thread.join()
'''
self._exit_event = Event()
self._thread = Thread(target=self._on_run)
self._exit_event.set()
self._thread.start()
def _on_run(self):
logging.info('human render run')
while self._exit_event.is_set():
self._run_step()
time.sleep(0.02)
logging.info('human render exit')
def _run_step(self):
try:
res_frame, idx, audio_frames = self._queue.get(block=True, timeout=.002)
except queue.Empty:
# print('render queue.Empty:')
return None
if audio_frames[0][1] != 0 and audio_frames[1][1] != 0:
combine_frame = self._context.frame_list_cycle[idx]
else:
bbox = self._context.coord_list_cycle[idx]
combine_frame = copy.deepcopy(self._context.frame_list_cycle[idx])
y1, y2, x1, x2 = bbox
try:
res_frame = cv2.resize(res_frame.astype(np.uint8), (x2 - x1, y2 - y1))
except:
return
# combine_frame = get_image(ori_frame,res_frame,bbox)
# t=time.perf_counter()
combine_frame[y1:y2, x1:x2] = res_frame
image = combine_frame
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
if self._image_render is not None:
self._image_render.on_render(image)
for audio_frame in audio_frames:
frame, type_ = audio_frame
frame = (frame * 32767).astype(np.int16)
if self._audio_render is not None:
self._audio_render.write(frame.tobytes(), int(frame.shape[0]*2))
# new_frame = AudioFrame(format='s16', layout='mono', samples=frame.shape[0])
# new_frame.planes[0].update(frame.tobytes())
# new_frame.sample_rate = 16000
'''

View File

@ -98,7 +98,7 @@ class DouBaoHttp:
]
self._response = self.__request(msg_list)
if not self._response.ok:
logger.info(f"请求失败,状态码:{self._response.status_code}")
logger.error(f"请求失败,状态码:{self._response.status_code}")
return
sec = ''
for chunk in self._response.iter_lines():
@ -106,13 +106,23 @@ class DouBaoHttp:
if len(content) < 1:
continue
content = content[5:]
content = content.strip()
if content == '[DONE]':
break
try:
content = json.loads(content)
except Exception as e:
logger.error(f"json解析失败错误信息{e, content}")
continue
sec = sec + content["choices"][0]["delta"]["content"]
sec, message = handle.handle(sec)
if len(message) > 0:
logger.info(f'-------dou_bao nlp time:{time.time() - t:.4f}s')
callback(message)
if len(sec) > 0:
callback(sec)
self._requesting = False
logger.info(f'-------dou_bao nlp time:{time.time() - t:.4f}s')

View File

@ -23,12 +23,13 @@ class VoiceRender(BaseRender):
for audio_frame in frame:
frame, type_ = audio_frame
frame = (frame * 32767).astype(np.int16)
chunk, txt = frame
chunk = (chunk * 32767).astype(np.int16)
if self._audio_render is not None:
try:
chunk_len = int(frame.shape[0] * 2)
chunk_len = int(chunk.shape[0] * 2)
# print('audio frame:', frame.shape, chunk_len)
self._audio_render.write(frame.tobytes(), chunk_len)
self._audio_render.write(chunk.tobytes(), chunk_len)
except Exception as e:
logging.error(f'Error writing audio frame: {e}')

View File

@ -70,6 +70,7 @@ class TTSAudioSplitHandle(TTSAudioHandle):
return
s, txt = stream
current = 0
with self._lock:
if len(self._priority_queue) != 0:
current = self._priority_queue[0][0]
@ -90,15 +91,17 @@ class TTSAudioSplitHandle(TTSAudioHandle):
idx += self._chunk
if not self._is_running:
return
heapq.heappush(self._priority_queue, (index, chunks))
heapq.heappush(self._priority_queue, (index, (chunks, txt)))
print('TTSAudioSplitHandle::on_handle', index, current, self._current, len(self._priority_queue))
if current == self._current:
self._current = self._current + 1
chunks = heapq.heappop(self._priority_queue)[1]
chunks, txt = chunks
if chunks is not None:
for chunk in chunks:
self.on_next_handle(chunk, 0)
self.on_next_handle((chunk, txt), 0)
def stop(self):
self._is_running = False

View File

@ -45,7 +45,7 @@ class AsyncTaskQueue:
await func(*args) # Execute async function
except Exception as e:
logging.error(f'{self._name} error: {e}')
logging.error(f'{self._name} error: {repr(e)}')
finally:
self._queue.task_done()