zkft

  • 2024-03-13
  • 回复了主题帖: 颁奖礼:平头哥玄铁杯第三届获奖名单揭晓,纪念一起对AI进行小小探索的你们

    个人信息无误

  • 2023-12-02
  • 发表了主题帖: 【玄铁杯第三届RISC-V应用创新大赛】AI+岗位检测

    AI+岗位检测 作者:zkft 项目背景 随着企业规模的不断扩大和工作流程的复杂化,有效地管理员工在岗位上的情况成为了一项重要的任务。传统的人工巡检方式往往效率低下且容易出错,因此需要引入自动化技术来提高管理效率和准确性。目标检测算法是计算机视觉领域的一项核心技术,可以识别和定位图像或视频中的特定目标,因此为各个领域进行赋能。 作品简介        本项目旨在开发一套使用目标检测算法的系统,以实时监测员工在岗位上的情况。该系统利用摄像头捕获员工的图像或视频,并通过目标检测算法分析处理。系统能够准确判断员工是否在岗位上,以及记录员工的串岗行为和离岗时间。   系统框图      各部分功能说明     项目基于先进的目标检测算法,结合深度学习技术,实现对员工的实时监测和状态识别。系统具备以下功能: 1.目标检测:通过训练目标检测模型,实现对员工图像或视频中的目标(员工)进行检测和定位。 2.岗位情况判断:根据目标检测结果,判断员工是否在岗位上,以及是否符合预设的岗位框中。 3.串岗行为识别:通过连续监测员工的移动情况,识别出可能的串岗行为,并进行提示或记录。 4.离岗时间记录:记录员工离开岗位的时间,并生成相应的报表或统计数据。 该系统能够提高企业的管理效率和准确性,帮助企业及时发现和处理员工的不当行为,并为管理决策提供可靠的数据支持。 视频演示 [localvideo]5dd8e25de9fcb53c99e59c85c4f1a639[/localvideo]   项目源码          由于没有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.数据隐私保护: 在系统设计中考虑员工隐私保护的问题,确保采集和处理的员工图像数据符合相关法律法规,并采取相应的数据加密和安全措施。 通过优化以上方面,可以进一步提升目标检测系统的性能和准确性,使其更加适用于复杂的实际工作场景,并且能够更好地满足企业的管理需求。

最近访客

< 1/1 >

统计信息

已有11人来访过

  • 芯积分:21
  • 好友:--
  • 主题:4
  • 回复:4

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言