如何使用flask将动态下载的图像提供给浏览器?

Tal*_*Tal 0 python flask

我正在使用IP摄像头.我可以使用这样的URL从相机中获取静态图像:

HTTP://用户名:密码@ IP_of_Camera:端口/流/信道/ 1 /图象

我想要做的是让python/flask在客户端加载页面时从该URL下载图像,并使用img标记将图像嵌入到页面中.

如果我有一个看起来像这样的模板:

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <img src="{{ image }}">
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

如何用下载的图像替换{{image}}?

我是否会使用urllib/requests将图像下载到flask的静态文件夹中,将{{image}}替换为类似的内容{{ url_for('static', filename="temp_image.png") }},然后在页面加载时从静态文件夹中删除图像?我会在其他地方下载它(静态文件夹除外)吗?或者还有其他方法可以将图像保存在内存中吗?

PS.我知道可以直接用该URL替换{{image}},但是会向客户端显示相机的用户名/密码/ IP /端口.

Vas*_*sif 6

我会在烧瓶上添加一个屏蔽路径,直接取出并提供图像.让我们说domain.com/image/user1/cam1

您的服务器通常会向摄像机发出http请求,一旦收到响应,您就可以直接将其作为Response具有适当mimetype 的对象提供.

在这种情况下,从相机获取的图像驻留在RAM中.

@app.route('image/<userID>/<camID>')
def fun(userID,camID):
    #  fetch the picture from appropriate cam
    pic = requests.get('http://'+
        'Username:Password'+ # dynamically replace user id / password/ auth
        '@IP_of_Camera:Port'+ #dynamically replace port / IP
        '/streaming/channels/1/picture')

    # do processing of pic here..

    return Response(pic,mimetype="image/png")
Run Code Online (Sandbox Code Playgroud)

但是,如果需要一遍又一遍地提供此图像,那么您可能想要缓存它.在这种情况下,我会选择更接近你的方法的东西.

如果你想要流式传输相机图像,这是一个完全不同的球赛.