o
    &j                  
   @   s   d dl Zd dlZddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddl	mZ dd	l	mZ dd
l	mZ ddl	mZ ddl	mZ ddl	mZ ddl	mZ e Ze
eeeeeeedd d	Zdd Zdd ZdS )    N   )get_metric_data)HttpClientManager)metrics_table_head)metrics_table_head_en)visualize_detection)visualize_face_alignment)visualize_face_detection)visualize_headpose)visualize_keypoint_detection)visualize_matting)visualize_ocr)visualize_segmentationc                 C   s   t | S N)str)x r   z/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/visualdl/component/inference/fastdeploy_client/client_app.py<lambda>*   s    r   )	Z	detectionZfacedetZkeypointdetectionZsegmentationZmattingZocrZfacealignmentZheadposeunspecifiedc                     sj  d} t j| d}| t d t  o t  q t  ] t  # t jddddd}t jd	ddd
d}t jddddd}W d    n1 sKw   Y  t   t jddddd}t jddddd}W d    n1 sqw   Y  W d    n1 sw   Y  W d    n1 sw   Y  t   t d3 t 	d}t jdd t j
tt dddd}t d t   t  b t d g g g g tdD ]H}	t jd|	ddd}
|
 t jddd}t jdd }t jd!d"d#}W d    n	1 sw   Y  |
 | | | qW d    n	1 s1w   Y  t  d t d$ g g 	g g tdD ]J}	t jd%|	ddd}
|
 t jddd}t jd&ddd'}t jdd(}W d    n	1 s|w   Y  |
 	| | | qLW d    n	1 sw   Y  W d    n	1 sw   Y  t 	d)}W d    n	1 sw   Y  W d    n	1 sw   Y  t d*: t d t jd+d,d#}t   t d- t jd.dd
W d    n	1 s
w   Y  t 	d)}W d    n	1 sw   Y  W d    n	1 s/w   Y  t  4 t   t d/ t jd0ddtd1d1d2t 	d3}W d    n	1 s`w   Y  W d    n	1 spw   Y  t jd4dddd5W d    n	1 sw   Y  t jd6dd7ddd8}    	     	fd9d:}	fd;d<}
fd=d>}fd?d@}|j||||||gg  |dA |j||||||g|g 	dA |j|||||||g
gdA |j||||ggdA W d    |S 1 s.w   Y  |S )BN  
          .gradio-container {
              font-family: 'IBM Plex Sans', sans-serif;
          }
          .gr-button {
              color: white;
              border-color: black;
              background: black;
          }
          input[type='range'] {
              accent-color: black;
          }
          .dark input[type='range'] {
              accent-color: #dfdfdf;
          }
          #gallery {
              min-height: 22rem;
              margin-bottom: 15px;
              margin-left: auto;
              margin-right: auto;
              border-bottom-right-radius: .5rem !important;
              border-bottom-left-radius: .5rem !important;
          }
          #gallery>div>.h-full {
              min-height: 20rem;
          }
          .details:hover {
              text-decoration: underline;
          }
          .gr-button {
              white-space: nowrap;
          }
          .gr-button:focus {
              border-color: rgb(147 197 253 / var(--tw-border-opacity));
              outline: none;
              box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
              --tw-border-opacity: 1;
              --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)                 var(--tw-ring-offset-color);
              --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px var(--tw-ring-offset-width)) var(--tw-ring-color);
              --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity));
              --tw-ring-opacity: .5;
          }
          .footer {
              margin-bottom: 45px;
              margin-top: 35px;
              text-align: center;
              border-bottom: 1px solid #e5e5e5;
          }
          .footer>p {
              font-size: .8rem;
              display: inline-block;
              padding: 0 10px;
              transform: translateY(10px);
              background: white;
          }
          .dark .footer {
              border-color: #303030;
          }
          .dark .footer>p {
              background: #0b0f19;
          }
          .prompt h4{
              margin: 1.25em 0 .25em 0;
              font-weight: bold;
              font-size: 115%;
          }
  cssS  
              <div style="text-align: center; max-width: 650px; margin: 0 auto;">
                <div
                  style="
                    display: inline-flex;
                    gap: 0.8rem;
                    font-size: 1.75rem;
                    justify-content: center;
                  "
                >
                <h1>
                FastDeploy Client
                </h1>
                </div>
                <p font-size: 94%">
                The client is used for creating requests to fastdeploy server.
                </p>
              </div>
          u   服务ipTr   	localhostlabel
show_label	max_linesplaceholderu   推理服务端口8000u   性能服务端口8002u   模型名称yolov5u   模型版本1u   组件形式u   获取模型输入输出Fvisibler   u   任务类型choicesvaluer   r%   u?   根据模型需要，挑选文本框或者图像框进行输入u   模型输入   u   输入变量 {}openr%   u	   变量名r   interactivenumpytypeu	   文本框  r   r   u   模型输出u   输出变量 {}u   服务返回的原数据r   r-   r   r-   u   提交请求u   原始形式u   负载数据'  u   输出u   服务返回的原始数据u`   服务性能统计（每次提交请求会自动更新数据，您也可以手动点击更新）metrics r   r-   r   r(   u   更新统计数据statusr   r   r   r-   langzhr   r   r(   r   r%   c              
        z| d | }t |||\}}W n ty) } zt|iW  Y d }~S d }~ww dd  D }	tjdd|	< D ]
}
tjdd|	|
< q;D ]
}tjdd|	|< qHd|	< t|D ]\}}tjdd|	| < |d |	| < q[t|D ]\}}tjdd|	| < |d |	| < qv|	S )	N:c                 S      i | ]}|d qS r   r   .0	componentr   r   r   
<dictcomp>      zKcreate_gradio_client_app.<locals>.get_input_output_name.<locals>.<dictcomp>Tr$   F*Get model inputs and outputs successfully.name_http_managerZget_model_meta	Exceptionr   grupdate	enumerate	server_ipZserver_port
model_namemodel_version	lang_textserver_addrZinput_metasZoutput_metaseresultsZinput_accordioZoutput_accordioiZ
input_metaZoutput_metaall_input_output_componentscomponent_format_columninput_accordionsinput_name_textsoutput_accordionsoutput_name_textsstatus_textr   r   get_input_output_name  2   z7create_gradio_client_app.<locals>.get_input_output_namec               
        | d }| d }| d }| d }| d }| ddt   }| dt  dt  t    }| dt  t   dt  t   t   }| d }	|d | }
|r|r|r|ri }t|D ]+\}}|r|| d ur|t|| g||< || rtj|| d	ggtjd
||< qfzYt|
|||}di}t| D ]7\}\}}||| < t	||| < |	dkrzt
|	 |d ||| < W q ty   d || < Y qw q|rt||d}||< |W S  ty } zd|iW  Y d }~S d }~ww diS )Nr   r               r?   utf-8ZdtypeInference successfully.r   r<   	Error: {}7Please input server addr, model name and model version.lenrM   nparrayencodeZobject_rI   Zinferitemsr   supported_tasksrJ   r   formatargsrO   	http_portmetric_portrP   rQ   namesZimagesZtextsZ	task_typerS   inputsrV   Z
input_nameZinfer_resultsrU   Zoutput_namedata
html_tablerT   input_imagesr[   input_textsoutput_html_tableoutput_imagesr]   output_textsr^   r   r   component_inference*  ~   

z5create_gradio_client_app.<locals>.component_inferencec               
         | d }| d }| d }| d }| d }| d }|d | }zt ||||}d|i}	|r;|r;t||d	}
|
|	 < |	W S  tyV } zd
|iW  Y d }~S d }~ww )Nr   r   rb   rc   rd   re   r?   Get response from serverr<   rj   rI   Z	raw_inferr   rJ   rs   ru   rO   rv   rw   rP   rQ   Zpayload_textrS   resultrU   r{   rT   r   output_raw_textr^   r   r   raw_inference\  ,   z/create_gradio_client_app.<locals>.raw_inferencec              
      ^   | r+|r+zt | |d} |diW S  ty* } zd|iW  Y d }~S d }~ww diS )Nr<   Update metrics successfully.rj   (Please input server ip and metrics_port.r   rJ   rs   rO   Zmetrics_portrR   r{   rT   r   r^   r   r   update_metricr     z/create_gradio_client_app.<locals>.update_metricfnry   Zoutputs)rK   BlocksHTMLGroupBoxColumnRowTextboxTabButtonRadiolistrr   keysMarkdownrange	Accordionrs   Imageappendr   clickr   blockZserver_addr_textZserver_http_port_textZserver_metric_port_textZmodel_name_textZmodel_version_textZcheck_buttonZ
task_radiorV   Z	accordionZinput_name_textZinput_imageZ
input_textZoutput_name_textZoutput_textZoutput_imageZcomponent_submit_buttonZraw_payload_textZraw_submit_buttonZupdate_metric_buttonrR   r_   r   r   r   r   rX   rY   rZ   r}   r[   r~   r\   r   r   r]   r   r   r^   r   create_gradio_client_app.   s  E




%











	

/:



E



{
2
  
  .    .r   c                     sj  d} t j| d}| t d t  o t  q t  ] t  # t jddddd}t jd	ddd
d}t jddddd}W d    n1 sKw   Y  t   t jddddd}t jddddd}W d    n1 sqw   Y  W d    n1 sw   Y  W d    n1 sw   Y  t   t d3 t 	d}t jdd t j
tt dddd}t d t   t  b t d g g g g tdD ]H}	t jd|	ddd}
|
 t jddd}t jdd }t jd!d"d#}W d    n	1 sw   Y  |
 | | | qW d    n	1 s1w   Y  t  d t d$ g g 	g g tdD ]J}	t jd|	ddd}
|
 t jddd}t jd!ddd%}t jdd&}W d    n	1 s|w   Y  |
 	| | | qLW d    n	1 sw   Y  W d    n	1 sw   Y  t 	d'}W d    n	1 sw   Y  W d    n	1 sw   Y  t d(: t d) t jd*d+d#}t   t d, t jd-dd
W d    n	1 s
w   Y  t 	d'}W d    n	1 sw   Y  W d    n	1 s/w   Y  t  4 t   t d. t jd/ddtd0d0d1t 	d2}W d    n	1 s`w   Y  W d    n	1 spw   Y  t jd3dddd4W d    n	1 sw   Y  t jd5dd6ddd7}    	     	fd8d9}	fd:d;}
fd<d=}fd>d?}|j||||||gg  |d@ |j||||||g|g 	d@ |j|||||||g
gd@ |j||||ggd@ W d    |S 1 s.w   Y  |S )ANr   r   r   z	server ipTr   r   r   zserver portr    zmetrics portr!   z
model namer"   zmodel versionr#   zComponent formzget model input and outputFr$   r   z	task typer&   z>Choose text or image component to input according to data typeZInputsr)   zvariable {}r*   zvariable namer,   r.   r/   textr1   r2   ZOutputsr3   r4   zsubmit requestzOriginal formRequestzrequest payloadr5   Responsezraw response datau_   Metrics（update automatically when submit request，or click update metrics button manually）r6   r7   r8   zupdate metricsr9   r:   r;   enr=   c              
      r>   )	Nr?   c                 S   r@   r   r   rA   r   r   r   rD     rE   zNcreate_gradio_client_app_en.<locals>.get_input_output_name.<locals>.<dictcomp>Tr$   FrF   rG   rH   rN   rW   r   r   r_     r`   z:create_gradio_client_app_en.<locals>.get_input_output_namec               
      ra   )Nr   r   rb   rc   rd   re   rf   r?   rg   rh   ri   r   r   rj   rk   rl   rt   r|   r   r   r     r   z8create_gradio_client_app_en.<locals>.component_inferencec               
      r   )Nr   r   rb   rc   rd   re   r?   r   r   rj   r   r   r   r   r   r     r   z2create_gradio_client_app_en.<locals>.raw_inferencec              
      r   )Nr   r   rj   r   r   r   r   r   r   r     r   z2create_gradio_client_app_en.<locals>.update_metricr   )rK   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   r   r   rs   r   r   r   r   r   r   r   r   create_gradio_client_app_en  s  E




%













1>



I

 
2
  
  4    4r   )ZgradiorK   r.   rn   Zhttp_client_managerr   r   r   r   Z
visualizerr   r   r	   r
   r   r   r   r   rI   rr   r   r   r   r   r   r   <module>   s:     y