购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

人工智能正引领产业发展的新一轮技术革命,成为国家产业发展的战略控制点,对经济发展、社会进步和人类生活产生了深远影响。许多国家在战略层面对其予以高度重视,相关科研机构大量涌现,各大科技“巨头”大力布局,新兴企业迅速崛起,人工智能技术开始广泛应用于各行各业,展现出可观的商业价值和巨大的发展潜力。

近几年,国家对人工智能产业的重视达到空前的高度,不断加强对人工智能技术的研发和应用,陆续出台了一系列关于人工智能发展的政策和措施。我国对人工智能的重视主要体现为以下几点。

将人工智能技术作为国家战略发展的重要技术,发布了《新一代人工智能发展规划》,明确了人工智能的发展目标和路线。

加大对人工智能研发的投入,鼓励各行业、企业研发和应用人工智能技术,推动人工智能与实体经济深度融合等。

将人工智能作为重点发展的产业之一,鼓励各行业、企业在人工智能领域进行投资和创新。政府支持人工智能产业的发展,推动人工智能技术在教育、金融、医疗、交通等领域的应用。

重视人才培养,鼓励高校和科研机构加强人工智能领域的教育与研究。鼓励企业加强人才培养和引进,提高其在人工智能领域的专业技能和创新能力。

《促进新一代人工智能产业发展三年行动计划(2018—2020年)》强调,要形成安全可信、自主可控的基础软硬件技术生态,布局若干人工智能算力中心,形成广域协同的智能计算平台,从而提供普惠算力和服务支撑。国家发展改革委等部门印发的《关于促进电子产品消费的若干措施》提到,鼓励科研院所和市场主体积极应用国产人工智能(AI)技术提升电子产品智能化水平,增强人机交互便利性。各级地方政府也在大力推动人工智能国产化自主可控技术的实现,如《北京市加快建设具有全球影响力的人工智能创新策源地实施方案(2023—2025年)》提到,要推动一批国产替代,技术攻坚取得新突破。

人工智能算力布局初步形成,国产CPU处理器芯片、人工智能芯片和深度学习框架等基础软硬件产品的市场占比显著提升,算力、芯片等基本实现自主可控,全面兼容主流深度学习框架。人工智能算力资源并网互联,推动基础软硬件实现高质量自主可控。我国关于人工智能国产化的政策主要体现在以下几方面。

支持研发创新:鼓励企业、高校、科研机构等开展人工智能技术的研发和创新,提升国产化人工智能技术的水平和能力。

培育优质企业:支持培育具有自主知识产权的人工智能企业,鼓励企业完善产业生态,提升市场竞争力。

推进应用落地:鼓励企业和机构在各个领域推进人工智能应用落地,提升国产化人工智能产品的质量,增加其市场份额。

加强人才培养:加强人工智能领域人才的培养和引进,为国产化人工智能技术的发展提供人才保障。

加强安全保障:加强人工智能技术的安全保障,确保国产化人工智能产品和服务安全可靠。

龙芯中科技术股份有限公司(简称龙芯)一直以开放的态度面对人工智能技术的发展,积极投入人工智能深度学习平台的建设,围绕LoongArch自主指令集架构,从基础软硬件到算法及框架,再到最终的产品应用,形成了完整的人工智能技术栈,构建了多层的人工智能软件生态体系和全域异构硬件支撑体系,打造出自主可控的国产化龙芯智能计算平台,以满足人工智能在计算机视觉、自然语言处理、语音识别、智能交互、推荐算法、多模态交互等领域的应用场景需求。

在人工智能产业发展十分重要以及我国对自主可控技术的需求十分迫切的环境下,发展基于国产自主可控平台的人工智能技术势在必行。本书介绍计算机视觉技术的基本原理,并结合国产自主可控龙芯处理器阐述具体实践,让读者能够基于国产自主可控龙芯平台进行具体工程实践。

彭飞
2024年4月 pqVqWcOfD36a94n7yl8l7/cPePJDZiMNSgHfQQCaxdXY7llrLjKsjMH7NZm0t+U9



项目1
OpenCV基础功能实战

本项目介绍OpenCV的主要模块,以及如何基于龙芯平台的OpenCV的基础功能完成相关任务。该项目的主要目标是帮助开发者熟悉并掌握OpenCV库的基本功能和使用方法,通过基于龙芯平台的实践应用,加深对计算机视觉领域的理解。 3yxWJMBq7bbqmZKYQMyZDtuujy7XO2v+0bogWuMTvHWNvcyD1DAdoia3LQ+QlUdL



1.1 知识引入

1.1.1 OpenCV简介

OpenCV是一种开源的计算机视觉库(Computer Vision Library,CVL),一直被广泛使用。OpenCV底层由C/C++语言实现,其上层提供了Python、Java、JavaScript、Ruby、MATLAB等语言的接口,可以实现多平台无缝兼容。OpenCV拥有超过2500种优化算法,包括一套全面的、经典的和先进的计算机视觉(Computer Vision,CV)和机器学习(Machine Learning,ML)算法,这些算法涉及图像识别和目标检测(object detection)等方面。目前,主要由来自微软、IBM、西门子、谷歌、英特尔、斯坦福大学、麻省理工学院、卡耐基-梅隆大学、剑桥大学等公司或大学的研究人员共同维护和支持OpenCV的开源库开发。

OpenCV包含稳定的主仓库,以及具有实验性质的或需为专利付费的opencv_contrib仓库。OpenCV模块中的硬件加速层提供了针对不同CPU和GPU的优化加速,以及不同的软件/硬件加速库。OpenCV不仅为不同的操作系统提供了视频I/O、文件I/O和用户界面(User Interface,UI),还提供了详细的用户指导手册以及大量的单元测试和例程。

1.1.2 OpenCV的主要模块

OpenCV提供了许多强大的图像和视频处理功能。其主要模块如下。

core模块 。该模块为核心模块,包含基础数据结构、动态数据结构、算法(线性代数、快速傅里叶变换等相关算法)、绘图函数、XML/YAML文件I/O、系统函数和宏等。

imgcodecs模块 。该模块为图像编解码模块,用于读取、写入图像并对各种格式的图像进行编解码处理,包括JPEG、PNG、BMP等格式的图像。

imgproc模块 。该模块为图像处理模块,主要用于进行滤波操作、形态学处理、几何变换、色彩空间转换、直方图计算、结构形状分析、运动分析、特征检测、目标检测等。

highgui模块 。该模块为高级用户交互模块,包含图形用户界面(Graphics User Interface,GUI)、图像和视频I/O,提供了窗口操作功能,如创建显示图像或者视频的窗口、通过命令窗口响应键盘和鼠标事件、操作窗口中图像的某个区域等。

features2d模块 。该模块为二维特征检测与描述模块,主要用于图像特征检测、描述、匹配等。利用该模块可以从二维图像中检测和提取对象的特征。

calib3d模块 。该模块为三维重建模块,提供了三维重建功能,可根据二维图像创建三维场景。它主要用于完成相机标定、立体视觉模拟、姿态估计和三维物体重建等任务。

video模块 。该模块为视频模块,提供了光流法、运动模板、背景分离、目标跟踪等视频处理技术,以及视频分析(video analysis)功能,如分析视频中连续帧的运动、跟踪视频中的目标。该模块还提供了视频稳定处理功能,可解决拍摄视频时的抖动问题等。

gapi模块 。该模块为图形加速模块,可对图像算法做加速处理,主要用于图像和视频数据的高性能处理和计算,提供简化编程模型和优化图像处理的算法。

objdetect模块 。该模块为目标检测模块,不仅提供了目标检测功能,还提供了常见的目标检测算法和预训练的目标检测模型。

ml模块 。该模块为机器学习模块,提供了机器学习功能,包含常见的统计模型和分类算法等机器学习算法,如 k 近邻( k -Nearest Neighbors, k NN)、 k 均值聚类( k -Means Clustering)、支持向量机(Support Vector Machine,SVM)、神经网络(neural network)等。

dnn模块 。该模块为深度神经网络(Deep Neural Network,DNN)模块,提供了深度学习功能,支持Caffe、TensorFlow、PyTorch、DarkNet等主流的深度学习框架,用于加载和运行深度学习模型,从而可以进行图像分类(image classification)、目标检测、语义分割(semantic segmentation)等操作。

ts模块 。该模块为测试模块,主要包含OpenCV的单元测试和功能测试框架,用于验证OpenCV相关库的正确性和稳定性。

OpenCV还提供了许多其他模块,可以用于图像拼接、图像分割(image segmentation)、目标识别等。用户可以根据自己的需求组合使用这些模块,以完成特定的计算机视觉任务。

1.1.3 OpenCV的版本

1999年,加里·布拉德斯基(Gary Bradski)在英特尔公司创建了计算机视觉库项目。该项目旨在提供通用的计算机视觉接口,并以开源的方式发布。

本节介绍OpenCV的版本演进。

1.OpenCV 1.x

OpenCV 1.x是最早的版本,这个版本提供了许多基本的图像处理功能和算法。OpenCV 1.x主要关注实时计算机视觉,并且强调图像处理的速度和准确性。OpenCV 1.x提供了多种图像处理和分析方法,包括滤波、边缘检测、形态学处理、测量分析等;支持多种格式的图像的读取、保存和显示,包括常见的BMP、JPEG、PNG等格式的图像;提供了多种图像变换和特征提取方法,如直方图均衡化、色彩空间转换、边缘检测等;支持多种窗口操作,如滑动窗口、固定窗口等,方便进行图像分析和检测等。

2.OpenCV 2.x

OpenCV 2.x是基于C++的版本,比OpenCV 1.x易用,具有更好的封装和自动内存管理功能。在OpenCV 2.x中,所有类和函数都包含在命名空间“cv”中。与OpenCV 1.x相比,OpenCV 2.x更加灵活和强大,具有更多的特性和算法。在OpenCV 2.x中,可以基于面向对象的思想使用各种函数库,使代码更加清晰和易于维护。

另外,OpenCV 2.x中增加了许多新的功能和算法,如视频分析、3D重建、机器学习等领域的功能和算法。OpenCV 2.x还支持多种语言接口,包括Python、Java和MATLAB等语言的接口。

3.OpenCV 3.x

OpenCV 3.x在OpenCV 2.x的基础上进行改进和扩展,具有更多的新特性和算法。OpenCV 3.x进一步加强了面向对象的编程思想,使代码更加简洁、易读和易于维护。OpenCV 3.x中增加了一些新的功能,例如深度学习、全景拼接、立体视觉等。此外,OpenCV 3.x还加强了与其他计算机视觉库(如Halcon、Media SDK等)的集成和互操作性。

4.OpenCV 4.x

OpenCV 4.x在OpenCV 3.x的基础上进行了改进和扩展,如OpenCV 4.x中添加了新的模块G-API,它可以作为基于图形的图像处理管线(pipeline)的引擎;OpenCV 4.x的dnn模块支持ONNX(Open Neural Network Exchange,开放神经网络交换)格式的网络;OpenCV 4.x将二维码检测器和解码器添加到objdetect模块中,并将稠密逆搜索(Dense Inverse Search,DIS)光流算法从opencv_contrib转移到video模块。

相对于OpenCV 3.x,OpenCV 4.x增加了很多新的功能和算法,如神经风格迁移、目标检测和跟踪等。OpenCV 4.x还加强了代码的优化和重构,提高了代码的执行效率。

1.1.4 OpenCV-Python

OpenCV-Python是由原始OpenCV C++实现的Python包装器,是OpenCV库的Python接口。

Python是一种面向对象的、解释型的计算机高级程序设计语言。Python 凭借语法简洁、易于学习、功能强大、可扩展性强、跨平台等特点,成为继Java和C语言之后的又一热门程序设计语言。它的简单性和代码可读性使程序员能够用更少的代码实现功能。

但与C/C++相比,Python的执行速度较慢。Python可以使用C/C++轻松扩展,使用户可以使用C/C++编写计算密集型代码,并使用Python进行封装。使用OpenCV-Python主要有两大好处:第一,代码运行速度与原始C/C++代码的一样快,因为它在后台运行的实际是C++代码;第二,用Python编写代码比用C/C+容易。

OpenCV-Python需要使用NumPy库,OpenCV在程序中使用NumPy数组存储图像数据。

1.1.5 龙芯平台和OpenCV

龙芯平台支持OpenCV,当前OpenCV开源社区已经支持LoongArch自主指令集架构(龙架构)。基于龙芯平台,用户可以编写程序、调用OpenCV接口来实现具体功能,如图像与视频I/O、二值图像分析与处理、颜色空间转换、视频对象分析与跟踪、边缘轮廓检测与提取、图像特征提取与匹配、深度学习模型推理等。

龙芯平台操作系统源中已经集成了OpenCV的相关软件包,用户只需要通过终端系统即可完成OpenCV的安装。如在Loongnix 20系统上,直接通过以下命令即可安装OpenCV。 3yxWJMBq7bbqmZKYQMyZDtuujy7XO2v+0bogWuMTvHWNvcyD1DAdoia3LQ+QlUdL

sudo apt-get install libopencv-dev python3-opencv
点击中间区域
呼出菜单
上一章
目录
下一章
×