# 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)