Team Ai
Apppublic

PCNUSMSE/transcript_service

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
0likes
gradio_interface.cpython-310.pyc151 linesDownload Raw Back to __pycache__
1o

2E��h}^�@s�dZddlZddlZddlmZddlmZmZmZm	Z	m3Z4ddlZddl
ZddlmZddlmZmZmZddlmZdd	lmZGd5d�d�Ze�Zdefd
d�Zdejfdd�ZdS)uoGradio用户界面模块6 7提供基于Gradio的Web界面,支持文件上传、进度显示和结果展示。8�N)�Path)�Dict�List�Optional�Tuple�Any�)�9get_config)�get_task_manager�10TaskStatus�TaskPriority)�get_task_logger)�get_file_validatorc@seZdZdZdd�Zdejfdd�Zdefdd�Z	de11fd	d12�Zdefdd�Zd
e
dede
ededededeedBdededededeee13effdd�Zdeee14ffdd�Zdedee15e
eee16ffdd�Zdeee17ee18e
e19effdd �Zdefd!d"�Zd#d$�Zd%d&�ZdS)'�GradioInterfaceuGradio界面管理器cCsFt�|_t�|_t�|_tdd�|_d|_|�	�|_20|j�|j�dS)u初始化Gradio界面ztranscript_service.gradio)�logger_nameN)
r	�configr21�task_managerr�file_validatorr
�logger�current_task_id�_create_interface�	interface�add_status_callback�_on_task_status_change��self�r�I/Users/chengpeng/MyProject/transcript_service/src/api/gradio_interface.py�__init__s22zGradioInterface.__init__�returncCsV|j��}tjdtj��dd����}t�d�t����Ttjdd���tj	ddt23|d	�d24d�}t���tjdd
dgdd�}Wd�n1sKwYtjddd���}tj
dgd�ddgd�}t���tjddd�}tjddd�}tjddd�}	Wd�n1s�wYt���tjddddd d!d"�}25tjd#d$d%d&�}Wd�n1s�wYtjd'dd��"tjd(d)d*d&�}tjd+d)d,d&�}
tjd-d)d.d/d0d1�}Wd�n1s�wYWd�n1s�wYt���tjd2d3d4d5�}tjd6d7d8�}tjd9d7d8�}Wd�n	1�swYWd�n	1�s*wYtjd.d��+tjd:d;dd<gd=�}tjd>d?d@dAddBgdC�}tjgdD�gdE�dFddG�}Wd�n	1�sdwYWd�n	1�stwYtjdHdd���}t����t�dI��tjdJ|��d�}tjdK|d�}Wd�n	1�s�wYt�dL��tjdMid�}Wd�n	1�s�wYt�dN��tjdOid�}Wd�n	1�s�wYt�dP��tjdQdRd@dddS�}tj	dTddU�}Wd�n	1�swYWd�n	1�swYWd�n	1�s(wYt���tjdVd7dWd5�}|j|j|||||||gdX�Wd�n	1�sTwY|j|j||||||	|26|||
|g|||gdY�|j|j||gdX�|j|j|||||||gdX�|j|j|||||||gdX�Wd�|S1�s�wY|S)Zu创建Gradio界面u音频转文字服务a027            .main-container { max-width: 1000px; margin: 0 auto; }28            .upload-area { border: 2px dashed #ccc; border-radius: 10px; padding: 20px; text-align: center; }29            .result-area { margin-top: 20px; }30            .status-simple { font-size: 16px; font-weight: bold; }31            )�title�theme�cssu# 🎵 音频转文字服务�)�scaleu,📁 选择音频文件(支持多文件)�multiple�32extensions�x)�label�33file_countZ34file_types�heightu	优先级)u普通�NORMAL)u高优先级�HIGHr+)r(�choices�valueNu⚙️ 转录参数设置F)�openu识别语言))u中文�zh)u英文�en)u日语�ja)u粤语Zyue)u韩语�ko)u德语�de)u法语�fr)u俄语�rur0r1u过滤语气词T)r(r.u时间戳校准u说话人分离u说话人数量(可选)�d�uA留空则自动判断,如需指定请输入2-100之间的数值)r(r.�minimum�maximum�step�infou音轨索引�0u0多音轨文件的音轨索引,用逗号分隔)r(r.r<u高级选项u热词ID v2�uv2模型的热词IDu热词ID v1uv1模型的热词IDu敏感词过滤配置ruJSON格式配置u敏感词过滤的JSON配置)r(r.�lines�placeholderr<u🚀 开始转录�primaryZlg)�variant�sizeu35❌ 取消Z	secondary)rBu🗑️ 清空u📊 当前状态�等待上传文件...z
status-simple)r(r.�interactive�elem_classesu📝 转录结果u!转录结果将在这里显示...��zresult-area)r(r@r?�	max_lines�show_copy_buttonrF)u	文件名u时长u文本长度u	置信度)�strrK�numberrLu📈 处理统计)�headers�datatyper(�visibleu📋 详细信息u系统信息�服务状态u支持格式u任务信息u当前任务u完整结果u36JSON结果u处理日志u详细日志�)r(r?rIrErJu下载日志文件)r(rOu🔄 刷新状态�sm)�fn�outputs)rS�inputsrT)r�get_supported_formats�gr�Blocks�themesZSoft�Markdown�Row�Column�File�listZRadioZ	AccordionZ
CheckboxGroupZCheckbox�NumberZTextboxZButtonZ	DataframeZTabsZTab�JSON�_get_system_info�click�_update_interface�_process_files�_cancel_current_task�_clear_interface�load)rZsupported_formatsrZfile_uploadZpriority_selectZparams_sectionZlanguage_select�disfluency_removal�timestamp_alignment�diarization_enabled�
speaker_countZchannel_select�
vocabulary_id�	phrase_id�special_word_filterZ	start_btnZ37cancel_btnZ	clear_btn�status_text�result_textZstats_dfZdetail_section�system_info�format_info�	task_info�result_json�log_textZlog_downloadZrefresh_btnrrrr&sv38�	3940�41��	�42 43����44���������45?���W��46����t47���48�����������49(��������50�M��Mz!GradioInterface._create_interfacecCsdS)u获取自定义CSS样式a51        .gradio-container {52            max-width: 1200px !important;53        }54        .gr-button-primary {55            background: linear-gradient(45deg, #FF6B6B, #4ECDC4) !important;56            border: none !important;57        }58        .gr-button-primary:hover {59            transform: translateY(-2px) !important;60            box-shadow: 0 4px 12px rgba(0,0,0,0.15) !important;61        }62        .progress-bar {63            background: linear-gradient(90deg, #FF6B6B, #4ECDC4) !important;64        }65        rrrrr�_get_custom_css�szGradioInterface._get_custom_csscCsF|j��}d|d|d|d|d|d|d|d|d	d66�S)u获取系统信息u	运行中�total_tasks�pending�67validating�	uploading�transcribing�	completed�failed�68queue_size)rPu当前任务数u	待处理u	处理中u	已完成u失败u队列大小)r�get_statistics)r�statsrrrras69�z GradioInterface._get_system_infocCsddlm}|���d�S)u获取当前时间戳r)�datetimez%Y-%m-%d %H:%M:%S)r��now�strftime)rr�rrr�_get_timestampszGradioInterface._get_timestamp�files�priority�	languagesrhrirjrkN�70channel_idrlrmrnc�st��z�|sdidfWSg}|�d|���d��|�d|���dt|��d��dd�|D�}
|�d|���d	��t|
�D]M\}}z|��j}|�d|���d71|d�d|j�d
|�d�	�Wq>ty�}z|�d|���d72|d�d|j�dt|��d�	�WYd}~q>d}~wwzdd�|�	d�D�}Wnt73y�dg}Ynwd}|dur�t|tt
f�r�|dkr�|dkr�t|�}n|�d|���d|�d��d}|��r�zt�|�}Wntjy�}z|�d|���d��WYd}~nd}~ww|dk�rtjntj}|t|
�|||||||	���r|	��nd|74���r!|75��nd|�r*t�|�ndd�	d�}|�d|���d|j���|�d|���d|�rNd�|�nd ���|jj|
||d!�IdH|_|j�|j�}|�d|���d"|j���d#|j��|�r�|��nid$�|�d%t|
��d&�fWSt�y�}zd't|���}|j�|�|id(|�d$�fWYd}~Sd}~ww))u�处理上传的文件76        77        Args:78            files: 上传的文件列表79            languages: 选择的语言80            priority: 任务优先级81            channel_id: 音轨索引82            disfluency_removal: 是否过滤语气词83            timestamp_alignment: 是否启用时间戳校准84            diarization_enabled: 是否启用说话人分离85            speaker_count: 说话人数量参考值86            vocabulary_id: 热词ID v287            phrase_id: 热词ID v188            special_word_filter: 敏感词过滤配置89            90        Returns:91            (状态信息, 任务信息, 日志信息)92        u请先上传音频文件u错误: 未选择任何文件�[u ] 开始处理文件上传请求u] 接收到 �93 个文件cSsg|]}t|j��qSr)r�name)�.0�frrr�94<listcomp>Hsz2GradioInterface._process_files.<locals>.<listcomp>u] 转换文件路径完成u	] 文件 r8z: u95 (大小: u 字节)� (无法获取文件信息: �)NcSs g|]}|��rt|����qSr)�strip�int)r��xrrrr�Us �,rrr7u"] 警告: 说话人数量无效(u),将使用自动判断uC] 警告: 敏感词过滤配置格式错误,将使用默认设置r,)	�language_hintsr��disfluency_removal_enabled�timestamp_alignment_enabledrjrkrlrmrn)r�r)�paraformer_paramsu] 创建任务,优先级: u] 选择语言: z, u自动识别)�96file_pathsr��metadatau!] 任务创建成功,任务ID: u任务已创建: �97u98开始处理 u 个文件...99u创建任务失败: u错误: )�appendr��len�	enumerate�stat�st_sizer��	ExceptionrK�split�100ValueError�101isinstancer��floatr��json�loads�JSONDecodeErrorrr,r+�dumpsr.�joinr�create_taskr�get_task�to_dictr�	exception)rr�r�r�rhrirjrkr�rlrmrnZlog_messagesr��i�	file_path�	file_size�eZchannel_listZvalidated_speaker_countZspecial_filterZ
task_priorityr��task�	error_msgrrrrds��  1022>��103�104"����*�105���zGradioInterface._process_filescCs@|jsdifSt�|j�|j��}|rd|j�d�ifSdifS)u取消当前任务u没有正在执行的任务u任务 u106 已取消u取消任务失败)r�asyncior�r�cancel_task)r�successrrrre�s�z$GradioInterface._cancel_current_taskcCsd|_ddigddifS)u清空界面Nr>u'界面已清空,等待上传文件...)rrrrrrf�s�z GradioInterface._clear_interfacecCs�d}i}d}i}g}d}|jr�|j�|j�}|r�|��}d|jj�d|jj��}|�|�}|jt	j107kr�|j�d|j
j���|j
jr�|j
j}|�dg�}|j�d|���d�d	d108�|D��}g}|D]2}	d|	vr�|�|	�dd��d
�d|	�dd�d�d�t|	�dd��|	�dd�t|	�dd�d�g�qcn"|j�d�n|jt	jkr�|j
r�|j
jr�|d|���d|j
j��7}|��}109||||||110|fS)u更新界面状态rDr>r�z] u&任务已完成,检查转录结果: �transcriptionsu转录结果: z111 112c	Ss@g|]}|�d�rd|�dd��d�d�d|�dd����qS)�textu文件: �file_urlr>�/�����r�)�getr�)r��trrrr��s113114�(�z5GradioInterface._update_interface.<locals>.<listcomp>�errorr�r�r��durationrz.1f�sr��language�unknown�115confidencer#u$任务已完成但没有转录结果z116[u] 任务失败: )rrr�r��statusr.�progress�message�_collect_task_logsr�	COMPLETEDr�debug�result�transcription_resultsr�r�r�r�r��round�FAILED�
error_messager�ra)rrorsrprtZ117stats_datarur�r�r�rqrrrrc�sN118119�120���121z!GradioInterface._update_interfacec
Cs�|sdSg}|�d|���d|j���|�d|���d|jj���|�d|���d|j���|jrC|�d|���d|jj���t|d�r�|j	r�|�d|���d��t122|j	�D]C\}}z|��j}|�d	|d123�d|j
�d|�d
��Wq[ty�}z|�d	|d124�d|j
�dt|��d��WYd}~q[d}~ww|jtjkr�|jr�|�d|���d|j���t|jd�r�|jjr�|jj�dg�}|�d|���dt|��d��d�|�S)u�收集任务的详细日志125        126        Args:127            task: 任务对象128            129        Returns:130            格式化的日志字符串131        u无任务信息r�u] 任务ID: u] 任务状态: u] 任务创建时间: u] 进度信息: r�u] 文件列表:z  r8z. z (z bytes)r�r�Nu] 任务完成时间: r�r�u] 转录结果: r�r�)r�r��idr�r.�132created_atr�r��hasattrr�r�r�r�r�r�rKrr�r��completed_atr�r�r�r�)rr��	log_linesr�r�r�r�r�rrrr��s0	133(4�� 134z"GradioInterface._collect_task_logscCs"|j�d|j�d|jj���dS)u任务状态变化回调u任务状态变化: z -> N)rr�r�r�r.)rr�rrrrs"z&GradioInterface._on_task_status_changecKsbd|jjjd|jjjd|jjjd�}|�|�|j�d|d�d|d���|jjd	i|��S)135u启动Gradio界面z0.0.0.0T)�server_name�server_port�sharer�Z136show_error�quietu启动Gradio界面: http://r��:r�Nr)	r�app�portr��updaterr<r�launch)r�kwargsZdefault_kwargsrrrr�s137�138 zGradioInterface.launch)�__name__�139__module__�__qualname__�__doc__rrWrXrrKrvrrar�r�boolrr�rrdrerfrcr�rr�rrrrrsNT
������140�	�141���
142�w  
8,rrcCstS)uJ获取Gradio界面实例143    144    Returns:145        Gradio界面实例146    )�gradio_interfacerrrr�get_gradio_interface/sr�cCstjS)uD创建演示界面147    148    Returns:149        Gradio界面对象150    )r�rrrrr�create_demo_interface8sr�)r�r�r��pathlibr�typingrrrrr�gradiorWZpandas�pdZcore.configr	Zcore.task_managerr151rrZutils.loggerr
Zservices.file_validatorrrr�r�rXr�rrrr�<module>s&