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

python 复制代码
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,避免被恶意扫描。

效果示意图

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

    复制代码
    你好啊世界
    [此处显示摄像头拍摄的图片]
相关推荐
DianSan_ERP7 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅7 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
悠哉悠哉愿意7 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
2501_946205527 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel7 天前
第七部分:高级IO
服务器·网络
Lester_11017 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元7 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
数字护盾(和中)7 天前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库
三佛科技-187366133977 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315207 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件