Skip to content

Commit 7b959ba

Browse files
committed
docs: Updated the README with new instructions
1 parent ca525ff commit 7b959ba

27 files changed

+24412
-154
lines changed

README.md

Lines changed: 59 additions & 154 deletions
Large diffs are not rendered by default.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# CMakeLists.txt (最终版)
2+
3+
cmake_minimum_required(VERSION 3.10)
4+
project(FinalOcrStandaloneApp CXX)
5+
6+
# --- 依赖库路径 (现在只需要 Paddle-Lite 的) ---
7+
set(PADDLE_LITE_DIR "/home/dev/workspace/my_project/inference_lite_lib.armlinux.armv8.gcc.with_extra")
8+
9+
# --- 使用 find_package 自动寻找我们 Sysroot 里的 OpenCV ---
10+
# 这是最关键的修改!它会自动设置好所有 OpenCV 的路径和库。
11+
find_package(OpenCV REQUIRED)
12+
13+
# --- 头文件路径 ---
14+
include_directories("."
15+
"${PADDLE_LITE_DIR}/cxx/include"
16+
${OpenCV_INCLUDE_DIRS} # 由 find_package 自动提供
17+
)
18+
19+
add_executable(final_ocr_app main.cpp)
20+
21+
# --- 链接所有库 ---
22+
target_link_libraries(final_ocr_app PRIVATE
23+
# Paddle-Lite 库
24+
"${PADDLE_LITE_DIR}/cxx/lib/libpaddle_light_api_shared.so"
25+
26+
# OpenCV 库 (由 find_package 自动提供,包含了所有模块和依赖)
27+
${OpenCV_LIBS}
28+
29+
# 系统库
30+
pthread dl m rt
31+
)

my_final_standalone_app/README.md

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# 树莓派实时OCR识别模块 (PaddleOCR + 云端动态配置)
2+
3+
![Raspberry Pi](https://img.shields.io/badge/Raspberry%20Pi-4B%2B-C51A4A?logo=raspberry-pi) ![C++](https://img.shields.io/badge/C%2B%2B-17-00599C?logo=c%2B%2B) ![OpenCV](https://img.shields.io/badge/OpenCV-4.x-5C3EE8?logo=opencv) ![PaddleOCR](https://img.shields.io/badge/PaddleOCR-v4-0072E3)
4+
5+
本项目是 "智能视觉分拣系统" 的核心AI识别模块,经过特别优化,可在 **树莓派** 上独立、高效地运行。它通过摄像头实时捕获视频流,利用 **PaddleOCR v4** 模型进行文字识别,并能通过 **巴法云** 物联网平台动态更新需要匹配的关键字。当识别到特定关键字后,它会通过局域网发送一个HTTP请求,非常适合作为各种自动化项目的“视觉大脑”。
6+
7+
这个模块已经被设计为高度解耦,您可以轻松地将其集成到您自己的AIoT项目中。
8+
9+
---
10+
11+
## 目录
12+
13+
* [功能特点](#功能特点)
14+
* [技术栈](#技术栈)
15+
* [硬件与环境要求](#硬件与环境要求)
16+
* [快速上手指南](#快速上手指南)
17+
* [第一步:准备模型与依赖](#第一步准备模型与依赖)
18+
* [第二步:配置代码](#第二步配置代码)
19+
* [第三步:编译与运行](#第三步编译与运行)
20+
* [文件结构说明](#文件结构说明)
21+
* [致谢](#致谢)
22+
23+
---
24+
25+
## 功能特点
26+
27+
* **轻量级部署**: 在资源受限的树莓派CPU上运行完整的PaddleOCR v4模型(检测+方向分类+识别)。
28+
* **云端动态关键字**: 无需重启程序,可通过巴法云平台远程实时更新需要识别和匹配的关键字列表。
29+
* **实时视频流处理**: 使用OpenCV直接处理摄像头视频流,延迟低。
30+
* **标准化指令输出**: 识别到关键字后,通过局域网发送结构化的HTTP GET请求,易于被ESP32、Arduino或其他网络设备接收。
31+
* **健壮的网络通信**:
32+
* 使用 `HTTPS` 安全地从公网(巴法云)拉取配置。
33+
* 使用 `HTTP` 高效地向局域网设备发送指令。
34+
* 内置了完善的超时、重试和冷却机制。
35+
* **代码高度可读**: C++代码结构清晰,注释详尽,关键部分(如Unicode解码)都有独立的辅助函数。
36+
37+
## 技术栈
38+
39+
* **编程语言**: C++17
40+
* **核心框架**:
41+
* **AI推理**: [Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite)
42+
* **图像处理**: [OpenCV 4](https://opencv.org/)
43+
* **网络通信**: [cpp-httplib](https://github.com/yhirose/cpp-httplib) (已包含在项目中)
44+
* **AI模型**: PaddleOCR v4 轻量级模型
45+
* **物联网平台**: [巴法云](https://bemfa.com/) (用于关键字的远程配置)
46+
47+
## 硬件与环境要求
48+
49+
* **主控板**: 树莓派4B (推荐2GB内存及以上版本)
50+
* **操作系统**: Raspberry Pi OS (官方64位系统以获得最佳性能)
51+
* **视觉传感器**: 标准USB摄像头
52+
* **网络**: 能够连接公网和局域网的WiFi或有线网络
53+
54+
## 快速上手指南
55+
56+
### 第一步:准备模型与依赖
57+
58+
1. **克隆或下载本项目到您的树莓派。**
59+
2. **安装必要的系统库**:
60+
```bash
61+
sudo apt-get update
62+
sudo apt-get install build-essential cmake libopencv-dev libssl-dev
63+
```
64+
3. **准备模型与字典**:
65+
请确保以下文件位于项目的根目录中。您可以从 [PaddleOCR官方模型库](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md#4-paddle-lite-%E6%A8%A1%E5%9E%8B) 下载推理模型,并使用Paddle-Lite的`opt`工具转换为`.nb`格式。
66+
* `det_model.nb`: 检测模型
67+
* `cls_model.nb`: 方向分类模型
68+
* `rec_model_v4.nb`: 识别模型
69+
* `ppocr_keys_v1.txt`: 与识别模型配套的字典文件
70+
71+
### 第二步:配置代码
72+
73+
打开 `main.cpp` 文件,修改文件头部的 **配置区域**,填入您自己的信息。这是唯一需要修改的地方。
74+
75+
```cpp
76+
// --- 巴法云配置 ---
77+
const std::string BAFA_API_HOST = "api.bemfa.com";
78+
const std::string BAFA_API_PATH = "/api/device/v1/data/1/";
79+
const std::string BAFA_PRIVATE_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // <--- 在这里填入你自己的巴法云私钥!
80+
const std::vector<std::string> BAFA_TOPICS = {"YOUR_TOPIC_1", "YOUR_TOPIC_2"}; // <-- 填入你在巴法云上创建的主题
81+
82+
// --- ESP32通信配置 ---
83+
const std::string ESP32_IP_ADDRESS = "192.168.x.x"; // <--- 在这里填入你的目标接收设备(如ESP32)的IP地址!
84+
const std::string ESP32_ENDPOINT = "/keyword_detected";
85+
```
86+
87+
**同时,不要忘记登录巴法云平台,向您配置的主题(如`YOUR_TOPIC_1`)发送您想要识别的关键字(如“桥头镇”)。**
88+
89+
### 第三步:编译与运行
90+
91+
1. **创建编译目录**:
92+
```bash
93+
mkdir build
94+
cd build
95+
```
96+
2. **生成Makefile**:
97+
```bash
98+
cmake ..
99+
```
100+
3. **编译项目**:
101+
```bash
102+
make -j4
103+
```
104+
4. **运行程序**:
105+
编译成功后,可执行文件 `final_ocr_app` 会出现在 `build` 目录。**请务必在项目的根目录运行它**,以确保程序能找到模型文件。
106+
```bash
107+
cd .. # 从build目录返回到项目根目录
108+
./build/final_ocr_app
109+
```
110+
现在,将摄像头对准包含您在云端设置的关键字的物体,您应该能在终端看到匹配成功并发送HTTP请求的日志!
111+
112+
## 文件结构说明
113+
114+
```
115+
.
116+
├── build/
117+
├── cls_model.nb # 方向分类模型
118+
├── det_model.nb # 检测模型
119+
├── rec_model_v4.nb # 识别模型
120+
├── ppocr_keys_v1.txt # 字典文件
121+
├── httplib.h # HTTP库 (单头文件)
122+
├── include/ # Paddle-Lite 头文件
123+
├── lib/ # Paddle-Lite 预编译库
124+
├── CMakeLists.txt # 编译配置文件
125+
└── main.cpp # 主程序源代码```
126+
127+
## 致谢
128+
129+
* **PaddlePaddle & PaddleOCR团队**: 提供了业界领先、对开发者友好的OCR工具链。
130+
* **yhirose/cpp-httplib**: 让C++进行网络编程变得前所未有的简单。
131+
* **巴法云**: 为个人开发者和爱好者提供了稳定、免费的物联网平台。
Binary file not shown.
Binary file not shown.
1.21 MB
Binary file not shown.
Binary file not shown.
Binary file not shown.
166 KB
Binary file not shown.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[ZoneTransfer]
2+
ZoneId=3
3+
HostUrl=https://github.com/

0 commit comments

Comments
 (0)