#AI挑战营终点站# 使用luckfox RV1106实时识别手写数字-补充部分
[复制链接]
本帖最后由 空耳- 于 2024-6-6 08:33 编辑
主要内容分析
1.数字框选部分
// 预处理图像
cv::Mat gray, blurred, edged;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(gray, blurred, cv::Size(5, 5), 0);
cv::Canny(blurred, edged, 30, 150);
// 应用形态学操作
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::dilate(edged, edged, kernel);
cv::erode(edged, edged, kernel);
// 查找轮廓,声明一个变量来存储轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(edged, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
if (contours.empty()) {
return cv::Rect();
}
// 找到最大的轮廓
auto largest_contour = std::max_element(contours.begin(), contours.end(),
[](const std::vector<cv::Point>& a, const std::vector<cv::Point>& b) {
return cv::contourArea(a) < cv::contourArea(b);
});
cv::Rect bounding_box = cv::boundingRect(*largest_contour);
通常该部分的处理是影响识别准确度的重要因素。
2.程序整体流程
3.主要的几个API函数
注:以上图片均来自(RKNN模型部署——RKNN零拷贝API开发板落地部署RKNN模型(附代码 详细图文教程)_rknn开发-CSDN博客)
手写数字识别视频
aebaba7194d3a2f9db410b1d5d0c0a0a
总结
推理速度还行,但是截取数字时,随着角度,光线的不同,框选会出问题导致识别出错。后续打算优化数字截取框算法提高识别精度。
目前该程序只能识别一个数字,后续会加入多线程,同时识别多个数字
|