628|2

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【玄铁杯第三届RISC-V应用创新大赛】AI+岗位检测 [复制链接]

 

AI+岗位检测

作者:zkft

项目背景

随着企业规模的不断扩大和工作流程的复杂化,有效地管理员工在岗位上的情况成为了一项重要的任务。传统的人工巡检方式往往效率低下且容易出错,因此需要引入自动化技术来提高管理效率和准确性。目标检测算法是计算机视觉领域的一项核心技术,可以识别和定位图像或视频中的特定目标,因此为各个领域进行赋能。

作品简介

       本项目旨在开发一套使用目标检测算法的系统,以实时监测员工在岗位上的情况。该系统利用摄像头捕获员工的图像或视频,并通过目标检测算法分析处理。系统能够准确判断员工是否在岗位上,以及记录员工的串岗行为和离岗时间。

 

系统框图

  

 

各部分功能说明

    项目基于先进的目标检测算法,结合深度学习技术,实现对员工的实时监测和状态识别。系统具备以下功能:

1.目标检测:通过训练目标检测模型,实现对员工图像或视频中的目标(员工)进行检测和定位。

2.岗位情况判断:根据目标检测结果,判断员工是否在岗位上,以及是否符合预设的岗位框中。

3.串岗行为识别:通过连续监测员工的移动情况,识别出可能的串岗行为,并进行提示或记录。

4.离岗时间记录:记录员工离开岗位的时间,并生成相应的报表或统计数据。

该系统能够提高企业的管理效率和准确性,帮助企业及时发现和处理员工的不当行为,并为管理决策提供可靠的数据支持。

视频演示

播放器加载失败: 未检测到Flash Player,请到安装
456-1

 

项目源码

         由于没有github和其他仓库,这就选几个主要的函数来讲吧。

Area=[[10,50,350,700], [370,50,750,700], [770,50,1200,700] ]       #自己设定的岗位检测区域

#获取检测框中心点的坐标,输入左上和右下的坐标,返回中心点的坐标

def get_center_coor(x1,y1,x2,y2):     return (x2-x1)/2+x1,(y2-y1)/2+y1

'''

该函数接受两个参数:一个是二维数组 "Area",包含了若干个矩形区域的坐标(每个矩形由左上角和右下角坐标确定),另一个是二维数组 "person_center_coor",包含了若干个人的中心坐标(每个人由一个二元组表示)。

该函数的作用是检测每个人所在的区域,判断其是否在 "Area" 数组中的某个矩形区域内,如果是,则将对应的 "person_coor_flag" 标记为 1,否则为 0。最后返回标记数组 "person_coor_flag" 和未匹配到任何区域的人员索引。

简单来说,该函数的作用是用于人员区域匹配,判断哪个人员处于哪个区域中。其中区域通过 "Area" 参数给定,人员的坐标通过 "person_center_coor" 给定。函数会遍历所有人员,计算其位置是否在任意一个区域内,并返回相应的匹配结果。

'''

  • def Area_detect(Area,person_center_coor):
  •     person_coor_flag = np.zeros(len(Area), dtype=int)
  •     for x, y in person_center_coor:
  •         for j in range(len(Area)):
  •             x1, y1, x2, y2 = Area[j]
  •             if x < x2 and x > x1 and y > y1 and y < y2:
  •                 person_coor_flag[j] += 1     # 是否全部为1
  •     return person_coor_flag,np.argwhere(person_coor_flag == 0)  # 找出了离职人员的位置

 

#下面这些代码用于判断人员在岗情况,无人在岗、有人串岗、员工离开岗位

  • person_coor_flag, preson_coor = Area_detect(Area, person_center_coor)
  • #print(person_coor_flag)
  • if (person_coor_flag == 1).all():
  • #print(str(len(person_coor_flag)) + "人全部在岗")
  • img_PIL = Image.fromarray(cv2.cvtColor(im0, cv2.COLOR_BGR2RGB))
  • font = ImageFont.truetype('./msyh.ttf', 30)
  • position = (im0.shape[1] - 200, 5)
  • draw = ImageDraw.Draw(img_PIL)
  • draw.text(position, str(len(person_coor_flag)) + "人全部在岗", font=font, fill=(255, 0, 0))
  • im0 = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)
  • elif (person_coor_flag == 0).all():
  • print("无人在岗")
  • elif (person_coor_flag == 0).any() and (person_coor_flag >= 2).any():
  • #print("有人串岗")
  • img_PIL = Image.fromarray(cv2.cvtColor(im0, cv2.COLOR_BGR2RGB))
  • font = ImageFont.truetype('./msyh.ttf', 30)
  • position = (im0.shape[1] - 150, 35)
  • draw = ImageDraw.Draw(img_PIL)
  • draw.text(position, "有人串岗", font=font, fill=(255, 0, 0))
  • im0 = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)
  • if len(preson_coor) != 0 and sum(person_coor_flag)<len(person_coor_flag): # 找出离职人员的位置
  • global t1_flag,time1,t2
  • if t1_flag == 1: # 开始计时 检测到有人离职了
  • t1_flag = 0
  • time1 = time_sync()
  • print(person_coor_flag)
  • print("show_flag:",t1_flag,time1)
  • elif t1_flag==0 and sum(person_coor_flag)==len(person_coor_flag):
  • t2 = time_sync()
  • t1_flag=1
  • if t2 - time1>2: #滤波一部分
  • global show_flag,show_str
  • show_flag=50
  • print("员工离开岗位 " + str(t2 - time1) + " 秒")
  • img_PIL = Image.fromarray(cv2.cvtColor(im0, cv2.COLOR_BGR2RGB))
  • font = ImageFont.truetype('./msyh.ttf', 30)
  • position = (im0.shape[1] - 350, 65)
  • draw = ImageDraw.Draw(img_PIL)
  • show_str="员工离开岗位 {:.2f} 秒".format(t2-time1)# % ()
  • draw.text(position,show_str, font=font, fill=(255, 0, 0))
  • im0 = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)

#这些代码负责将获取到的视频流通过websocket协议将图片转成base64发送给licheepi4A,进行识别。并返回检测结果。

  • input_hight = 384
  • input_width = 640
  • async def ws_client(url):
  • counter=0
  • while (True):
  • # 读取某一帧
  • ref, frame = capture.read()
  • # 当读取到最后一帧
  • # 将图片转换为 Base64 字符串
  • retval, buffer = cv2.imencode('.jpg', frame)
  • jpg_as_text = base64.b64encode(buffer)
  • if ref == False:
  • capture.release()
  • break
  • # dataset = LoadImages1(frame, img_size=imgsz, stride=stride, auto=pt and not jit)
  • # im0= pred_img(dataset,Area,flag=flag)
  • async with websockets.connect(url) as websocket:
  • await websocket.send(jpg_as_text)
  • response = await websocket.recv()
  • string_as_list = eval(response)
  • image_data = image_preprocess(np.copy(frame), [input_hight, input_width])
  • image = draw_bbox(image_data, string_as_list)
  • if video_save_path != "":
  • out.write(image)
  • asyncio.run(ws_client('ws://192.168.3.35:9999'))#

#这些代码则在licheepi4A进行运行,和摄像头端使用websocket协议进行通讯,将接收到的base64转图片的操作,同时进行识别操作,返回识别后的结果。

  • input_hight = 384
  • input_width = 640
  • async def handler(websocket):
  • data = await websocket.recv()
  • print("websocket get data",data[0:50])
  • original_image=base64_to_image(data)
  • rgb_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)
  • image_preprocessed = image_preprocess(np.copy(rgb_image), [input_hight, input_width])
  • image_preprocessed = image_preprocessed / 255.0
  • img_ndarray = np.array(image_preprocessed).astype("float32")
  • img_ndarray = img_ndarray.transpose(2, 0, 1)
  • img_ndarray.tofile("image_preprocessed.tensor", "\n")
  • img_ndarray.tofile("image_preprocessed.bin")
  • model_inference_command = "./yolov5n_example ./hhb_out/hhb.bm image_preprocessed.bin"
  • os.system(model_inference_command)
  • bboxes = []
  • with open("detect.txt", 'r') as f:
  • x_min = f.readline().strip()
  • while x_min:
  • y_min = f.readline().strip()
  • x_max = f.readline().strip()
  • y_max = f.readline().strip()
  • probability = f.readline().strip()
  • cls_id = f.readline().strip()
  • bbox = [float(x_min), float(y_min), float(x_max), float(y_max), float(probability), int(cls_id)]
  • #print(bbox)
  • bboxes.append(bbox)
  • x_min = f.readline().strip()
  • await websocket.send(str(bboxes))
  • print("Send reply")
  • async def main():
  • async with websockets.serve(handler, "192.168.3.35", 9999):
  • await asyncio.Future() # run forever
  • if __name__ == "__main__":
  • asyncio.run(main())

 

参考的博文

Yolov5n的npu的环境配置:

https://wiki.sipeed.com/hardware/zh/lichee/th1520/lpi4a/8_application.html#Yolov5n

https://wiki.sipeed.com/hardware/zh/lichee/th1520/lpi4a/1_intro.html

https://bbs.eeworld.com.cn/thread-1264628-1-1.html

 

项目总结

        本项目在完成度方面,已经实现了基于目标检测算法的员工在岗位情况监测系统。通过使用先进的深度学习技术,结合训练模型和实时图像处理,系统能够准确地识别和定位员工,并判断其是否在岗位上。同时,系统还具备串岗行为识别和离岗时间记录的功能,能够帮助企业及时发现员工的不当行为,并提供相关数据支持。

        在技术探索方面,项目利用目标检测算法和深度学习技术实现员工在岗位情况的监测。这涉及到模型的训练和优化,以及对实时图像或视频的处理和分析。通过不断调整和改进算法,提升模型的准确性和稳定性,项目取得了一定的技术突破。

项目的创新点主要体现在以下几个方面

         1.实时监测:项目能够实时监测员工在岗位上的情况,而不需要人工巡检,大大提高了管理效率。2.串岗行为识别:通过连续监测员工的移动轨迹和姿势变化,系统能够识别出可能的串岗行为,帮助企业及时发现问题并采取措施离岗时间记录:系统能够准确记录员工离开3岗位的时间,并生成相应的报表和统计数据,为管理决策提供参考依据。4.结合深度学习技术:项目利用深度学习技术,通过训练模型实现目标检测和状态判断,提高了员工在岗位情况监测的准确性和

稳定性。

       总体而言,该项目在完成度上已经具备基本功能,通过技术探索和创新点的引入,实现了对员工在岗位情况的自动化监测,为企业提供了一种高效、准确的管理手段。未来可以进一步完善和优化系统,提升其可扩展性和适用性。

其他

该项目目前还有一些可能的优化点:

1.图像分辨率:提高监测摄像头的图像分辨率可以帮助提高目标检测的准确性。更高的分辨率可以提供更多的细节和清晰度,使得目标检测算法更容易捕获和识别员工的姿势和状态。

2.算法性能优化:对目标检测算法进行性能优化,包括加速模型推理的速度和降低计算资源的消耗。这可以通过量化模型、剪枝或使用轻量级模型来实现。

3.姿势识别技术:引入姿势识别技术,结合目标检测算法,可以更准确地判断员工是否符合预设的姿势或状态,从而提高系统对员工在岗位情况的判断准确性

4.环境适应能力:考虑不同光照条件和环境下的目标检测准确性,可以引入光照增强技术或者对抗性训练技术,以提高系统在各种环境下的适应能力

5.异常行为检测: 除了串岗行为识别外,可以进一步引入异常行为检测技术,识别员工在岗位上的其他不当行为,例如长时间不动或异常活动等。

6.数据隐私保护: 在系统设计中考虑员工隐私保护的问题,确保采集和处理的员工图像数据符合相关法律法规,并采取相应的数据加密和安全措施。

通过优化以上方面,可以进一步提升目标检测系统的性能和准确性,使其更加适用于复杂的实际工作场景,并且能够更好地满足企业的管理需求。

最新回复

怎么做到识别这么流畅的呀,我用yolov5n识别一张图片都要2,3秒   详情 回复 发表于 2023-12-5 09:52
点赞 关注
 
 

回复
举报

6966

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

目标检测算法系统是个本项目的重点

 
 
 

回复

282

帖子

2

TA的资源

一粒金砂(高级)

板凳
 

怎么做到识别这么流畅的呀,我用yolov5n识别一张图片都要2,3秒

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表