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,避免被恶意扫描。

效果示意图

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

    复制代码
    你好啊世界
    [此处显示摄像头拍摄的图片]
相关推荐
mftang3 小时前
STM32 IO接口推挽输出 (PP)和开漏输出 (OD)
stm32·嵌入式硬件·推挽输出·开漏输出
天骄t3 小时前
嵌入式系统与51单片机核心原理
linux·单片机·51单片机
VekiSon3 小时前
51单片机——从入门到实操
单片机·嵌入式硬件·51单片机
Arciab3 小时前
51单片机_中断&定时器
单片机·嵌入式硬件·51单片机
猫头虎4 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
2401_863326114 小时前
基于单片机超高精度电参数测试设计
单片机·嵌入式硬件
搁浅小泽4 小时前
DIP插装加工整线流程
单片机·嵌入式硬件·可靠性工程师
charlie1145141916 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
古城小栈6 小时前
Rust 网络请求库:reqwest
开发语言·网络·rust
Dillon Dong8 小时前
STM32嵌入式:使用 MT29F8G08ABACAWP NAND 的FLASH全面指南
c语言·stm32