编辑 | blame | 历史 | 原始文档

math review

使用VideoPipe模仿作业帮APP做口算检查。

提前准备

  1. 已准备好 VideoPipe 编译/运行环境(参见视频教程)
  2. 已准备好本案例所需的测试模型和测试数据(即vp_data,具体参见视频教程)
  3. 已安装好本案例中 Python3 所需的依赖库(主要是numpy,pandas,opencv,flask,faiss等,其余按需安装即可)

主要文件

  1. math_expression_check_pipeline.cpp 运行VideoPipe管道读取图片,检测/识别图片中的数学等式、判断等式是否成立,并将结果通过Socket/UDP方式发送给后台服务。
  2. math_expression_check_server.py 后台服务接收检查结果,存入数据库,并提供一个基于flask的Web UI界面供历史数据查询。
  3. clean.sh 帮助清空当前workspace下面的所有缓存数据。

![](./docs/1.png)

如何使用

  1. CMake编译 math_expression_check_pipeline.cpp 生成二进制可执行程序并运行,它会实时识别数学等式、判断对错。(编译之前请先修改代码中 des_ip 和 rtmp推流地址)
  2. 运行 python3 math_expression_check_server.py 脚本, 接收检查结果,然后打开浏览器访问 http://server-ip:3636 查看口算检查记录。 (运行前,先修改脚本中 bind_ip 和 live_stream_0 的值)

数据流向

  1. [pipeline -> math expression checking results -> send via socket]
  2. [receive checking results -> display results from web]
please run `sh clean.sh` if you want to restart sample from scratch.

VideoPipe管道介绍

![](./vp_analysis_board.png)

  1. layer_1 模拟获取口算答题纸图片,实际可以从网络接收数据、或使用app_app_src_node从host侧代码获取。
  2. layer_2 完成数学等式的检测&识别,创建 vp_frame_text_target。这里直接基于开源的PaddleOCR项目实现,实际应用需要自己训练OCR模型。
  3. layer_3 完成数学等式结果判断,更新 vp_frame_text_target 的 flags(yes/no/invalid),分别表示正确/错误/等式无效。这里涉及到数学表达式解析和计算。
  4. layer_4 完成结果绘制,主要将口算检查结果(vp_frame_text_target.flags)按照不同的颜色(绿色/红色/橙色)绘制到帧上。
  5. layer_5 完成数据转发,将管道中的口算检查结果(vp_frame_text_target)按自定义格式,以Socket/UDP的方式发送给Python后台服务。
  6. layer_6
    • screen_des_0 负责GUI输出显示,显示基本无延时。
    • rtmp_des_0 负责rtmp编码推流,Web UI通过rtmp地址可以实时播放,有若干秒延时。

重要知识点

  1. vp_frame_text_target 类型。
  2. 数学表达式解析和计算原理。
  3. MID节点除了有模型推理、OSD、跟踪相关类型外,还有哪些。
  4. vp_image_src_node 和 vp_app_src_node 类型。

Sample运行截图

![](../../doc/p53.png)