使用MindStudio进行基于双目视觉的目标定位

       对应的视频教程,可参考:【使用MindStudio进行基于双目视觉的目标定位】

一、基于双目视觉的目标定位介绍

       基于计算机视觉的目标定位有单目视觉和双目视觉两种定位方式。单目视觉使用一台相机获取场景图像。由于图像透视投影过程丢失深度信息,因此单目视觉深度恢复得到物体的相对位置。双目视觉感知原理基于哺乳动物视觉机制,获取物体在左右两个相机的图像,并从获取图像恢复物体的三维几何信息。双目视觉从场景获取一组图像,利用这组图像标定相机参数,恢复物体三维几何信息。双目视觉的通用流程是特征点提取、特征点匹配、相机标定、三维重建等处理过程,恢复场景物体的三维几何信息,实现从二维图像重建三维场景。

       本案例输入的是用自制双目相机同时获取场景物体的图像,案例介绍利用MindX SDK对两幅图像进行相机标定、图像畸变矫正、视差求解、用MindX SDK模型检测目标、计算相物体的三维坐标。项目所用硬件平台:Ascend 310服务器,Atlas 200DK板卡,支持的SDK版本为mxVision 3.0.RC3。

       双目视觉目标定位流程,如图1-1所示。

图1-1 双目视觉目标定位流程

       双目视觉目标定位流程主要步骤如下:

       (1)输入一组图像数据标定相机参数,标定的参数包括内参和外参。

       (2)利用标定的相机参数,用OpenCV函数stereoRectify和remap进行图像校正处理。

       (3)调用OpenCV函数StereoSGBM_create计算两张图像的视差。

       (4)通过调用MindX SDK 提供的图像处理插件ImageProcessor的成员函数decode解码并获取校正后图像。

       (5)对图像进行尺寸变换,调用MindX SDK提供的图像处理插件ImageProcessor的图像尺寸大小改变函数resize改变图像尺寸。

       (6)调用MindX SDK的Model的infer函数,调用YoloV3模型对尺寸变换后的图像进行推理,定位出目标物体。

       (7)模型后处理,调用MindX SDK函数post.Yolov3PostProces得到模型推理结果。

       (8)使用 BTensor函数对后处理结果进行处理,得到标注检测到物体包围盒的左上角和右下角坐标。

       (9)取右下角坐标,用项目方法把物体检测结果转化为三维坐标。

二、MindStudio介绍与安装

2.1 MindStudio简介

      MindStudio是华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE(Integrated Development Environment,集成开发环境)上功能很多,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多类型任务。MindStudio具有工程项目管理、编译、调试、运行等常用功能,还具有性能分析、算子比对等功能,可有效提高开发人员的工作效率。此外,MindStudio具有远程操控功能,可执行远端任务。

       MindStudio提供AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程的开发任务。通过模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够在一个IDE中高效便捷地完成AI应用开发。MindStudio采用插件扩展机制,开发者可以通过开发插件来扩展已有功能。

2.2 MindStudio安装

       MindStudio下载地址为MindStudio下载-昇腾社区。点击MindStudio_{version}_win.exe后的“软件包下载”,将其下载到本地指定的目录。双击该软件包,即可开始安装MindStudio。

       MindStudio安装具体步骤包括 。

       进入MindStudio Setup安装界面,如图2-1所示,单击“Next”。

使用MindStudio进行基于双目视觉的目标定位_第1张图片

 图2-1 MindStudio 安装开始界面

       2. 非首次安装MindStudio时,可选择是否卸载已安装MindStudio版本。若不卸载已有版本,直接点击“Next”,进入步骤4;若要卸载则勾选相应版本,点击“Next”,进入步骤3,若同时勾选静默卸载,则会保留之前安装的MindStudio版本的一些配置。

使用MindStudio进行基于双目视觉的目标定位_第2张图片

图2-2 卸载之前安装的MindStudio版本选取

       3. 选择需要卸载的项,单击“Uninstall”进行卸载。

使用MindStudio进行基于双目视觉的目标定位_第3张图片

图2-3 卸载MindStudio

       4. 输入或选择MindStudio的安装路径,单击“Next”进入下一步骤。

使用MindStudio进行基于双目视觉的目标定位_第4张图片

图2-4 输入或选取确定MindStudio安装路径

       5. 根据需要勾选安装选项,选项给出是/否在桌面产生MindStudio快捷启动、是/否把MindStudio可执行文件目录加入到系统路径变量PATH、是/否在右键弹出Context菜单出现“Open Folder as Project”选项、MindStudio缺省关联的文件扩展名,图2-5给出.java、.groovy、.kt及.kts扩展名文件。点击“Next”进入下一步骤。

使用MindStudio进行基于双目视觉的目标定位_第5张图片

图2-5 选取设定安装配置选项

       6. 选择或创建MindStudio安装路径下的启动菜单文件夹,默认即可,单击“Install”。

使用MindStudio进行基于双目视觉的目标定位_第6张图片

图2-6 Start Menu Folder

       7. 开始安装MindStudio,完成后单击“Next”。

       8. 安装完成后,单击“Finish”。

       9. 双击桌面的MindStudio图标启动MindStudio,或者进入MindStudio安装目录的bin文件夹,双击MindStudio应用程序启动MindStudio。进入设置界面,如图2-7所示。

使用MindStudio进行基于双目视觉的目标定位_第7张图片

图2-7 首次启动环境设置

       默认选择“Do not import settings”,即不导入设置。选择该选项会创建新的配置文件。

       10. 如果没有报错信息则进入欢迎界面,表示MindStudio安装成功,如图2-8所示。

使用MindStudio进行基于双目视觉的目标定位_第8张图片

图2-8 MindStudio启动初始界面

2.3安装项目运行依赖环境

2.3.1安装Python

       1. 进入Python官网,点击Downloads选项,选择下载Python版本。MindStudio目前支持的Python版本为3.7~3.9。

       2. 将下载Python压缩包解压、运行,进入图2-9所示的安装选项选取界面。

       3. 此页面中的选项全部勾选即可,然后点击“Next”。

使用MindStudio进行基于双目视觉的目标定位_第9张图片

图2-9 安装选项设定

       4. 在Advanced Options 窗口中,点击“Customize install location”更改安装路径;选取“Create shortcuts for installed applications”在桌面创建Python启动快捷图标;选取“Add Python to environment variables”把Python安装目录加入到系统环境变量。点击“Install”进入安装。

使用MindStudio进行基于双目视觉的目标定位_第10张图片

图2-10 设定Python安装选项

       5. 安装完成后,打开Command命令提示符窗口,输入“python”,显示如图2-11所示Python版本信息,表明Python成功安装。

使用MindStudio进行基于双目视觉的目标定位_第11张图片

图2-11 检查python是否成功安装

       6. 在MindStudio中配置Python解释器

       (1) 在菜单栏中选择 File → Project Structure,在 Project Structure窗口中,点击 Platform Settings → SDKs,点击上方的“+”添加 Python SDK,如图2-12。

使用MindStudio进行基于双目视觉的目标定位_第12张图片 

图2-12 添加 Python SDK目录

       在弹出窗口中选取“Existing environment”,选择python.exe的安装目录,点击“OK”完成在MindStudio配置Python解释器。若选取“New environment”,则会将“Base interpreter”的python 环境复制到工程目录下,该选项设置表示项目所有类库依赖都脱离系统安装python而运行。

使用MindStudio进行基于双目视觉的目标定位_第13张图片

图2-13 设置Python解释器目录

       (2) 在Project Structure窗口中点击 Project Settings → Project,选择添加的 Python SDK,如图2-14所示。

使用MindStudio进行基于双目视觉的目标定位_第14张图片

 图2-14 选择Python SDK

       (3) 在Project Structure窗口中点击 Project Settings → Modules,右键工程名称,选择“Add”菜单项的“Python”,为 Python Interpreter 添加 Python SDK。点击“Apply”后再点击“OK”,如图2-15所示。

使用MindStudio进行基于双目视觉的目标定位_第15张图片

图2-15 设定 Python解释器

       Python SDK已配置完成。注意:上面各项配置好后,先点击“Apply”后再点击“OK”。

2.3.2安装MinGW

       MinGW下载地址:MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

       选择下图中红框内的版本进行下载。

使用MindStudio进行基于双目视觉的目标定位_第16张图片

图2-16 MinGW版本选择

       下载后直接将其解压至自定义目录。把MinGW的bin文件路径添加到环境变量中,则安装完成。打开Command命令提示符窗口,输入“g++ --version”,显示如图2-17所示信息,则表示安装成功。

使用MindStudio进行基于双目视觉的目标定位_第17张图片

图2-17 检查MinGW是否成功安装

2.3.3安装CMake

       CMake下载地址:https://cmake.org/download/

       下载图2-18红框所示版本。

使用MindStudio进行基于双目视觉的目标定位_第18张图片

图2-18 CMake版本选

       下载完成后,双击安装包进入安装。安装时选择“Add CMake to the system PATH for all users”把CMake路径加入到环境变量。安装完成后打开CMD命令提示符窗口,输入“cmake –version”,若显示如图2-19所示窗口,表明CMake安装成功。

使用MindStudio进行基于双目视觉的目标定位_第19张图片

图2-19 检查CMake是否成功安装

2.3.4安装CANN工具包

       从菜单栏中点击File → Settings,并在弹出的窗口中选择Appearance & Behavior → System Settings → CANN进入CANN管理界面,如图2-20所示。

使用MindStudio进行基于双目视觉的目标定位_第20张图片

图2-20 CANN管理界面

       上图所示为CANN工具包安装完成界面。CANN工具包未安装时,蓝框中内容为空,点击图中的Change CANN,进入图2-21所示界面。

使用MindStudio进行基于双目视觉的目标定位_第21张图片

图2-21 CANN安装

       单击“Remote Connection”后的“+”号, 配置MindStudio连接远程开发环境Ascend-cann-toolkit开发套件包;单击“Remote CANN location”后的文件夹图标,在弹出界面中选择Ascend-cann-toolkit开发套件包的安装路径(需要选择到版本号一级)。选择完成后点击Finish开始安装。

2.3.5安装MindX SDK

       MindX SDK提供昇腾AI处理器加速的各类AI软件开发套件(SDK),提供极简易用的API,加速AI应用开发。

       MindX SDK安装过程如下:

       1. 从菜单栏中点击File → Settings,并在弹出的窗口中选择Appearance & Behavior → System Settings → MindX SDK进入MindX SDK管理界面,如图2-22所示。

使用MindStudio进行基于双目视觉的目标定位_第22张图片

图2-22 MindX SDK管理界面

       2. 界面中“MindX SDK Location”为软件包的默认安装路径,默认安装路径为 “C:\Users\用户名\Ascend\mindx_sdk”。单击Install SDK进入Installation settings界面,如图2-23所示。

使用MindStudio进行基于双目视觉的目标定位_第23张图片

图2-23 MindX SDK安装

       3. 上图中前两个参数“Remote Connection”与“Remote CANN location”,跟图2-21中的选择保持一致;第三个参数“Remote SDK location”为远端环境SDK的路径,需配置到版本号一级;第四个参数“Local SDK location”为SDK的本地安装路径,图2-24所示为默认安装路径。选择完成后点击OK开始安装。

       4. 安装完成后的结果如下,点击OK即可。

使用MindStudio进行基于双目视觉的目标定位_第24张图片

图2-24 成功安装MindX SDK

三、基于双目视觉的目标定位开发

3.1创建项目

3.1.1创建初始项目

       1. 首先通过SecoClient连接VPN,以确保MindStudio能够连接远程服务器。启动MindStudio进入图2-8所示窗口,点击New Project,弹出图3-1所示新建项目窗口。

       2. 命名项目,图文案例把项目命名为BinocularStereoDepthRecovery,选择CANN版本及新建项目位置,点击Next。

使用MindStudio进行基于双目视觉的目标定位_第25张图片

图3-1 新建昇腾项目

       3. 在打开的窗口左侧选择Ascend App(如图3-1所示),然后选择MindX SDK Projet(Python)(如图3-2所示),点击Finish。

使用MindStudio进行基于双目视觉的目标定位_第26张图片

 

图3-2 选择MindX SDK Projet(Python)类型

       4. 项目创建完成后的初始界面如图3-3所示。

使用MindStudio进行基于双目视觉的目标定位_第27张图片

 图3-3 新建昇腾项目初始界面

3.1.2项目文件介绍

       为新建昇腾项目创建“基于双目视觉的目标定位”所需文件。创建完毕后,BinocularStereoDepthRecovery项目目录树在MindStudio的显示如图3-4所示。

使用MindStudio进行基于双目视觉的目标定位_第28张图片

 图3-4 所需文件创建完毕的昇腾项目

       其中,image目录存放测试图片,每两个为一组,是我们用自制双目相机同时获取场景物体的图像。

       model目录存放模型文件,模型下载地址为:YOLOv3-昇腾社区。本案例所下载模型可直接使用,无需模型转换过程。若需要模型转换,可点击图3-5中任意一个红框位置,进入图3-6所示界面进行设置,具体过程可参考:模型转换-用户指南。

使用MindStudio进行基于双目视觉的目标定位_第29张图片 

图3-5 进入模型转换

使用MindStudio进行基于双目视觉的目标定位_第30张图片 

图3-6 模型转换设置界面

       camera_configs.py文件主要代码介绍如图3-7所示。执行该函数会从camera.xml文件中有序地导入相机参数,并计算校正变化。该函数在yolo_deep.py文件中被调用。

使用MindStudio进行基于双目视觉的目标定位_第31张图片

 图3-7 相机配置文件代码介绍

       camera.xml文件中含有相机预标定的数据,包括相机内参、外参和畸变参数,如图3-8与图3-9所示。

使用MindStudio进行基于双目视觉的目标定位_第32张图片

 图3-8 camera.xml文件中的相机参数信息

使用MindStudio进行基于双目视觉的目标定位_第33张图片

 图3-9 camera.xml文件中的相机参数信息

       yolo_deep.py文件计算物体坐标,主要代码介绍如图3-10与图3-11所示。

使用MindStudio进行基于双目视觉的目标定位_第34张图片

 图3-10 物体坐标计算文件代码介绍

使用MindStudio进行基于双目视觉的目标定位_第35张图片

 图3-11 物体坐标计算文件代码介绍

       yolov3_infer.py为模型推理文件,主要代码介绍如图3-12与图3-13所示。

使用MindStudio进行基于双目视觉的目标定位_第36张图片

图3-12 模型推理文件代码介绍

使用MindStudio进行基于双目视觉的目标定位_第37张图片

图3-13 模型推理文件代码介绍

3.1.3接口调用介绍

       本模型采用API接口实现流程编排,对API的调用可参见第一章中“双目视觉目标定位流程的主要步骤”,代码中调用API的地方如下图所示。

使用MindStudio进行基于双目视觉的目标定位_第38张图片

图3-14 yolo_deep.py文件中对API的调用

使用MindStudio进行基于双目视觉的目标定位_第39张图片 

图3-15 模型推理文件中对API的调用

使用MindStudio进行基于双目视觉的目标定位_第40张图片 

图3-16 模型推理文件中对API的调用

       如果需要进行pipeline编排,可在MindStudio顶部菜单栏中选择Ascend下的MindX SDK Pipeline,如图3-17所示,进入pipeline绘制界面,详细的pipeline绘制过程可参考可视化流程编排-用户指南。

使用MindStudio进行基于双目视觉的目标定位_第41张图片

图3-17 打开pipeline绘制界面

3.1.4连接远程终端

       1. 选择MindStudio Tools菜单的Start SSH session菜单项,如图3-18所示。

使用MindStudio进行基于双目视觉的目标定位_第42张图片

图3-18 打开Tools菜单选择“Start SSH session…”

       在弹出的对话框中选择要连接的远程终端服务器,如图3-19所示。

使用MindStudio进行基于双目视觉的目标定位_第43张图片

 图3-19 选择远程终端连接的服务器

       远程终端开启后,点击MindStudio底部状态栏目的Remote Terminal图标,如图3-20所示。

使用MindStudio进行基于双目视觉的目标定位_第44张图片

图3-20 打开远程终端

       2. 激活远程终端mxVision的环境变量

       在远程终端窗口输入指令“vim ~/.bashrc”,在打开的文件末尾添加图3-21红框中内容(该内容从mxVision目录下的set_env.sh文件中复制得到),添加完成后在末行输入“wq!”保存并退出。最后,输入指令“source ~/.bashrc”使环境变量生效。

使用MindStudio进行基于双目视觉的目标定位_第45张图片

图3-21 设置远程终端mxVision环境变量

       3. Deployment配置

       从顶部菜单栏中选择Tools → Deployment → Configuration,如图3-22所示。

使用MindStudio进行基于双目视觉的目标定位_第46张图片

图3-22 打开Deployment Configuration

       新弹出的界面如图3-23所示。

使用MindStudio进行基于双目视觉的目标定位_第47张图片

图3-23 Deployment Configuration界面

       点击上图中红框位置处的加号,在弹出的对话框中输入new server name。点击OK后Deployment Configuration界面如图3-24。在Connection模块下,Type项选择SFTP,SSH configuration项选择要连接的远程服务器。

使用MindStudio进行基于双目视觉的目标定位_第48张图片

图3-24 Deployment界面的Connection模块

       在Mappings模块下,Local path已给出,保持不变;点击Deployment path后的文件夹图标,会弹出一个指定的目录,选择该默认路径即可。

使用MindStudio进行基于双目视觉的目标定位_第49张图片

图3-25 Deployment界面的Mappings模块

       返回Connection模块,点击Test Connection,出现图3-26所示界面则代表连接成功,点击OK。然后依次点击Deployment Configuration界面的Apply与OK,完成配置。

使用MindStudio进行基于双目视觉的目标定位_第50张图片

图3-26 成功连接服务器

       4. 如图3-27所示,把鼠标放在项目名上,单击鼠标右键,在弹出的菜单项中选择Deployment下的Upload to,在新弹出的对话框中选择所连接的服务器。执行该操作会把MindStudio本地客户端的项目文件会同步到服务器端。

使用MindStudio进行基于双目视觉的目标定位_第51张图片

图3-27 同步项目文件到服务器端

       执行完毕后,会看到MindStudio界面下方的File Transfer窗口中显示如下。

使用MindStudio进行基于双目视觉的目标定位_第52张图片

图3-28 同步成功提示信息

       进入服务器端,可以看到新生成了一个MindStudio-WorkSpace目录,如下图所示。

图3-29 MindX服务器生成工作目录

       进入MindStudio-WorkSpace目录,含有BinocularStereoDepthRecovery项目所在目录,如图3-30中红框所示。

图3-30 服务器端创建的项目目录

       进入到BinocularStereoDepthRecovery项目目录,可以看到从MindStudio本地客户端同步至服务器端的项目文件,目录信息如图3-31所示。

使用MindStudio进行基于双目视觉的目标定位_第53张图片

图3-31 服务器端项目目录情况

3.2运行项目

       选择顶部菜单栏Run下的Edit Configurations菜单项,如图3-32所示。

使用MindStudio进行基于双目视觉的目标定位_第54张图片

 图3-32 打开Edit Configurations

       弹出的窗口如图3-33所示。在窗口左侧,我们选择Ascend App下的项目名;在窗口右侧,Deployment项是前面已经设置过的,Executable项选择此次要执行函数yolo_deep.py的路径。选择完成后点击OK。

使用MindStudio进行基于双目视觉的目标定位_第55张图片

图3-33 Run Configurations界面

       设定完要运行的函数后,点击MindStudio界面的程序运行按钮,即下图中红框内的蓝色三角号,便可执行yolo_deep.py程序。

图3-34 程序运行按钮

       基于双目视觉的目标定位运行结果如图3-35所示。对于输入的两张(用双目相机拍摄的)图像,输出检测到的物体像素坐标,并且输出物体的世界坐标以及物体与相机的距离。

使用MindStudio进行基于双目视觉的目标定位_第56张图片

图3-35 深度推理结果

       图3-36为输入图像中的其中一幅,图3-35中输出的距离便是红色汽车模型与相机之间的距离。此外,我们生成了相对应的深度图,如图3-37所示。深度图中越亮的部分表示与相机的距离越近,越暗的部分与相机的距离越远。

使用MindStudio进行基于双目视觉的目标定位_第57张图片

图3-36 输入图像

使用MindStudio进行基于双目视觉的目标定位_第58张图片

图3-37 输入图像对应的深度图

四、FAQ

       1. No Python interpreter configured for the module

       答:未配置Python解释器,可参考2.3.1节中的步骤6配置Python解释器。

       2. Get MindX SDK version failed!

       答:选择远程服务器中SDK路径时,没有选择到版本号一级,选择父路径时会提示SDK版本获取失败。可参考2.3.5节完成MindX SDK的安装。

       3. CANN 连接错误(连接服务器 SSH 成功,但是连接 CANN 失败)

       答:有可能是没有选择到版本号一级,选择父路径时会报错,也有可能是因为当前用户非 root 用户,还有可能是服务器端内存不足。查看同步 CANN 运行日志可判断缘由,可在服务器端的log目录下查看日志文件。

       开发者在使用 MindStudio 或进行算子开发过程中遇到任何问题,都可以在昇腾社区进行互动,提出问题,获得更多的帮助。

       昇腾官网:昇腾社区-官网丨昇腾万里 让智能无所不及

       昇腾博客:昇腾_标签_开发者_华为云

       昇腾论坛:华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云

你可能感兴趣的:(AI,opencv,计算机视觉,人工智能,深度学习)