0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于LockAI视觉识别模块:手写数字识别

福州市凌睿智捷电子有限公司 ? 2025-06-30 15:44 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

手写数字识别是一种经典的模式识别和图像处理问题,旨在通过计算机自动识别用户手写的数字。

本文将教会你如何使用基于RV1106的 LockAI视觉识别模块进行手写数字识别。

源代码:https://gitee.com/LockzhinerAI/LockzhinerVisionModule/tree/master/Cpp_example/D02_DigitHandRecog

1. 基本知识讲解

1.1 手写数字识别简介

手写数字识别是一种利用计算机视觉机器学习技术自动识别手写数字的过程。它通过图像预处理、特征提取和模型训练来实现高效准确的数字识别。被广泛应用于银行支票处理、邮政编码识别及考试评分等场景。这项技术不仅提高了数据处理的速度和准确性,还极大地简化了输入流程,为金融、邮政和教育等行业带来了显著的便利。

1.2 手写数字识别常用方法

目前,实现手写数字识别方法有很多,常用的方法如下:

卷积神经网络(CNN):最流行的方法之一,能够自动从图像中学习特征。适用于复杂背景和不同书写风格的手写数字识别。

支持向量机(SVM):一种传统的机器学习方法,通过提取图像的特征(如HOG特征)进行分类,适合处理较为规范的手写数字。

K近邻算法(KNN):基于相似度的分类方法,通过比较待识别数字与训练样本的距离来进行分类,简单但计算成本较高。


2. C++ API文档

2.1 PaddleClas类

2.1.1 头文件

#include

作用:用于声明PaddleClas类,使得PaddleClas类可以在当前源文件中使用。

2.1.2 构造类函数

lockzhiner_vision_module::PaddleClasmodel;

作用:用于实现手写数字识别。

参数说明:

返回值:

2.1.3 Predict函数

autoresult=model.Predict(input_mat);

作用:PaddleClas类中的一个函数,用于实现手写数字识别。

参数说明:

input_mat:要识别的图像。

返回值:

返回一个包含手写数字分类结果的对象。该Result对象包含预测得分(score)和对应的标签ID(label_id),即识别出的手写数字。

2.2 Visualize函数

2.2.1 头文件

#include

作用:用于声明Visualize函数,使得Visualize函数可以在当前源文件中使用。

2.2.2 结果可视化

lockzhiner_vision_module::Visualize(input_mat,output_image,result);

参数说明:

input_mat:表示原始输入图像。

output_image:用于存储带有可视化结果的输出图像。

result:输入参数,表示手写数字识别的结果。该Result对象包含预测得分(score)和对应的标签ID(label_id)。

返回值:


3. 综合代码解析

3.1 流程图

17af7118-5586-11f0-986f-92fbcf53809c.png


3.2 核心代码解析

初始化分类模型

lockzhiner_vision_module::PaddleClasmodel;

自定义函数参数如下

图片手写数字识别

intTestImage(conststd::string&image_path)

参数说明:

image_path:输入参数,表示包含手写数字的图像文件路径。

返回值:

返回0表示成功执行,并保存执行结果为"cls_result.png"。

摄像头实时手写数字识别

intTestCapture()

参数说明:

返回值:

返回0表示执行成功,并将检测结果绘制在原始图像上。程序会持续从摄像头读取帧并进行处理,直到手动终止程序。

3.3 完整代码实现

#include#include#include#include#include#include#include#includeusingnamespacestd::chrono;lockzhiner_vision_module::PaddleClas model;intTestCapture(){ // 初始化 edit 模块 lockzhiner_vision_module::Edit edit; if(!edit.StartAndAcceptConnection()) { std::cerr <> input_mat; if(input_mat.empty()) { continue; } // 使用 model 对象的 Predict 方法对输入图像进行预测 autoresult = model.Predict(input_mat); // 获取当前时间点作为结束时间 high_resolution_clock::time_point end_time = high_resolution_clock::now(); autotime_span =duration_cast(end_time - start_time); time_ms += time_span.count(); read_index +=1; std::cout <

4. 编译调试

4.1 编译环境搭建

请确保你已经按照开发环境搭建指南正确配置了开发环境。

同时已经正确连接开发板。

4.2 Cmake介绍

cmake_minimum_required(VERSION3.10)project(test_DigitHandRecog)set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIRED ON)# 定义项目根目录路径set(PROJECT_ROOT_PATH"${CMAKE_CURRENT_SOURCE_DIR}/../..")message("PROJECT_ROOT_PATH = "${PROJECT_ROOT_PATH})include("${PROJECT_ROOT_PATH}/toolchains/arm-rockchip830-linux-uclibcgnueabihf.toolchain.cmake")# 定义 OpenCV SDK 路径set(OpenCV_ROOT_PATH"${PROJECT_ROOT_PATH}/third_party/opencv-mobile-4.10.0-lockzhiner-vision-module")set(OpenCV_DIR"${OpenCV_ROOT_PATH}/lib/cmake/opencv4")find_package(OpenCV REQUIRED)set(OPENCV_LIBRARIES"${OpenCV_LIBS}")# 定义 LockzhinerVisionModule SDK 路径set(LockzhinerVisionModule_ROOT_PATH"${PROJECT_ROOT_PATH}/third_party/lockzhiner_vision_module_sdk")set(LockzhinerVisionModule_DIR"${LockzhinerVisionModule_ROOT_PATH}/lib/cmake/lockzhiner_vision_module")find_package(LockzhinerVisionModule REQUIRED)add_executable(Test-DigitHandRecogDigitHandRecog.cc)target_include_directories(Test-DigitHandRecogPRIVATE${LOCKZHINER_VISION_MODULE_INCLUDE_DIRS})target_link_libraries(Test-DigitHandRecogPRIVATE${OPENCV_LIBRARIES}${LOCKZHINER_VISION_MODULE_LIBRARIES})install( TARGETSTest-DigitHandRecog RUNTIME DESTINATION . )


4.3 编译项目

使用 Docker Destop 打开 LockzhinerVisionModule 容器并执行以下命令来编译项目

# 进入Demo所在目录cd/LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule/Cpp_example/D02_DigitHandRecog# 创建编译目录rm-rf build &&mkdirbuild &&cdbuild# 配置交叉编译工具链exportTOOLCHAIN_ROOT_PATH="/LockzhinerVisionModuleWorkSpace/arm-rockchip830-linux-uclibcgnueabihf"# 使用cmake配置项目cmake ..# 执行编译项目make -j8 && make install

在执行完上述命令后,会在build目录下生成可执行文件。


5. 例程运行示例

5.1 运行前准备

请确保你已经下载了凌智视觉模块手写数字分类模型

5.2 运行过程

在凌智视觉模块输入以下命令:

chmod777Test-DigitHandRecog# 调用摄像头实时识别./Test-DigitHandRecogLZ-DigitHandRecog.rknn Capture# 单张图像识别./Test-DigitHandRecogLZ-DigitHandRecog.rknn image_path

5.3 运行效果

图像识别效果图

  • 17c1d876-5586-11f0-986f-92fbcf53809c.png


  • 摄像头实时识别效果图

17f3cb88-5586-11f0-986f-92fbcf53809c.png

6. 总结

通过上述内容,我们成功的实现了一个手写数字识别系统,包括:

获取并加载包含手写数字的图像。

进行手写数字的检测和分类,返回检测和分类后的结果。

可视化包含手写数字图像的识别结果。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    88

    文章

    35476

    浏览量

    281297
  • 视觉识别
    +关注

    关注

    3

    文章

    109

    浏览量

    17101
  • 数字识别
    +关注

    关注

    2

    文章

    21

    浏览量

    10257
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于LockAI视觉识别模块:C++条码识别

    条码识别视觉模块经常使用到的功能之一,经常用于识别超市的货物信息。本文我们将演示如何基于瑞芯微RV1106的LockAI
    发表于 05-27 10:26

    基于LockAI视觉识别模块手写数字识别

    手写数字识别是一种经典的模式识别和图像处理问题,旨在通过计算机自动识别用户手写
    发表于 06-30 16:45

    基于LockAI视觉识别模块:C++人脸识别

    本文基于RV1106做成的LockAI视觉识别模块,采用 LZ-Picodet 模型训练的人脸检测模型 LZ-Face,以及ArcFace人脸识别
    发表于 07-01 12:01

    基于分数本征特征的手写数字识别

    特征提取是手写数字识别研究中的重要问题,有效、稳定的特征是提高识别率和识别精度的关键。该文提出了一种基于分数本征特征和核非线性分类器的
    发表于 05-24 11:42 ?13次下载

    基于分数本征特征的手写数字识别

    特征提取是手写数字识别研究中的重要问题,有效、稳定的特征是提高识别率和识别精度的关键。该文提出了一种基于分数本征特征和核非线性分类器的
    发表于 10-28 17:05 ?0次下载

    基于MNIST的手写数字识别系统

    手写数字识别是图像识别学科下的一个分支,是图像处理和模式识别领域研究的课题之一,由于其具有很强的实用性一直是多年来的研究热点。由于
    发表于 09-13 14:12 ?8次下载
    基于MNIST的<b class='flag-5'>手写</b><b class='flag-5'>数字</b><b class='flag-5'>识别</b>系统

    Pytorch实现MNIST手写数字识别

    Pytorch 实现MNIST手写数字识别
    发表于 06-16 14:47 ?7次下载

    ATKNCR数字字母手写识别

    ATKNCR数字字母手写识别库分享
    发表于 09-28 11:22 ?0次下载

    基于LockAI视觉识别模块:C++图像采集例程

    本文主要演示如何使用LockAI视觉识别模块进行视频流的读取,同时使用Edit模块进行图像传输。基础知识讲解1.1OpenCV简介OpenC
    的头像 发表于 04-30 18:23 ?281次阅读
    基于<b class='flag-5'>LockAI</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>:C++图像采集例程

    基于LockAI视觉识别模块:C++图像的基本运算

    在图像处理中,理解图像的基本操作是掌握计算机视觉技术的关键。本文章将介绍基于LockAI视觉识别模块下OpenCV中图像的基本运算方法,包括
    的头像 发表于 05-06 16:20 ?266次阅读
    基于<b class='flag-5'>LockAI</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>:C++图像的基本运算

    基于LockAI视觉识别模块:C++使用图像的统计信息

    在图像处理中,统计信息可以帮助我们了解图像的特性,例如区域内的像素分布、颜色转换以及特定区域的分析。本文将介绍基于LockAI视觉识别模块如何提取兴趣区域(ROI)、转换颜色通道、计算
    的头像 发表于 05-08 10:09 ?276次阅读
    基于<b class='flag-5'>LockAI</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>:C++使用图像的统计信息

    基于LockAI视觉识别模块:C++二维码识别

    二维码识别视觉模块经常使用到的功能之一。我们将演示如何使用基于瑞芯微RV1106的LockAI视觉识别
    的头像 发表于 05-26 09:42 ?324次阅读
    基于<b class='flag-5'>LockAI</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>:C++二维码<b class='flag-5'>识别</b>

    基于LockAI视觉识别模块:C++条码识别

    条码识别视觉模块经常使用到的功能之一,经常用于识别超市的货物信息。本文我们将演示如何基于瑞芯微RV1106的LockAI
    的头像 发表于 05-27 09:32 ?200次阅读
    基于<b class='flag-5'>LockAI</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>:C++条码<b class='flag-5'>识别</b>

    基于LockAI视觉识别模块:C++目标检测

    本文档基于瑞芯微RV1106的LockAI凌智视觉识别模块,通过C++语言做的目标检测实验。本文档展示了如何使用lockzhiner_vision_module::PaddleDet类
    的头像 发表于 06-06 13:56 ?251次阅读
    基于<b class='flag-5'>LockAI</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>:C++目标检测

    基于LockAI视觉识别模块:C++人脸识别

    本文基于RV1106做成的LockAI视觉识别模块,采用LZ-Picodet模型训练的人脸检测模型LZ-Face,以及ArcFace人脸识别
    的头像 发表于 07-01 10:09 ?192次阅读
    基于<b class='flag-5'>LockAI</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>:C++人脸<b class='flag-5'>识别</b>