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

效果示意图

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

    复制代码
    你好啊世界
    [此处显示摄像头拍摄的图片]
相关推荐
qq_4850152120 分钟前
Java网络编程干货
java·网络·php
无名之逆23 分钟前
Hyperlane 文件分块上传服务端
服务器·开发语言·前端·网络·http·rust·php
达斯维达的大眼睛1 小时前
Linux网络多进程并发服务器和多线程并发服务器
linux·服务器·网络
Lilith的AI学习日记2 小时前
LangChain高阶技巧:动态配置Runnable组件的原理剖析与实战应用
大数据·网络·人工智能·架构·langchain
安科瑞刘鸿鹏2 小时前
智能配电保护:公共建筑安全的新 “防火墙”
运维·网络·物联网·算法·安全·能源
田甲2 小时前
【STM32】ST7789屏幕驱动
stm32·单片机·嵌入式硬件
czhc11400756632 小时前
网络5 TCP/IP 虚拟机桥接模式、NAT、仅主机模式
网络·tcp/ip·桥接模式
逆水寻舟2 小时前
尚硅谷2019版Java网络编程笔记
java·网络·笔记
六六六六六66663 小时前
TIM 编码接口
stm32·编码器
Bidjc5 小时前
关于群晖安装tailscale后无法直链的问题
智能路由器·群晖·tailscale