You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Taipy Python库支持摄像头流显示及地图功能的技术咨询

在Taipy中实现摄像头流显示与谷歌地图实时交互

一、在卡片组件中显示摄像头流

Taipy本身没有原生的摄像头流组件,但可以通过两种方式实现需求:

方法1:用Html组件直接嵌入网络摄像头流

如果IP摄像头提供HTTP/RTSP流媒体地址(例如http://xxx.xxx.xxx.xxx:port/stream),可以在Card内通过Html组件嵌入HTML5的<video>标签直接播放:

from taipy.gui import Gui, Card, Html

video_html = """
<video width="640" height="480" autoplay muted>
  <source src="http://你的IP摄像头流地址" type="video/mp4">
</video>
"""

page = """
<|card|
<|{video_html}|html|>
|>
"""

Gui(page).run()

方法2:通过OpenCV捕获帧并实时更新Image组件

针对本地摄像头或无法直接嵌入的流,可使用OpenCV逐帧捕获画面,转成Base64格式后更新Taipy的Image组件:

from taipy.gui import Gui, Card, Image
import cv2
import base64
from io import BytesIO

cap = cv2.VideoCapture(0)  # 0代表本地摄像头,替换为IP摄像头RTSP地址即可
frame_base64 = ""

def update_frame(state):
    global cap
    ret, frame = cap.read()
    if ret:
        _, buffer = cv2.imencode('.jpg', frame)
        state.frame_base64 = "data:image/jpeg;base64," + base64.b64encode(buffer).decode()

page = """
<|card|
<|{frame_base64}|image|width=640|height=480|>
|>
"""

Gui(page).run(update_frame, interval=0.03)  # 约30帧/秒的更新频率

二、嵌入谷歌地图并实现实时位置与路线展示

Taipy可通过Html组件结合谷歌地图JavaScript API实现该功能,核心是用HTML加载地图,再通过Taipy回调更新地图元素:

实现代码示例

from taipy.gui import Gui, Card, Html

# 初始位置与路线数据
current_location = {"lat": 39.9042, "lng": 116.4074}
route_points = [
    {"lat": 39.9042, "lng": 116.4074},
    {"lat": 39.915, "lng": 116.403}
]

# 谷歌地图HTML模板(替换为你的API密钥)
map_html = """
<div id="map" style="height: 400px; width: 100%;"></div>
<script>
  function initMap() {
    const map = new google.maps.Map(document.getElementById('map'), {
      zoom: 14,
      center: {lat: {{current_location.lat}}, lng: {{current_location.lng}}}
    });
    // 初始化位置标记
    const marker = new google.maps.Marker({
      position: {lat: {{current_location.lat}}, lng: {{current_location.lng}}},
      map: map
    });
    // 初始化路线
    const routePath = new google.maps.Polyline({
      path: {{route_points}},
      geodesic: true,
      strokeColor: '#FF0000',
      strokeOpacity: 1.0,
      strokeWeight: 2
    });
    routePath.setMap(map);

    // 监听Taipy变量变化,实时更新标记与路线
    taipy.onChange("current_location", (value) => {
      marker.setPosition(new google.maps.LatLng(value.lat, value.lng));
      map.panTo(new google.maps.LatLng(value.lat, value.lng));
    });
    taipy.onChange("route_points", (value) => {
      routePath.setPath(value);
    });
  }
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=你的谷歌地图API密钥&callback=initMap"></script>
"""

page = """
<|card|
<|{map_html}|html|>
|>
"""

# 模拟实时位置更新(实际场景可替换为GPS/API数据源)
def update_location(state):
    state.current_location["lat"] += 0.0001
    state.current_location["lng"] += 0.0001
    state.route_points.append({"lat": state.current_location["lat"], "lng": state.current_location["lng"]})

Gui(page).run(update_location, interval=2)  # 每2秒更新一次

关键注意点

  • 需申请谷歌地图API密钥,并启用Maps JavaScript API(若需自动规划路线,还需启用Directions API)
  • 实时路线规划可调用谷歌地图Directions API,将返回的路径坐标更新到route_points变量中

内容的提问来源于stack exchange,提问作者i h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:28:35