1、前景介绍

目录

1、前景介绍

2、训练营课程

3、测试完成的作业内容

(1)题目

(2)实现效果展示

(3)实现代码

4、学习心得

参考


(1)Aidlux简介

Aidlux是基于ARM架构的跨生态的(Android/鸿蒙+Linux)一站式AIoT应用快速开发和部署平台APP,通过共享 Linux 内核实现Android 和 Linux 生态融合,为单一设备同时提供Android和Linux运行环境[1]。使用Aidlux的设备能够同时在安卓和Linux系统中运行,通过单个平台完成多终端协同开发、测试、部署等工作[2],简化了开发步骤。Aidlux广泛应用于各智能行业领域场景中实现不同的业务功能,本次课程项目是以安卓手机作为边缘设备进行开发实战操作。Aidlux具体操作使用流程可参考下文课程链接或网络。

2、训练营课程

(1)本节课主要学习智慧安防实战训练营的课程:https://mp.weixin.qq.com/s/3WrTMItNAGt8l2kjjf042w。

(2)学习目的

在接触人工智能以来至今已有半年之久,之前做过一些AI相关的项目,其中包括有缺陷目标检测识别,车辆行人识别,人脸检测等。但并没有真实的应用于具体的项目实战当中。在了解到江大白老师推出的AI相关项目实战之后,极大的激发了自己的学习兴趣,为了进一步了解AI相关实战项目更好的落地,在边缘设备或移动端等设备更好的落地,便参加了本次课程的相关学习。

3、测试完成的作业内容

(1)题目

在学习了越界识别的功能后,采用人体检测+人体追踪+业务功能的方式实现人流统计。

(2)实现效果展示

人流量统计

Vscode远程连接手机端,运行yolov5_overstep.py代码,在手机端和PC网页端能够显示运行效果,本文视频中的测试视频来源网络侵删。通过手机端的“喵提醒”公众号进行最终人流量统计数信息接受,结果如下图1所示。

图1

(3)实现代码

运行yolov5_overstep.py完整代码如下所示,详细内容请查阅代码注解,完整项目代码可参考课程代码。

# aidlux相关
from cvs import *
import aidlite_gpu
from utils import detect_postprocess, preprocess_img, draw_detect_res, scale_coords, process_points,is_in_poly, is_passing_line   #isInsidePolygon循环引用
import cv2
# bytetrack
from track.tracker.byte_tracker import BYTETracker
from track.utils.visualize import plot_tracking
import requests
import time# 加载模型
model_path = '/home/lesson5_codes/aidlux/yolov5n_best-fp16.tflite'
in_shape = [1 * 640 * 640 * 3 * 4]
out_shape = [1 * 25200 * 6 * 4]# 载入模型
aidlite = aidlite_gpu.aidlite()
# 载入yolov5检测模型
aidlite.ANNModel(model_path, in_shape, out_shape, 4, 0)tracker = BYTETracker(frame_rate=30)
track_id_status = {}
cap = cvs.VideoCapture("/home/lesson5_codes/aidlux/self.mp4")
frame_id = 0
count_person = 0
while True:frame = cap.read()if frame is None:## 相机采集结束 ##print("camera is over")## 统计打印人流数量 ### 填写对应的喵码id = 'tGiP4C0'# 填写喵提醒中,发送的消息,这里放上前面提到的图片外链text = "人流统计数:" + str(count_person)ts = str(time.time())  # 时间戳type = 'json'  # 返回内容格式request_url = "http://miaotixing.com/trigger?"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47'}result = requests.post(request_url + "id=" + id + "&text=" + text + "&ts=" + ts + "&type=" + type,headers=headers)breakframe_id += 1if frame_id % 3 != 0:continue# 预处理img = preprocess_img(frame, target_shape=(640, 640), div_num=255, means=None, stds=None)# 数据转换:因为setTensor_Fp32()需要的是float32类型的数据,所以送入的input的数据需为float32,大多数的开发者都会忘记将图像的数据类型转换为float32aidlite.setInput_Float32(img, 640, 640)# 模型推理APIaidlite.invoke()# 读取返回的结果pred = aidlite.getOutput_Float32(0)# 数据维度转换pred = pred.reshape(1, 25200, 6)[0]# 模型推理后处理pred = detect_postprocess(pred, frame.shape, [640, 640, 3], conf_thres=0.4, iou_thres=0.45)# 绘制推理结果res_img = draw_detect_res(frame, pred)# 目标追踪相关功能det = []# Process predictionsfor box in pred[0]:  # per imagebox[2] += box[0]box[3] += box[1]det.append(box)if len(det):# Rescale boxes from img_size to im0 sizeonline_targets = tracker.update(det, [frame.shape[0], frame.shape[1]])online_tlwhs = []online_ids = []online_scores = []# 取出每个目标的追踪信息for t in online_targets:# 目标的检测框信息tlwh = t.tlwh# 目标的track_id信息tid = t.track_idonline_tlwhs.append(tlwh)online_ids.append(tid)online_scores.append(t.score)# 针对目标绘制追踪相关信息res_img = plot_tracking(res_img, online_tlwhs, online_ids, 0,0)### 越界识别功能实现 #### # 1.绘制越界监测区域# points = [[593,176],[904,243],[835,323],[507,259]]# color_light_green=(144, 238, 144)  ##浅绿色# res_img = process_points(res_img,points,color_light_green)# 1.绘制人流统计线lines = [[500,10],[300,710]]cv2.line(res_img,(500,10),(300,710),(255,255,0),3)# 2.计算得到人体下方中心点的位置(人体检测监测点调整)pt = [tlwh[0]+1/2*tlwh[2],tlwh[1]+tlwh[3]]# 3. 人体和违规区域的判断(人体状态追踪判断)track_info = is_passing_line(pt, lines)if tid not in track_id_status.keys():track_id_status.update( {tid:[track_info]})else:if track_info != track_id_status[tid][-1]:track_id_status[tid].append(track_info)# 4. 判断是否有track_id越界,有的话保存成图片# 当某个track_id的状态,上一帧是-1,但是这一帧是1时,说明越界了if track_id_status[tid][-1] == 1 and len(track_id_status[tid]) >1:# 判断上一个状态是否是-1,是否的话说明越界,为了防止继续判别,随机的赋了一个3的值if  track_id_status[tid][-2] == -1:track_id_status[tid].append(3)count_person += 1cv2.putText(res_img,"-1 to 1 person_count:"+str(count_person), (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,255), 1)cvs.imshow(res_img)

4、学习心得

该课程进行了详细的操作步骤讲解,操作简单易懂,容易上手。通过本次课程学习不仅接触到了Ailudx这个方便的开发平台,学会了如何使用Aidlux在手机端进行模型部署,真实感受到了AI模型落地的相关流程,为后续的学习提供强有力的支撑。Aidlux平台操作起来方便,AI功能易于实现,运行过程中基本没有出现过任何大的问题,后期会继续使用该平台进行AI项目落地开发。

参考

  1. ^1AidLux智能物联网(AIoT)应用开发和部署平台-阿加犀智能科技
  2. ^2 《首个支持Android和Linux系统同时运行的一站式AloT开发平台AidLux 1.0全面上线》__中国贸易新闻网

《基于Aidlux的智慧安防AI实战训练营》收获与心得相关推荐

  1. 五个课时,百余智慧安防AI应用作品落地!AidLux实战训练营圆满收官

    随着视觉检测.智能家居.自动驾驶等智能应用的面世,更多的人认识到,人工智能(AI)将推动不同领域的产业走向"智慧化". 如今,越来越多渴望掌握新技能的学习者选择了人工智能.为了进一 ...

  2. 基于Aidlux平台的智慧社区AI实战

    智慧社区作为智慧城市的最小单元,麻雀虽小五脏俱全.一般来说智慧社区主要分成以下三个方面:住房安全管控.社区环境管控以及物业服务管控三个部分. (1)住房安全管控,主要包括消防安全的监管和入侵安全之类. ...

  3. AidLux动态人脸识别AI实战训练营活动正式开启!

    持续降低AI学习门槛,让每个人都能轻松落地AI应用,AidLux AI实战训练营第4期即将开营啦~ 本次训练营的学员还能优先体验AidLux 1.4 beta,提前感受更多强大功能和更优质的使用体验! ...

  4. 车牌识别——AidLux2023年2月智慧社区AI实战训练营

    AidLux社区文章位置:https://community.aidlux.com/postDetail/1344 AidLux2023年2月智慧社区AI实战训练营的车牌识别项目作业展示 项目为车牌识 ...

  5. 基于Aidlux平台的智慧交通AI安全算法实战

    一. 通常来说,智慧交通行业主要是对交通场景内的行人,机动车,非机动车进行识别分析. 行人识别分析包括对行人的姿态,方向,外观,以及基于行人的交通事件识别分析,(行人闯红灯等). 机动车识别分析包括对 ...

  6. 密织“地网” 南充“试水”智慧安防

    为有效防范电动自行车.摩托车(简称"两车")被盗等案件发生,11月18日,嘉陵区公安分局正式启动南充智慧城市信息管理系统(简称"地网"工程).此后,安装或者使用 ...

  7. CPSE安博会 | 江波龙邀您共探智慧安防,赋能存储未来

    江波龙亮相第十八届CPSE安博会,旗下双品牌Lexar(雷克沙)与FORESEE共赴盛会 12月26日,为期4天的第十八届中国国际公共安全博览会(CPSE安博会)在深圳会展中心(福田)盛大举行,由CP ...

  8. 智慧安防:监狱室内人员定位系统解决方案-新导智能

    现在,监狱安防触及的范畴非常广泛,除了视频监控,还涵盖围界.高压电网.报警.巡更.门禁.对讲.公共广播等其他方面.但在实际使用中,这些安防手法还不能满意监狱办理的要求.为加强对监狱人员办理的实时性和主 ...

  9. OpenMMLab AI实战训练营 CLASS4目标检测

    介绍 含义:用矩形框框出,所给出的特定图片中所有感兴趣物体,同时预测物体类别 应用场景 目标检测in人脸识别 目标检测in智慧城市 滑窗 步骤 1. 设定一个固定大小的窗口 2. 遍历图像所有位置,所 ...

最新文章

  1. 实现ASP.NET MVC3 HtmlHelper 的 RadioButtonList 与CheckBoxList 扩展
  2. 鞋企立足信息化建设 力争突破发展瓶颈
  3. 适合自学python的图书-清华学霸整理,Python入门到精通这几本书帮你快速入行
  4. ansible-playbook剧本使用配置
  5. 《Java 核心技术卷1 第10版》学习笔记 ------ 泛型【进阶】
  6. php生成首页 教程,简单静态页生成 过程_PHP教程
  7. 一日一技:在Ocelot网关中统一配置Swagger
  8. Android之如何设置背景的透明度
  9. nginx正向代理,反向代理概念
  10. 安卓中的@Nullable和NonNull(NotNull) 等 注释
  11. java多端登录_【Java】一个登录功能也能玩出这么多花样?sa-token带你轻松搞定多地登录、单地登录、同端互斥登录...
  12. 手机上有没有学python的软件-三款可以在安卓手机上运行Python代码的软件
  13. HTML如何消除别的块的影响,CSS清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?...
  14. 3.用户画像:方法论与工程化解决方案 --- 标签数据存储
  15. 【Linux环境下C语言编程】
  16. 锁存器怎么使用c语言编程,读引脚、读锁存器与读-改-写指令
  17. cocos2d-js 开发常见问题
  18. 解析人工智能时代蕴含的人文主义精神
  19. 生活就是这样充满一些小插曲的2020.11.21日记
  20. 浅聊古代————汉朝

热门文章

  1. MySQLSyntaxErrorException: Every derived table must have its own alias
  2. 程序员是不是真的经常在生活中被绿呢?
  3. ppt_第十五章_元基模拟染色体新陈代谢催化编码
  4. python webbrowser javascript_13.8. webbrowser — 显示网页
  5. jPage.js分页
  6. React 保存文件到本地 file-saver
  7. linux dns子域委派,bind服务器子域委派
  8. 验证控件的使用:一步一步学注册——RangeValidator控件
  9. 关于javacore和dump文件
  10. java通讯方式_Java线程通讯方式 - osc_63rgy8af的个人空间 - OSCHINA - 中文开源技术交流社区...