OCR:ROS车牌识别:Ubuntu20.04实战指南buntu20.04实战指南
在Ubuntu 20.04上安装ROS Noetic,确保系统已配置ROS环境。
·
安装依赖
在Ubuntu 20.04上安装ROS Noetic,确保系统已配置ROS环境。安装OpenCV和Tesseract OCR库:
sudo apt-get update
sudo apt-get install ros-noetic-cv-bridge ros-noetic-image-transport ros-noetic-tesseract-ocr tesseract-ocr-eng libtesseract-dev
创建ROS包
创建一个名为license_plate_ocr的ROS包:
cd ~/catkin_ws/src
catkin_create_pkg license_plate_ocr roscpp std_msgs cv_bridge image_transport
cd ~/catkin_ws && catkin_make
编写OCR识别节点
在license_plate_ocr/src目录下创建ocr_node.cpp文件,内容如下:
#include <ros/ros.h>
#include <cv_bridge/cv_bridge.h>
#include <image_transport/image_transport.h>
#include <opencv2/opencv.hpp>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
void imageCallback(const sensor_msgs::ImageConstPtr& msg) {
cv_bridge::CvImagePtr cv_ptr;
try {
cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
} catch (cv_bridge::Exception& e) {
ROS_ERROR("cv_bridge exception: %s", e.what());
return;
}
cv::Mat gray;
cv::cvtColor(cv_ptr->image, gray, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(gray, gray, cv::Size(3, 3), 0);
cv::threshold(gray, gray, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
tesseract::TessBaseAPI ocr;
ocr.Init(NULL, "eng", tesseract::OEM_LSTM_ONLY);
ocr.SetPageSegMode(tesseract::PSM_AUTO);
ocr.SetImage(gray.data, gray.cols, gray.rows, 1, gray.step);
char* text = ocr.GetUTF8Text();
std::string plate_text(text);
if (!plate_text.empty()) {
ROS_INFO("Detected License Plate: %s", plate_text.c_str());
} else {
ROS_WARN("No license plate detected.");
}
delete[] text;
}
int main(int argc, char** argv) {
ros::init(argc, argv, "license_plate_ocr");
ros::NodeHandle nh;
image_transport::ImageTransport it(nh);
image_transport::Subscriber sub = it.subscribe("/camera/image_raw", 1, imageCallback);
ros::spin();
return 0;
}
修改CMakeLists.txt
在license_plate_ocr包的CMakeLists.txt中添加以下内容:
find_package(OpenCV REQUIRED)
find_package(Tesseract REQUIRED)
add_executable(ocr_node src/ocr_node.cpp)
target_link_libraries(ocr_node ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${Tesseract_LIBRARIES})
编译并运行
编译ROS包并运行节点:
cd ~/catkin_ws && catkin_make
source devel/setup.bash
rosrun license_plate_ocr ocr_node
测试数据
使用image_publisher发布测试图像:
rosrun image_publisher image_publisher_node /path/to/license_plate_image.jpg
输出结果
终端将打印识别到的车牌号,格式如下:
[INFO] [WallTime: 123456789.0] Detected License Plate: ABC123
常见误操作场景分类
-
提交相关错误
- 提交了错误的文件或内容
- 提交信息写错需修改
- 漏提交文件需补充
-
分支操作错误
- 误删分支
- 错误合并或变基导致冲突
- 分支切换错误
-
历史记录操作错误
- 误用
git reset导致提交丢失 - 误用
git rebase破坏提交历史
- 误用
-
远程仓库操作错误
- 误强制推送覆盖远程提交
- 误删远程分支或标签
急救方法与命令
撤销未推送的本地提交
- 修改最后一次提交:
git commit --amend - 回退到指定提交(保留更改):
git reset --soft <commit-hash> - 彻底丢弃提交(慎用):
git reset --hard <commit-hash>
恢复误删的分支
- 通过
reflog找回分支指针:git reflog git checkout -b <branch-name> <commit-hash>
修复错误合并/变基
- 终止合并并还原:
git merge --abort git rebase --abort - 手动解决冲突后继续:
git add <resolved-file> git rebase --continue
恢复远程仓库覆盖
- 从本地
reflog找回历史提交并强制推送:git push origin <branch-name> --force
更多推荐
所有评论(0)