news 2026/4/15 13:43:16

CANN Samples(十九):特色场景:机器人 AI 绘画 手写识别等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN Samples(十九):特色场景:机器人 AI 绘画 手写识别等

1. 当AI不止于识别:探索CANN的趣味应用

在我们之前的文章中,我们聊了许多关于图像分类、目标检测的话题,这些都是AI在“看懂”世界方面的应用。但AI的魅力远不止于此。当它与物理世界互动,会诞生出机器人;当它被赋予创造力,可以成为艺术家;当它学会理解人类的笔迹,便能打破数字世界与物理书写的隔阂。

cplusplus/contrib目录就是这样一个充满想象力的“创客空间”。这里的案例不再局限于传统的视觉任务,而是将CANN的能力延伸到了机器人控制、艺术生成、人机交互等多个特色领域。它们就像一个个开箱即用的“AI玩具”,不仅好玩,而且背后蕴含着深刻的技术思想。

这篇文章,我们将一起探索Ascbot(机器人)、AI_painting(AI绘画)和HandWrite(手写识别)这三个明星项目,看看CANN是如何为这些酷炫的应用注入智能的灵魂。

1.1.Ascbot:让机器人拥有“眼”和“脑”

机器人技术的核心,是“感知-决策-行动”的闭环。Ascbot案例就是这个闭环在昇腾平台上的一个完美实现。它是一个可以自主巡线、识别并避开障碍物、甚至能跟随特定目标的智能小车。

该案例位于cplusplus/contrib/Ascbot

1.1.1. 机器人的“神经系统”

Ascbot的代码结构,就像一个机器人的“神经系统”,清晰地划分了各个功能模块:

/cplusplus/contrib/Ascbot/ ├── inc/ // 头文件 │ ├── camera.h // 摄像头,机器人的“眼睛” │ ├── model_process.h // 模型处理,机器人的“大脑” │ ├── wheel.h // 轮子控制,机器人的“腿” │ ├── oled.h // OLED屏幕,用于显示状态 │ └── ... ├── src/ // 源文件 │ ├── main.cpp // 主程序,中枢神经 │ ├── camera.cpp │ ├── model_process.cpp │ ├── wheel.cpp │ └── ... ├── model/ // 存放转换好的OM模型 └── CMakeLists.txt

这个结构体现了典型的嵌入式系统和机器人应用的设计思想:

  • 硬件抽象camera.h,wheel.h,oled.h等文件将底层硬件操作封装成简洁的接口。上层应用不需要关心I2C、UART等具体协议,只需调用如Wheel::Forward()这样的高级函数。
  • AI核心model_process.h负责加载和执行AI模型。这是机器人的“大脑”,负责从“眼睛”看到的图像中,理解出“前方是道路”、“左边有障碍物”等语义信息。
  • 主逻辑控制main.cpp是总指挥。它在一个循环中,不断地“获取图像 -> 大脑思考 -> 指挥腿脚行动”,完成了“感知-决策-行动”的完整闭环。

1.1.2. “感知-决策-行动”的实现

让我们深入main.cpp的简化逻辑,看看这个闭环是如何运转的:

// 位于 src/main.cpp (简化逻辑)intmain(){// 1. 初始化:初始化摄像头、AI模型、轮子等所有模块Camera camera;ModelProcessmodelProcessor("./model/road_detect.om");Wheel wheel;// 2. 进入主循环while(true){// 2.1. 感知 (Perception)// 从摄像头获取一帧图像ImageData image=camera.GetFrame();// 2.2. 决策 (Decision)// 将图像送入AI模型进行推理,得到决策结果// 比如,模型输出一个角度,告诉轮子应该向左还是向右偏floatangle=modelProcessor.Predict(image);// 2.3. 行动 (Action)// 根据决策结果,控制轮子转动wheel.SetAngle(angle);}return0;}

这段代码虽然简单,但它精准地概括了几乎所有智能机器人的核心工作流。CANN和AscendCL在其中的ModelProcess::Predict环节扮演了关键角色,它为机器人提供了快速、低功耗的“思考”能力,让实时决策成为可能。

Ascbot案例告诉我们,AI不仅仅能“看”,更能基于“看”的结果去“做”。

1.2.AI_painting:当代码遇见梵高

如果说Ascbot是逻辑与控制的体现,那么AI_painting则完全是创造力与想象力的舞台。这个案例让你能像玩滤镜一样,将一张普通的风景照,一键转换成梵高、莫奈等大师风格的艺术画作。

该案例位于cplusplus/contrib/AI_painting

1.2.1. 风格迁移的魔法

这个案例的核心技术是“神经网络风格迁移”(Neural Style Transfer)。它的原理可以通俗地理解为:

  1. 内容提取:AI模型(通常是卷积神经网络,如VGG)能从一张图片中提取出“内容特征”,比如房子的轮廓、树的形状。
  2. 风格提取:同时,模型也能从另一张画作(如梵高的《星空》)中提取出“风格特征”,比如笔触、色彩搭配。
  3. 特征融合:算法的目标是生成一张新的图片,它既保留了原始图片的内容,又拥有了风格画作的风格。

AI_painting案例将这个复杂的过程封装成了一个易于使用的应用。

1.2.2. 前后端分离的Web应用

Ascbot不同,AI_painting是一个典型的Web应用,采用了前后端分离的架构。

  • 前端 (presenterserver/ui/): 使用HTML, CSS, JavaScript构建了一个漂亮的网页。用户可以在网页上上传自己的照片,选择想要的艺术风格。
  • 后端 (src/,presenterserver/中的Python部分):
    • Web服务器(如display_server.py)接收前端发来的请求(图片和风格选项)。
    • 它将请求转发给C++编写的核心推理程序。
    • C++程序调用AscendCL,加载并执行风格迁移的.om模型,生成艺术图片。
    • 最后,将生成的结果返回给前端网页进行展示。

这种架构在AI应用中非常普遍,它让专业的AI算法工程师可以专注于C++后端的高性能实现,而前端开发者则可以专注于用户体验的打磨。

在这个案例中,CANN的价值在于加速了风格迁移这个计算密集型任务。实时的风格转换对计算量要求很高,如果用CPU处理,可能需要几十秒甚至几分钟才能生成一张图片,这对于一个交互式应用是不可接受的。而利用昇腾硬件的强大算力,可以将这个过程缩短到几秒甚至毫秒级。

1.3.HandWrite:让机器读懂你的笔锋

手写识别是人机交互领域的一个经典问题。HandWrite案例就为我们展示了如何利用CANN,实现一个能识别摄像头拍摄的手写文字的应用。

该案例位于cplusplus/contrib/HandWrite

1.3.1. 从像素到文字的旅程

手写识别通常包含两个主要步骤:

  1. 文本检测:首先,需要从输入的图片中找到哪里有文字。这一步通常使用一个目标检测模型(如EAST, DBNet)来框出文本区域。
  2. 文本识别:然后,对每一个框出的文本区域,使用另一个识别模型(如CRNN)来将其转换成真正的字符。

HandWrite案例将这两个模型串联起来,构成了一个完整的识别流水线(Pipeline)。

1.3.2. 模型串联与Presenter Server

HandWrite的实现与AI_painting有相似之处,它也使用了Presenter Server来进行结果的可视化展示。但它的核心逻辑在于模型的串联

// 简化逻辑// 1. 加载检测模型和识别模型ModelProcesstextDetector("./model/text_detection.om");ModelProcesstextRecognizer("./model/text_recognition.om");// 2. 获取图像ImageData image=camera.GetFrame();// 3. 第一阶段:文本检测// detectorResult 是一个包含了多个文本框坐标的列表autodetectorResult=textDetector.Predict(image);// 4. 第二阶段:文本识别std::vector<std::string>finalResults;for(auto&box:detectorResult.boxes){// 4.1. 从原图中裁剪出文本框区域ImageData croppedImage=CropImage(image,box);// 4.2. 对裁剪出的图像进行识别std::string text=textRecognizer.Predict(croppedImage);finalResults.push_back(text);}// 5. 将结果发送到Presenter Server进行展示PresenterChannel::SendResult(finalResults);

这个流程清晰地展示了如何将多个AI模型组合起来,解决一个更复杂的任务。CANN在这里的作用是确保这个流水线中的每一步(特别是模型推理)都能高效运行,从而实现实时的识别效果。

2. 总结:AI的乐趣在于创造

Ascbot,AI_painting,HandWrite……这些有趣的案例向我们证明,AI技术远非高冷和遥不可及。借助CANN这样强大的开发平台,每一个开发者都有机会成为“创客”,将自己的奇思妙想变为现实。

这些案例的共同点在于:

  • 始于一个有趣的想法:无论是让小车跑起来,还是让照片变成画,一个好的创意是项目的起点。
  • AI是核心驱动力:AI模型在其中扮演了“大脑”的角色,负责最核心的智能决策。
  • 工程实现是骨架:良好的软件架构、模块划分和硬件封装,是让创意落地的保障。

现在,你还在等什么呢?去cplusplus/contrib目录里找到你最感兴趣的那个项目,亲手把它跑起来,修改它,甚至创造一个属于你自己的全新应用。毕竟,学习AI最大的乐趣,就在于创造的过程本身。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 8:32:18

当下的网络安全行业前景到底怎么样?还能入行分蛋糕吗?

常听到很多人不知道学习网络安全能做什么&#xff0c;发展前景好吗&#xff1f;今天我就在这里给大家介绍一下。网络安全作为目前比较火的朝阳行业&#xff0c;人才缺口非常大 先说结论&#xff0c;目前网络安全的前景还是很不错的 作为一个有丰富 Web 安全攻防、渗透领域老工…

作者头像 李华
网站建设 2026/4/14 18:07:24

黑马消息队列-rabbitMQ2-生产者重连机制-生产者确认机制

消息的可靠性问题&#xff0c;保证状态一致性生产者的可靠性 生产者重连生产者连接失败的失败重试连接 生产者确认到达交换机后&#xff0c;路由失败&#xff0c;基本不会出现这种情况&#xff1b;到达交换机后&#xff0c;到达队列&#xff1b;到达交换机后&#xff0c;到达队…

作者头像 李华
网站建设 2026/4/11 14:21:52

AD学习笔记-33 丝印位号的调整

大家好&#xff0c;我们来介绍丝印位号。针对元件装配&#xff0c;一般需要得出PCB的装配图&#xff0c;用于元件定位。1、丝印调整原则和常规尺寸我们先按下l键&#xff0c;把所有层的显示去掉&#xff0c;然后把丝印层打开。在properties中把text打开&#xff0c;避免拖动其他…

作者头像 李华
网站建设 2026/4/9 19:45:32

CAN通讯协议

一、CAN物理层1、电气特性总线结构物理特征&#xff08;左&#xff1a;闭环&#xff1b;右&#xff1a;开环&#xff09;&#xff1a;​CAN总线由两根信号线组成&#xff0c;使用的是差分信号&#xff0c;是一种异步通讯CAN总线网络的结构有闭环和开环两种&#xff0c;其对应标…

作者头像 李华