voila: jupyter notebook simplemente crea una interfaz de pantalla para reproducción de video y pruebas de aprendizaje profundo

Introducción:
voila puede convertir el cuaderno jupyter en un tablero interactivo. Hay algunos ejemplos en Internet ( convierta Jupyter Notebook en una aplicación web: Voila ) para conocer algunas funciones de voila. También hay consejos sobre el uso de Jupyter ( ¿cómo usar Jupyter con gracia? ) El
contenido principal de este artículo es hacer una interfaz web simple, cuyas funciones son: 1. Elegir diferentes videos y reproducirlos, 2. Ejecutar el código de prueba del modelo de aprendizaje profundo , 3. Suplemento

1. Reproducir video del cuaderno Jupyter

import ipywidgets as widgets
from ipywidgets import interact
from IPython.display import display
from pathlib import Path
import cv2
#本文没有使用opencv自带的imshow函数,而是利用网页显示,需要转换成bytes
def show_video(video_path):
    cap = cv2.VideoCapture(video_path)
    while True:
        _,frame = cap.read()
        if(frame is None):
            break          
        imgbox = cv2.imencode('.jpg',frame)[1].tobytes()#tobytes会有一定的耗时(5ms左右)
        yield imgbox,frame

cached_videos_path=Path('/home/hyx/Documents/mutil_thread/cached_video')
glob_pattern = "*.*"  #这个可以指定抓取到的文件后缀,*.*指文件名中带.就可以,*.MP4 指文件后缀为mp4

dropdown = widgets.Dropdown(options=[p.name for p in cached_videos_path.glob(glob_pattern)],
                            description='视频名称:')
#视频=窗口设置
image = widgets.Image(format='jpg',height=540,width=840)
#选择按钮
def update_dropdown(diff):
    p = cached_videos_path/dropdown.value
    print(p)
    for byte in show_video(str(p)):
    #for byte in show_video(0): #需要显示摄像头,改成0就好了
        image.value = byte[0]
    
dropdown.observe(update_dropdown, 'value')
dropdown
#视频显示
widget1 = widgets.Output()
display(image)

Inserte la descripción de la imagen aquí
Luego, la línea de comando voila Untitled.ipynbse puede abrir en una interfaz de página web
Inserte la descripción de la imagen aquí
como se usa en la cámara, el código for byte in show_video(0):para que un salto al nombre del archivo en el cuadro desplegable, se muestre la imagen de la cámara.

2. Agregue un modelo de aprendizaje profundo

Esta parte depende de las necesidades personales. Solo hablo brevemente sobre cómo agregar mi modelo, por lo que no publicaré el código.
Si va a realizar la detección de destino para cada fotograma, pruebe el segundo valor de retorno de la función show_video (video_path). El primer valor devuelto por la función show_video (video_path) se usa para la visualización, y el segundo valor es el marco de la imagen en formato numpy.array requerido por nuestra interfaz de función modelo. Modifique la interfaz de la función de prueba, coloque un marco de imagen y luego devuelva un resultado de imagen o un resultado de texto. Luego, además de este código de función for byte in show_video(str(p)):,
hay un problema, es posible que deba mostrar dos ventanas de video, una del video original, más un video de los resultados del modelo. Lo hice a través de zip. La función show_video (video_path) es el valor de retorno del rendimiento fotograma a fotograma, luego puedo usar zip para hacer que show_video (video_path) y el proceso (video_path) se ejecuten simultáneamente. A continuación se muestra mi código. La interfaz y el valor de retorno del proceso son similares a la función show_video, pero el procesamiento en el medio es diferente.
Inserte la descripción de la imagen aquí

Código de visualización de video
Inserte la descripción de la imagen aquí

3. Suplemento

Modelo de salida de texto, se widgets.Text()puede mostrar.

Establecer cuadro de texto

text_summary = widgets.Text()
text_summary.layout.width = "750px"
text_summary.value = f" {sum(a)}"  

Visualización de cuadro de texto

widget1 = widgets.Output()
widget2 = widgets.Output()
with widget1:
    display(text_temp)
with widget2:
    display(text_summary)
hbox = widgets.HBox([widget1, widget2])
hbox

Supongo que te gusta

Origin blog.csdn.net/qq_38469784/article/details/112530668
Recomendado
Clasificación