Skip to the content.

📝 Week 12 基于Tailscale与Flask的手机端ArUco标记实时识别系统实验

姓名:王昕昊(Wang Xinhao) 学校:Shinhan University 国际学院 软件工程专业 课程名称:AI Robotics & Vision System 实验日期:2026年5月28日


🇨🇳 实验内容概述(Experiment Overview)

本周实验重点围绕手机摄像头远程接入、Tailscale 网络互联、Flask 图像流服务以及 ArUco 标记识别系统展开。 通过 WSL Ubuntu 环境与移动端设备的结合,实现了基于局域虚拟网络的实时图像采集与识别测试,并完成了 ArUco Marker 的检测、ID 验证以及图像保存功能。

整个实验过程同时涉及:


1. Ubuntu + VS Code 开发环境准备

实验过程

首先在 Windows 系统中启动 Ubuntu 24.04 WSL 环境,并通过 VS Code 连接 Linux 工作区。 随后创建 week12_starters 项目目录,并导入课程所提供的 Python 依赖文件。

实验过程中完成了:

mkdir week12_starters

以及 Python 虚拟环境初始化:

python3 -m venv venv
source venv/bin/activate

同时在 Ubuntu 中安装本周实验所需依赖库,包括:


实验结果


2. Tailscale 网络互联配置

实验过程

本次实验使用 Tailscale 官方网站 构建跨设备虚拟局域网。

在 Ubuntu 中安装并启动 Tailscale:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

系统随后分配虚拟网络 IP:

100.81.89.87

手机端与 WSL Ubuntu 同时加入同一 Tailnet 网络,实现跨设备访问。


实验结果


3. Flask 摄像头图像流测试

实验过程

运行课程提供的 Flask 摄像头桥接脚本:

python3 week12_starters/camera_bridge.py

系统自动启动 Web 服务:

http://100.81.89.87:5000

随后在手机浏览器中访问该地址,并授权手机摄像头权限。

服务器终端实时输出:

GET /preview.jpg
POST /socket.io/

说明 Flask 与 SocketIO 数据通信工作正常。


实验结果


4. ArUco Marker 识别实验

实验过程

本阶段使用 OpenCV ArUco 模块进行视觉识别测试。

首先通过在线生成器生成:

4x4 Dictionary
Marker ID = 0

的 ArUco 标记图案,并在手机摄像头中进行实时检测。

系统自动识别:

页面实时输出:

Detected: 1
Rejected: 5
Expected ID: 6
Matched expected: false

同时系统支持:

保存当前帧

功能,用于后续标定与数据分析。


实验结果


5. 实验中遇到的问题与解决

Python 环境限制问题

Ubuntu 24.04 中出现:

externally-managed-environment

错误。

原因是新版 Python 采用 PEP668 机制,限制系统级 pip 安装。

解决方法:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

成功通过虚拟环境完成依赖安装。


🇺🇸 English Summary

Development Environment

A Week12 robotics vision environment was configured using Ubuntu WSL and VS Code. Python virtual environments and dependency packages were installed successfully.

Tailscale Networking

Tailscale was deployed to connect the smartphone and Ubuntu system into the same virtual LAN. A private network IP was assigned successfully.

Camera Streaming

A Flask-based camera bridge service was launched. The smartphone browser successfully transmitted live camera frames to Ubuntu through SocketIO.

ArUco Detection

OpenCV ArUco recognition was tested using a 4x4 marker dictionary. The system detected marker boundaries and IDs in real time.

Experiment Outcome

The experiment successfully verified:


🇰🇷 한국어 요약

개발 환경 구성

Ubuntu WSL과 VS Code를 이용하여 Week12 실습 환경을 구축하였다. Python 가상환경 및 필요한 라이브러리 설치를 완료하였다.

Tailscale 네트워크 연결

Tailscale을 이용하여 스마트폰과 Ubuntu를 동일한 가상 네트워크에 연결하였다. 가상 IP가 정상적으로 할당되었다.

Flask 카메라 스트리밍

Flask 기반 카메라 브리지 서버를 실행하였다. 스마트폰 브라우저를 통해 실시간 영상 프레임을 Ubuntu로 전송하였다.

ArUco 마커 인식

OpenCV ArUco 모듈을 사용하여 마커 인식 실험을 수행하였다. 마커 ID 및 경계 검출이 정상적으로 이루어졌다.

최종 결과

본 실험을 통해 다음 기능들을 성공적으로 검증하였다.


camera bridge

aruco detection

tailscale network