当前位置: 首页 > news >正文

FRP调用本地摄像头完成远程拍照

from flask import Flask, Response
import cv2

app = Flask(__name__)

# 基础文字回复
@app.route('/')
def hello_world():
    return '''
    <h1>你好啊世界</h1>
    <img src="/camera" width="640" />
    '''

# 摄像头拍照并返回图像
@app.route('/camera')
def capture_camera():
    # 尝试打开摄像头
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        return "摄像头打开失败,请检查设备", 500
    
    # 读取一帧图像
    success, frame = cap.read()
    cap.release()  # 释放摄像头
    
    if not success:
        return "图像捕获失败", 500
    
    # 将图像转为 JPEG 格式字节流
    ret, buffer = cv2.imencode('.jpg', frame)
    if not ret:
        return "图像编码失败", 500
    
    # 返回图像数据
    return Response(buffer.tobytes(), mimetype='image/jpeg')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3344, debug=False)

使用步骤

  1. 安装依赖库(需提前安装 OpenCV):

    pip install flask opencv-python
  2. 运行程序

    python server.py
  3. 手机访问

    • 在手机浏览器输入 http://你的服务器IP:3344(本地测试用电脑内网 IP,公网需端口转发)

    • 页面会显示文字 “你好啊世界” 和摄像头实时拍摄的照片(每次刷新页面会更新)。


关键注意事项

  1. 摄像头权限

    • 如果运行在 Windows/Mac/Linux 本地,确保摄像头驱动正常且未被其他程序占用。

    • 云服务器(如腾讯云)无物理摄像头,此代码无法直接运行,需在本地设备测试。

  2. 延迟问题

    • 每次访问 /camera 会重新打开摄像头拍照,频繁刷新可能导致延迟。若需实时视频流,需改用 WebSocket 或 MJPEG 流(需修改代码逻辑)。

  3. 安全风险

    • 开放公网端口 3344 时,确保防火墙限制访问 IP,避免被恶意扫描。


效果示意图

  • 手机访问页面会显示类似如下内容(文字 + 摄像头图像):

    你好啊世界
    [此处显示摄像头拍摄的图片]
http://www.dtcms.com/a/120996.html

相关文章:

  • 2台8卡L20服务器集群推理方案
  • FlashDB 在嵌入式系统中占用硬件资源
  • 2025 跨平台技术如何选:KMP 与 Flutter 的核心差异
  • 【ISP】ISP pipeline(AI)
  • 创建采购申请报错不可能为销售订单或项目库存确定科目 消息号 ME558
  • dubbo配置中心
  • 内核态切换到用户态
  • ①(PROFINET 转 EtherNet/IP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关
  • 【Nodebb系列】Nodebb笔记写入方案
  • DDPM理论基础解析
  • 使用chainlit出现【无法访问服务器】或【Could not reach the server.】解决方案
  • Redis的主从复制
  • 解码AI大脑:Claude的思维显微镜与语言炼金术
  • 数学知识——矩阵乘法
  • 牛客KY222 打印日期
  • Spring Boot 3.5新特性解析:自动配置再升级,微服务开发更高效
  • 【设计模式】模板模式
  • LeetCode详解之如何一步步优化到最佳解法:26. 删除有序数组中的重复项
  • 解决leetcode第3510题移除最小数对使数组有序II
  • Flutter性能优化终极指南:从JIT到AOT的深度调优
  • 视频孪生赋能交警构建“空地一体“智慧交管体系的创新实践
  • leetcode797图论-对邻接矩阵和邻接表不同形式进行dfs与bfs遍历方法
  • 【C++差分数组 树上倍增】P6869 [COCI2019-2020#5] Putovanje|普及+
  • 电影舆情分析可视化平台管理端实现
  • Redisson的RedLock与联锁(MultiLock)的区别
  • 手持式RFID读写器对比固定式读写器的差异优势
  • Mathwork Platform - Matlab Help Center - Concept and Application
  • 前端面试宝典---数据类型
  • Redis基础指令(Windows)
  • 每日一题——AB10 反转链表