位置: IT常识 - 正文

【愚公系列】华为云系列之基于ModelBox搭建的AI寻车系统(愚公全名)

编辑:rootadmin
【愚公系列】华为云系列之基于ModelBox搭建的AI寻车系统 文章目录前言一、ModelBox简介1.ModelBox是什么2.AI开发遇到的问题和解决方案一2.1 相关问题2.2 解决方案3.AI开发遇到的问题和解决方案二3.1 相关问题3.2 解决方案4.ModelBox的功能5.ModelBox的其他特性6.ModelBox的应用场景二、ModelBox搭建的AI寻车系统1.案例效果2.环境安装2.1 ModelBox端云协同AI开发套件(Windows)设备注册2.1.1 安装VS Code2.1.2 注册HiLens设备2.2 ModelBox端云协同AI开发套件(Windows)SDK安装2.2.1 安装Git for Windows2.2.2 下载ModelBox sdk3.AI寻车系统搭建相关步骤3.1 下载模板3.2 创建工程3.3 查看流程图3.4 核心逻辑3.5 三方依赖库3.6 启动脚本执行应用总结前言

推荐整理分享【愚公系列】华为云系列之基于ModelBox搭建的AI寻车系统(愚公全名),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:愚公70,愚公百科,愚公 愚,愚公全名,愚公华盛,愚公全名,愚公 愚,愚公全名,内容如对您有帮助,希望把文章链接给更多的朋友!

AI寻车系统的作用是通过使用人工智能技术来帮助车主快速找到自己的车辆,提高车辆管理的效率和准确性。该系统可以通过车载设备、智能手机等终端设备实现车辆定位、追踪和管理,为车主提供便捷的车辆管理服务。

华为云ModelBox是华为云推出的一种AI模型开发和管理平台,它提供了丰富的AI模型算法和工具,可以帮助开发者快速构建和部署AI模型。同时,华为云ModelBox还支持多种AI模型的部署方式,包括在线API、离线SDK和容器化部署等。

本文主要介绍基于ModelBox搭建的AI寻车系统主要包含以下两部分

ModelBox简介ModelBox搭建的AI寻车系统一、ModelBox简介1.ModelBox是什么

ModelBox是端边云统一的、高性能、高扩展、易用的AI推理开发框架,它可以帮助AI开发者快速完成从模型文件到AI推理应用的开发和上线工作,降低AI算法落地门槛,同时带来AI应用的高稳定性和极致性能。

2.AI开发遇到的问题和解决方案一2.1 相关问题

AI硬件主要有以下几种:

GPU(图形处理器):GPU是一种高度并行的处理器,适合于处理大规模的数据并行计算,因此被广泛应用于深度学习等AI领域。FPGA(现场可编程门阵列):FPGA是一种可编程的硬件,可以根据需要重新配置其电路,因此适合于加速特定的计算任务,如卷积神经网络。ASIC(专用集成电路):ASIC是一种专门为某种特定应用而设计的芯片,可以提供高性能和低功耗,但是开发成本较高。CPU(中央处理器):CPU是一种通用的处理器,可以执行各种不同的计算任务,但是在处理大规模的数据并行计算时性能较差。TPU(张量处理器):TPU是一种专门为深度学习任务而设计的芯片,可以提供高性能和低功耗,但是只能用于特定的计算任务。

AI 基础框架种类包括 TensorFlow、PyTorch、Keras、Caffe、MXNet 等。

在如此多的AI硬件和基础框架会造成一系列问题:

部署场景复杂,系统架构涉及端边云多种组合芯片、操作系统、推理框架纷繁多样

2.2 解决方案

ModelBox的特性(应用编排异构计算组件),它具有以下特性:

支持多种异构计算组件,包括CPU、GPU、FPGA等。提供了灵活的应用编排能力,可以根据应用需求自由组合不同的计算组件。支持动态调度和资源管理,可以根据实际负载情况自动调整计算资源。具有高效的数据传输和通信能力,可以实现不同计算组件之间的数据交换和协同计算。

总之,ModelBox是一种高性能、灵活、可扩展的应用编排异构计算组件,可以为各种应用提供强大的计算支持,缩短跨平台开发和部署成本,一次开发,端边云部署运行。

3.AI开发遇到的问题和解决方案二3.1 相关问题

AI应用性能优化确实是一个挑战,因为AI模型通常需要大量的计算资源和时间来训练和推理。但是,有许多技术可以用来优化AI应用的性能,例如使用更高效的算法、优化硬件和软件配置、使用分布式计算等。此外,还可以使用一些技术来减少模型的大小和复杂度,以提高性能。

对于本案例中AI应用性能优化困难主要有:

视频分析应用:多模型多模块,提高FPSHTTP服务:高并发,降低时延,提高吞吐量

3.2 解决方案

ModelBox的特性(高性能并发调度引擎):ModelBox是一个高性能并发调度引擎,它可以帮助开发者更高效地管理和调度任务,提高系统的并发能力和性能。它的特性包括:支持多种任务类型,支持任务优先级,支持任务依赖关系,支持任务超时控制,支持任务重试机制,支持任务状态监控和报告等。开发者无需掌握底层调度机制,也能保证应用优化效果。

4.ModelBox的功能

流程图:有向图,表达应用逻辑,控制ModelBox执行过程,采用GraphvizDOT语言进行表述功能单元:流程图中的顶点,应用的基本组成部分,ModelBox的执行单元,开发者主要开发的组件ModelBoxAI应用开发流程:流程图设计:定义业务流程,划分功能单元,理顺功能单元间的数据传递关系功能单元开发:采用框架已提供的通用功能单元,实现自己定义的业务功能单元运行与测试:使用图片、视频文件、实时视频流等测试应用5.ModelBox的其他特性预置视频处理、图像处理、HTTP服务等通用功能单元,缩短开发成本集成可视化编排服务,零代码体验AI应用开发

6.ModelBox的应用场景

华为云ModelBox的应用场景包括但不限于:机器学习、深度学习、自然语言处理、图像识别、智能推荐、数据分析等领域。它可以帮助企业快速构建和部署AI模型,提高数据的价值和利用率,实现智能化转型。

二、ModelBox搭建的AI寻车系统1.案例效果

本案例主要使用的技术有:

FairMOT进行车辆检测与跟踪yolov5进行车牌检测crnn进行车牌识别,在停车场入口、出口、停车位对车辆进行跟踪与车牌识别,无论停车场路线多复杂,小车在你掌控之中

最终效果如下:

2.环境安装2.1 ModelBox端云协同AI开发套件(Windows)设备注册2.1.1 安装VS Code

与使用ModelBox的其他套件一样,我们推荐使用VS Code进行技能开发,请登录VS Code官网下载安装Windows x64版本的编辑器。

2.1.2 注册HiLens设备

HiLens设备的注册有两种方式:

使用VS Code插件注册登录华为云HiLens页面手动下载注册固件,使用命令行注册。 我们推荐第一种方式,操作更简单

1)在VS Code中搜索并安装ModelBox管理插件:

2)安装完成后,点击界面下方进入华为云登录界面,获取访问密钥,再进行登录:

如果有访问密钥,即AK/SK,直接输入登录即可登录;否则则需要点击第②步获取访问密钥,在弹出的页面点击新增访问密钥,确认后将下载的表格文件中的AK/SK依次复制填入第③步的填空框内即可。

3)如下图依次点击,进行ModelBox设备注册:

4)确认后,如下图显示“运行中”即完成注册:

2.2 ModelBox端云协同AI开发套件(Windows)SDK安装2.2.1 安装Git for Windows

ModelBox中有些脚本的执行依赖bash,使用Git bash也可以让开发者在Windows上获得与Linux相同的执行环境,因此需要安装Git for Windows。

安装完成后右键点击可以看到:

2.2.2 下载ModelBox sdk【愚公系列】华为云系列之基于ModelBox搭建的AI寻车系统(愚公全名)

1)在HiLens管理控制台专业版的技能开发-工具/插件板块下载Windows系列的ModelBox sdk:

2)新建一个用于ModelBox开发的文件夹(注意路径中不能有中文和空格),将下载的sdk压缩包移动到该路径并解压,使用VS Code打开该文件夹:

其中modelbox-win10-x64文件夹即为ModelBox核心库,包含ModelBox运行环境、内置的功能单元等。另外,为了做到开箱即用,可以看到sdk中已经包含了Python运行环境(python-embed目录),AI应用常用的OpenCV、NumPy等三方库也已经内置,开发者无需手动安装。

此外,我们也推荐安装一些VS Code插件,提高开发效率。

1、Python插件

后面教程会涉及到ModelBox的Python功能单元开发,推荐安装Python插件,微软官方出品,可以进行语法高亮、自动补全、代码跳转等:

2、Even Better TOML

ModelBox中的流程图、配置文件等使用 TOML 语法编写,因此我们推荐安装 Even Better TOML 插件,可以进行语法检查、关键字高亮、文件排版等:

3)打开Terminal终端

4)ModelBox技能模板

我们准备了一些口罩检测、手势检测、人体姿态识别等AI技能模板,存放在华为云OBS中;然后在ModelBox sdk中提供了一个solution.bat工具,用于下载云侧的技能模板,执行.\solution.bat -l可看到当前已有的技能模板:

3.AI寻车系统搭建相关步骤

这个应用对应的ModelBox版本已经做成模板放在华为云OBS中,可以用sdk中的solution.bat工具下载,接下来我们给出该应用在ModelBox中的完整开发过程:

3.1 下载模板

执行.\solution.bat -l可看到当前公开的技能模板:

结果中的vehicle_plate_multi_centernet_yolov5_crnn即为AI寻车应用模板,可使用如下命令下载模板:

.\solution.bat -s vehicle_plate_multi_centernet_yolov5_crnn

solution.bat工具的参数中,-l 代表list,即列出当前已有的模板名称;-s 代表solution-name,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox核心库的solution目录下。

3.2 创建工程

在ModelBox sdk目录下使用create.bat创建vehicle_plate工程:

.\create.bat -t server -n vehicle_plate -s vehicle_plate_multi_centernet_yolov5_crnn

create.bat工具的参数中,-t 表示创建事务的类别,包括工程(server)、Python功能单元(Python)、推理功能单元(infer)等;-n 代表name,即创建事务的名称;-s 代表solution-name,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程。

workspace目录下将创建出vehicle_plate工程,工程内容如下所示:

vehicle_plate|--bin│ |--main.bat:应用执行入口│ |--mock_task.toml:应用在本地执行时的输入输出配置,此应用默认使用4路本地视频文件为输入源,最终结果拼接为四宫格输出到屏幕,可根据需要修改|--CMake:存放一些自定义CMake函数|--data:存放应用运行所需要的图片、视频、文本、配置等数据│ |--chuchang_10.mp4:停车场出口测试视频│ |--ruchang_10.mp4:停车场入口测试视频│ |--ruku_10.mp4:停车位1测试视频│ |--kong_10.mp4:停车位2测试视频│ |--plate_keys.txt:车牌字符文件│ |--content_file.json:技能参数全局配置文件|--dependence│ |--modelbox_requirements.txt:应用运行依赖的外部库在此文件定义,本应用依赖pillow、scipy等工具包|--etc│ |--flowunit:应用所需的功能单元存放在此目录│ │ |--cpp:存放C++功能单元编译后的动态链接库,此应用没有C++功能单元│ │ |--collapse_ocr:归拢功能单元,车牌识别后处理│ │ |--condition:条件功能单元,判断是否检测到车辆/车牌│ │ |--draw_full_screen:多路视频拼接输出功能单元│ │ |--draw_plate:车牌检测结果绘制│ │ |--draw_track_bbox:车辆跟踪结果绘制│ │ |--expand_image:展开功能单元,展开车辆检测/车牌检测结果并行推理│ │ |--letter_resize:车辆检测预处理功能单元│ │ |--object_tracker:跟踪功能单元│ │ |--plate_det_post:车牌检测后处理功能单元│ │ |--url_cfg:流单元,多路输入解析│ │ |--vehicle_det_post:车牌检测结果绘制|--flowunit_cpp:存放C++功能单元的源代码,此应用没有C++功能单元|--graph:存放流程图│ |--vehicle_plate.toml:默认流程图,使用本地视频文件作为输入源│ |--modelbox.conf:modelbox相关配置|--hilens_data_dir:存放应用输出的结果文件、日志、性能统计信息|--model:推理功能单元目录│ |--vehicle_det:车辆检测推理功能单元│ │ |--vehicle_det.toml:车辆检测推理功能单元的配置文件│ │ |--vehicle_det_320x576.onnx:车辆检测onnx模型│ |--plate_det:车牌检测推理功能单元│ │ |--plate_det.toml:车牌检测推理功能单元的配置文件│ │ |--plate_det.onnx:车牌检测onnx模型│ |--plate_rec:车牌识别推理功能单元│ │ |--plate_rec.toml:车牌识别推理功能单元的配置文件│ │ |--plate_rec.onnx:车牌识别onnx模型|--build_project.sh:应用构建脚本|--CMakeLists.txt|--rpm:打包rpm时生成的目录,将存放rpm包所需数据|--rpm_copyothers.sh:rpm打包时的辅助脚本3.3 查看流程图

vehicle_plate工程graph目录下存放流程图,默认的流程图vehicle_plate.toml与工程同名,其内容为(以Windows版ModelBox为例):

# 功能单元的扫描路径,包含在[]中,多个路径使用,分隔# ${HILENS_APP_ROOT} 表示当前应用的实际路径# ${HILENS_MB_SDK_PATH} 表示ModelBox核心库的实际路径[driver]dir = [ "${HILENS_APP_ROOT}/etc/flowunit", "${HILENS_APP_ROOT}/etc/flowunit/cpp", "${HILENS_APP_ROOT}/model", "${HILENS_MB_SDK_PATH}/flowunit",]skip-default = true[profile]# 通过配置profile和trace开关启用应用的性能统计profile = false # 是否记录profile信息,每隔60s记录一次统计信息trace = false # 是否记录trace信息,在任务执行过程中和结束时,输出统计信息dir = "${HILENS_DATA_DIR}/mb_profile" # profile/trace信息的保存位置[graph]format = "graphviz" # 流程图的格式,当前仅支持graphvizgraphconf = """digraph vehicle_plate{ node [shape=Mrecord] queue_size = 1 batch_size = 1 input1[type=input,flowunit=input,device=cpu,deviceid=0] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] url_cfg[type=flowunit, flowunit=url_cfg, device=cpu, deviceid=0] video_demuxer[type=flowunit, flowunit=video_demuxer, device=cpu, deviceid=0] video_decoder[type=flowunit, flowunit=video_decoder, device=cpu, deviceid=0, pix_fmt="rgb"] letter_resize[type=flowunit, flowunit=letter_resize, device=cpu] color_transpose[type=flowunit, flowunit=packed_planar_transpose, device=cpu, deviceid=0] normalize[type=flowunit, flowunit=normalize, device=cpu, deviceid=0, standard_deviation_inverse="0.003921568627451, 0.003921568627451, 0.003921568627451"] vehicle_det[type=flowunit, flowunit=vehicle_det, device=cpu, deviceid=0, batch_size=1] vehicle_det_post[type=flowunit, flowunit=vehicle_det_post, device=cpu, deviceid=0] object_tracker[type=flowunit, flowunit=object_tracker, device=cpu, deviceid=0] vehicle_condition[type=flowunit, flowunit=condition, device=cpu, deviceid=0] expand_car[type=flowunit, flowunit=expand_image, device=cpu, deviceid=0, img_h=640, img_w=640] plate_color_transpose[type=flowunit flowunit=packed_planar_transpose device=cpu deviceid="0"] plate_normalize[type=flowunit flowunit=normalize device=cpu deviceid=0 standard_deviation_inverse="0.003921568627451,0.003921568627451,0.003921568627451"] plate_det[type=flowunit flowunit=plate_det device=cpu deviceid="0", batch_size=1] plate_det_post[type=flowunit, flowunit=plate_det_post, device=cpu, deviceid=0] plate_condition[type=flowunit, flowunit=condition, device=cpu, deviceid=0, key="plate"] expand_plate[type=flowunit, flowunit=expand_image, device=cpu, deviceid=0, img_h=48, img_w=168, key="plate"] ocr_color_transpose[type=flowunit flowunit=packed_planar_transpose device=cpu deviceid="0"] ocr_mean[type=flowunit flowunit=mean device=cpu deviceid="0" mean="149.94,149.94,149.94"] ocr_normalize[type=flowunit flowunit=normalize device=cpu deviceid=0 standard_deviation_inverse="0.020319,0.020319,0.020319"] plate_rec[type=flowunit flowunit=plate_rec device=cpu deviceid="0", batch_size=1] collapse_ocr[type=flowunit flowunit=collapse_ocr device=cpu deviceid="0"] draw_plate[type=flowunit, flowunit=draw_plate, device=cpu, deviceid=0] draw_track_bbox[type=flowunit, flowunit=draw_track_bbox, device=cpu, deviceid=0] draw_full_screen[type=flowunit, flowunit=draw_full_screen, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=cpu, deviceid=0, full_screen=true] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> url_cfg:in_1 url_cfg:out_1 -> video_demuxer:in_video_url video_demuxer:out_video_packet -> video_decoder:in_video_packet video_decoder:out_video_frame -> letter_resize:in_image letter_resize:resized_image -> color_transpose:in_image color_transpose:out_image -> normalize:in_data normalize:out_data -> vehicle_det:input vehicle_det:output -> vehicle_det_post:in_feat letter_resize:out_image -> vehicle_det_post:in_image vehicle_det_post:out_feat -> object_tracker:in_feat object_tracker:out_track -> vehicle_condition:in_track video_decoder:out_video_frame -> vehicle_condition:in_image vehicle_condition:out_track -> expand_car:in_image expand_car:out_image -> plate_color_transpose:in_image plate_color_transpose:out_image -> plate_normalize:in_data plate_normalize:out_data -> plate_det:input plate_det:output -> plate_det_post:in_feat expand_car:out_image -> plate_det_post:in_image plate_det_post:out_tracks -> plate_condition: in_track vehicle_condition:out_track -> plate_condition: in_image plate_condition:out_track -> expand_plate:in_image expand_plate:out_image -> ocr_color_transpose:in_image ocr_color_transpose:out_image -> ocr_mean:in_data ocr_mean:out_data -> ocr_normalize:in_data ocr_normalize:out_data -> plate_rec:input plate_rec:output -> collapse_ocr:in_feat expand_plate:out_image -> collapse_ocr:in_image collapse_ocr:out_tracks -> draw_plate:in_feat plate_condition:out_track -> draw_plate:in_image draw_plate:out_image -> draw_track_bbox:in_image plate_condition:out_image -> draw_track_bbox:in_image draw_track_bbox:out_image -> draw_full_screen:in_image vehicle_condition:out_image -> draw_full_screen:in_image draw_full_screen:out_image -> video_out:in_video_frame}"""[flow]desc = "vehicle_plate run in modelbox-win10-x64"

将流程图可视化: 功能解释如下:

灰色部分为预置功能单元绿色为一般通用功能单元红色为推理功能单元蓝色为条件功能单元黄色为展开归拢功能单元

整个应用逻辑如下:

视频解码后做图像预处理接着是车辆检测模型后处理得到车形框与128维车辆reid特征送入跟踪算法进行实时跟踪,经过条件功能单元判断,检测到车辆的图送入展开功能单元切图进行车牌检测,车牌检测结果归拢后同样要判断是否检测到车牌检测到车牌的帧再展开并行进行车牌识别,未检测到的则直接绘制车辆信息。 而未检测到车辆的帧则直接送入多路拼接功能单元,最终输出。3.4 核心逻辑

本应用核心逻辑中的跟踪与区域判断,跟踪逻辑在object_tracker功能单元中,检测与跟踪使用的是FairMOT算法,算法介绍可参考论文。

首先查看object_tracker功能单元中返回的跟踪对象结构:

def get_tracking_objects(self, online_targets_dict): tracking_objects = {} for cls_id in range(self.num_classes): online_targets = online_targets_dict[cls_id] for t in online_targets: obj = {} tlwh = t.tlwh if tlwh[2] * tlwh[3] < self.min_box_area: continue tid = t.track_id obj["bbox"] = [max(0, tlwh[0]), max(0, tlwh[1]), tlwh[0] + tlwh[2], tlwh[1] + tlwh[3]] obj["licence"] = "" obj["licence_score"] = 0.0 obj["plate"] = np.zeros((4, 2)).tolist() obj["plate_score"] = 0.0 obj["bbox_score"] = t.score tracking_objects[tid] = obj return tracking_objects

可以看到,我们返回的跟踪对象包括车型框、车辆检测得分等已有信息以及车牌、车牌得分、车牌框、车牌框得分等包含默认数据的占位信息,方便后续功能单元获取更新。

从流程图中可以看到,object_tracker后结果送入车辆检测条件功能单元,同样的在流程图中还包含车牌检测条件功能单元,我们当然是希望使用同一个功能单元完成两个判断,所以在条件功能单元condition中,我们配置了参数key,默认为key = “bbox”,即对结构体中的车型框进行判断,具体实现为:

if track_result and np.any([v.get(self.key) for k, v in track_result.items()]): buffer_img.set("track", track_json) out_track.push_back(buffer_img)else: buffer_img.set("track", track_json) out_image.push_back(buffer_img)

这样的话如果是对车型框进行判断,只需要在流程图中配置key = “plate”即可。

同样的,图展开功能单元expand_image也使用了同样的方法,使车辆检测与车牌检测可以共用功能单元:

tracking_objects = json.loads(buffer_img.get("track"))for idx, target in tracking_objects.items():box = np.array(target.get(self.key)) ...

此外,由于本应用输入为4路视频,因此需要在url_cfg单元中进行session级别信息配置:

url_str = str(self.count) + input_meta.get_private_string("source_url")self.count += 1data_context.get_session_context().set_private_string("multi_source_url", url_str)

session级别的信息在功能单元之间是同步的,这样就可以在后续的功能单元中获取当前输入为哪路输入:

url = data_context.get_session_context().get_private_string("multi_source_url")image_index = int(url[0])

同样的,对于多路输入,我们需要在本地mock时在bin/mock_task.toml文件中进行输入配置:

[input]type = "url"url = "${HILENS_APP_ROOT}/data/ruchang_10.mp4"[input1]type = "url"url = "${HILENS_APP_ROOT}/data/chuchang_10.mp4"[input2]type = "url"url = "${HILENS_APP_ROOT}/data/ruku_10.mp4"[input3]type = "url"url = "${HILENS_APP_ROOT}/data/kong_10.mp4"对于多路输入的感兴趣区域划定,我们使用content_file配置:[common]content_file = "../data/content_file.json"配置文件内容为:[ { "vehicle_area": "190,245,382,656,1265,630,956,249", "plate_area": "190,245,382,656,1265,630,956,249" }, { "vehicle_area": "663,467,228,675,994,682,1167,459", "plate_area": "663,467,228,675,994,682,1167,459" }, { "vehicle_area": "0,0,1280,0,1280,720,0,720", "plate_area": "0,0,1280,0,1280,720,0,720" }, { "vehicle_area": "0,0,1280,0,1280,720,0,720", "plate_area": "0,0,1280,0,1280,720,0,720" }]

即针对不同输入配置各自的车型车牌感兴趣区域,在后续功能单元中获取配置的参数信息进行处理,如plate_det_post功能单元:

self.areas = json.loads(data_context.get_session_config().get_string("iva_task_common"))url = data_context.get_session_context().get_private_string("multi_source_url")image_index = int(url[0])self.area = self.areas[image_index].get("plate_area")if self.area: self.area = np.array(list(map(int, self.area.split(",")))).reshape(-1, 1, 2).astype(np.int32)

我们目前对于车型和车牌检测的参数配置是保持一致的,也可以配置为不同参数。

3.5 三方依赖库

本应用依赖scipy等工具包,ModelBox应用不需要手动安装三方依赖库,只需要配置在dependence\modelbox_requirements.txt,应用在编译时会自动安装。

3.6 启动脚本执行应用

在项目目录下执行.\bin\main.bat运行应用:

.\bin\main.bat

白线即配置的感兴趣区域,区域外/未过线车辆根据id赋色,区域内/已过线车辆的使用灰色框,可在输入输出配置中修改划区域任务类型与坐标点。

总结

AI寻车系统的搭建难点和挑战主要包括以下几个方面:

数据采集和处理:需要收集大量的车辆数据,包括车型、颜色、车牌号码等信息,并对这些数据进行处理和分析,以便系统能够准确地识别和追踪车辆。图像识别和处理:需要使用先进的图像识别技术,对车辆的外观特征进行识别和分析,以便系统能够准确地识别车辆。实时性和准确性:需要保证系统能够实时地追踪车辆,并准确地识别车辆的位置和状态,以便及时采取措施。安全性和隐私保护:需要保护车主的隐私和车辆的安全,防止系统被黑客攻击或滥用。

华为云ModelBox提供了一种快速、高效的模型部署方式,可以帮助开发者快速将训练好的模型部署到生产环境中,从而提高应用的响应速度和性能表现。同时,ModelBox还提供了多种部署方式和灵活的配置选项,可以满足不同场景下的需求。

本文链接地址:https://www.jiuchutong.com/zhishi/298822.html 转载请保留说明!

上一篇:【WebSocket 协议】Web 通信的下一步进化(websocket tcpsocket)

下一篇:Webpack完整打包流程分析(webpack打包步骤)

  • 苹果手机画板在哪里(iphone手机画板)

    苹果手机画板在哪里(iphone手机画板)

  • Excel计算机求和函数公式是什么(excel计算机求和的函数)

    Excel计算机求和函数公式是什么(excel计算机求和的函数)

  • 京东换货需要几天(京东换货需要几天能到货)

    京东换货需要几天(京东换货需要几天能到货)

  • 闪送强制提现多久到账(闪送强制提现多少钱)

    闪送强制提现多久到账(闪送强制提现多少钱)

  • 三星s10支不支持无线充电(三星s10支不支持LDAC编码)

    三星s10支不支持无线充电(三星s10支不支持LDAC编码)

  • 腾讯智慧校园健康打卡怎么打不了(腾讯智慧校园健康打卡怎么修改)

    腾讯智慧校园健康打卡怎么打不了(腾讯智慧校园健康打卡怎么修改)

  • 骁龙665日常够用吗(骁龙665用在哪些手机)

    骁龙665日常够用吗(骁龙665用在哪些手机)

  • 线路集成稳定器什么东西(线路集成稳定器s17)

    线路集成稳定器什么东西(线路集成稳定器s17)

  • b站一键三连怎么弄

    b站一键三连怎么弄

  • 微信可以下载两个吗(微信可以下载两个登不同的号吗)

    微信可以下载两个吗(微信可以下载两个登不同的号吗)

  • 美图秀秀做模卡步骤(美图秀秀lomo卡照片)

    美图秀秀做模卡步骤(美图秀秀lomo卡照片)

  • 微信聊天记录为什么会自动删除(微信聊天记录为什么会被别人知道)

    微信聊天记录为什么会自动删除(微信聊天记录为什么会被别人知道)

  • 抖音视频时长最长多久(抖音视频时长最多多少秒)

    抖音视频时长最长多久(抖音视频时长最多多少秒)

  • 手机进水扬声器沙哑会不会自动好(手机进水扬声器坏了怎么办)

    手机进水扬声器沙哑会不会自动好(手机进水扬声器坏了怎么办)

  • 抖音卸载了,别人还能不能看到我的视频(抖音卸载了,别人还能登录吗)

    抖音卸载了,别人还能不能看到我的视频(抖音卸载了,别人还能登录吗)

  • 笔记本开机直接进bios怎么办(笔记本开机直接进入安全模式怎么办)

    笔记本开机直接进bios怎么办(笔记本开机直接进入安全模式怎么办)

  • 优酷播放语言设置在哪(优酷怎么调语种)

    优酷播放语言设置在哪(优酷怎么调语种)

  • 苹果手表s4和s5区别(苹果手表s4和s5的区别)

    苹果手表s4和s5区别(苹果手表s4和s5的区别)

  • 2人共享位置时对方不动(2人共享位置时自己没有动,位置为什么会动)

    2人共享位置时对方不动(2人共享位置时自己没有动,位置为什么会动)

  • 抖音2个视频怎么拼一起(抖音2个视频怎么合成一个)

    抖音2个视频怎么拼一起(抖音2个视频怎么合成一个)

  • 拼多多怎么查看运费险(拼多多怎么查看自己买过的东西)

    拼多多怎么查看运费险(拼多多怎么查看自己买过的东西)

  • 小米8otg在哪里设置(小米8OTG在哪里设置)

    小米8otg在哪里设置(小米8OTG在哪里设置)

  • ios投屏到win10(ios投屏到win11)

    ios投屏到win10(ios投屏到win11)

  • aumix命令  设置音效装置(audo命令)

    aumix命令 设置音效装置(audo命令)

  • 个体工商户是否跨省经营
  • 个人住房5年后买卖如何交税?
  • 个人天猫怎么开网店
  • 关税完税价格是到岸价吗
  • 收据盖发票专用章后果
  • 口罩属于什么经营类别
  • 个税漏申报了一个月在哪里申报
  • 预收款转营业外收入条件
  • 房地产开发企业资质等级有几个
  • 汇总记账凭证核算组织程序的缺点主要有
  • 土地租金计入哪个会计科目
  • 在建工程当中哪些是资产
  • 出口发票上的汇率填什么
  • 进口货物报关费可以计入制造费用
  • 留抵税额注销时,会计分录
  • 房地产企业的土地使用税起始时间
  • 月饼税收分类属于哪一类食品
  • 环保设备的折旧计入
  • 在职员工 开公司
  • 管理费用怎么记忆
  • 发票联丢失怎么做账
  • 房地产开发企业预缴增值税
  • 税没申报不能领发票吗
  • 收到利息收入会计分录怎么写
  • win11咋截屏
  • 付的押金冲抵部分怎么算
  • 修建污水厂需要办理哪些审批
  • php 设计模式
  • scworker.exe是病毒
  • 前端页面默认字体
  • 年度汇算清缴怎么查询
  • php检测是否登录
  • 摊销账务处理会计分录
  • php采集系统
  • 以前年度损益调整
  • 城建税教育费附加什么时候交
  • vue模块拖拽
  • 库存现金借方发生额怎么计算
  • 股权转让 开票
  • mysql分页优化原理
  • 注册资金只能增加不能减少吗
  • 什么叫金税四期呢?
  • 政府补贴的装修费是免税的吗
  • 主营业务成本为什么属于损益类科目
  • 债务重组的方式不包括债务转为资本
  • 航天信息税票
  • 出口转内销补交进口增值税时间
  • 小企业核算方式选独立核算
  • 平均净资产怎么算公式的
  • 制造费用如何控制
  • 培训费开票属于劳务费吗
  • 向法人借款凭证摘要怎么写
  • 工程费用科目
  • 现金折扣与商业折扣的计算
  • MySQL数据库索引设计
  • [视频回复]
  • mac怎么录制
  • centos7修复安装
  • winio在win7下使用
  • SUSE Linux Enterprise Server 设置防火墙开启ssh远程端口的方法
  • win10桌面底部
  • windows屏蔽网络设置的方法不包括以下哪种
  • msoobe.exe是什么
  • win10 win8.1双系统
  • 阴影效果有什么用
  • ajax分页查询数据文档效果图
  • unity用visual
  • opengl绘制函数
  • js 浮点数运算
  • NGUI简介
  • 用python发邮件
  • 欢迎使用来电提醒业务是什么意思
  • python中模块的作用
  • javascript判断浏览器
  • JavaScript中的this指向
  • python操作db2数据库
  • 高速公路过路费一公里多少钱
  • 江苏省国家税务局发票查询
  • 预缴增值税申报表申报期限
  • 代理记账资质办理在哪个网站提交申请
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设