基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]

基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]最近做了一个新的项目,需要将图片或者视频中的人员是否戴安全帽识别出来,并且在网站上进行显示.首先是正常的登录注册目前登录注册有很多方式,这个比较常规,用户名密码登录,也没有写的很复杂.接下来就是主要功能页面了如上图所示,可以进行图片及视频识别图片上传,正在进行识别…

大家好,又见面了,我是你们的朋友全栈君。

最近做了一个新的项目,需要将图片或者视频中的人员是否戴安全帽识别出来,并且在网站上进行显示.使用Tensorflow + yolo3,后端框架为Django。本机配置为AMD4600+1650显卡

2022.3.27日更新:

已完成对外部摄像头的测试,功能正常!

2022.3.20 日更新:

1.重新使用Flask 写了后端

2.将视频识别的结果返回到了网页中,而不是传统的cv 窗口显示。

存在问题:内存堆积,停止请求后,测试发现cv2还会持续读取视频数据一段时间,如果此时再次进行视频或者摄像头识别容易造成内存泄露问题,暂未解决,持续优化中。

2022.3.14 日更新:

优化了后端识别代码,识别速度更快。

视频地址:tensorflow+yolo安全帽识别优化版_哔哩哔哩_bilibiliicon-default.png?t=M276https://www.bilibili.com/video/BV1Aq4y1q7Hk?p=2

tensorflow+yolo安全帽识别优化版

首先是正常的登录注册

def my_login(request):
    if request.method == "GET":
        return render(request, 'auth/auth.html')
    else:
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('pwd')
            next = form.cleaned_data.get("next")
            if next:
                next_url = next.split("=")[1]
            else:
                next_url = ""
            user = authenticate(request,username=username,password=password)
            # print("user",user)
            if user:
                login(request,user)
                request.session.set_expiry(None)
                data = {
                    "next_url":next_url
                }
                return restful.result(data=data)
            else:
                return restful.noauth(message="用户名或者密码错误!")
        else:
            print(form.get_error())
            return restful.paramserror(form.get_error())

基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]

目前登录注册有很多方式,这个比较常规,用户名密码登录,也没有写的很复杂.

接下来就是主要功能页面了

部分识别代码:

        while vid.isOpened():
            _q, image = vid.read()
            frame_id += 1
            t1 = time.time()
            image_h, image_w, _ = image.shape
            bbox_thick = int(1.5 * (image_h + image_w) / 600)

            person_box, helmet_box, bboxes = T.detect_image(image)
            person_box = utils.xyxy2xywh(person_box)
            features = encoder(image, person_box)
            detections = [Detection(bbox, 1.0, feature) for bbox, feature in zip(person_box, features)]
            boxes = np.array([d.tlwh for d in detections])
            scores = np.array([d.confidence for d in detections])
            indices = preprocessing.non_max_suppression(boxes, nms_max_overlap, scores)
            detections = [detections[i] for i in indices]
            [detections[i].match_helmet(helmet_box) for i in range(len(detections))]

            tracker.predict()
            tracker.update(detections, frame_id)
            if len(tracker.lossed) > 0:
                pass
            for id, track in enumerate(tracker.tracks):
                if not track.is_confirmed() or track.time_since_update > 1:
                    continue
                bbox = track.to_tlbr()
                cv2.rectangle(image, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), track.color,
                              bbox_thick)
                cv2.putText(image, str(track.track_id), (int(bbox[0]), int(bbox[1])), 0, 0.0015 * image_h, (0, 255, 0),
                            bbox_thick // 2)
                if track.is_no_helmet:
                    cv2.putText(image, str('no helmet'), (int(bbox[0] + bbox[2]) // 2, int(bbox[1])), 0,
                                0.0012 * image_h, (0, 0, 255), bbox_thick // 2)
                    no_hat += 1
                else:
                    if track.helmet is not None:
                        bbox = track.helmet
                        cv2.rectangle(image, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), track.color,
                                      bbox_thick)
                        cv2.putText(image, str('Helmet'), (int(bbox[0] + bbox[2]) // 2, int(bbox[1])), 0,
                                    0.0012 * image_h, (0, 0, 255), bbox_thick // 2)

                for i, (x, y) in enumerate(track.tracker_path[1:]):
                    pre_x, pre_v = track.tracker_path[i]
                    cv2.line(image, (int(pre_x), int(pre_v)), (int(x), int(y)), track.color, bbox_thick)
            cv2.imshow('VideoShow---Press q to exit!', image)

            fps = (fps + (1. / (time.time() - t1))) / 2
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
            # elif cv2.getWindowProperty("VideoShow", cv2.WND_PROP_AUTOSIZE) < 1:
            #     break
            # if cv2.waitKey(1) == 27:
            #     break
            # print("no_hat",no_hat)
        vid.release()
        cv2.destroyAllWindows()

基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]

如上图所示,可以进行图片及视频识别

正在进行识别

基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]

识别代码使用的是tensorflow+opencv ,识别结果还可以.

具体效果

此项目的完整带啊以及上传到了面包多,需要的可以前往下载,传送门:?正在为您运送作品详情

或者+qq1527507926

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144443.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • drozer 渗透测试_什么是渗透

    drozer 渗透测试_什么是渗透安卓渗透测试工具——drozer安装使用教程一、环境准备二、安装三、连接使用

  • Python入门:Anaconda和Pycharm的安装和配置「建议收藏」

    Python入门:Anaconda和Pycharm的安装和配置「建议收藏」子曰:“工欲善其事,必先利其器。”学习Python就需要有编译Python程序的软件,一般情况下,我们选择在Python官网下载对应版本的Python然后用记事本编写,再在终端进行编译运行即可,但是对于我这样懒的小白,我喜欢装一些方便的软件来辅助我编写程序。在学习Java时,正常情况选择安装JDK然后配置环境变量后,用记事本编写程序再在终端编译运行即可,而我一般选择安装JDK+MyEclipse。…

  • 新编原创-Hcash(hsr)矿工指南,含出矿算法分析、各种显卡算力分析和收益计算模型

    新编原创-Hcash(hsr)矿工指南,含出矿算法分析、各种显卡算力分析和收益计算模型Hcash超级现金于2017-9-13日正式开始切换到POW/POS挖矿模式,本文旨在修正和完善前篇【深度分析-从源代码看Hcash(超级现金)的矿业指南和矿工规划,含挖矿收益预估】中的分析,针对HSR矿工进行详尽的指导和收益模型分析。

  • 十五种文本编辑器

    十五种文本编辑器很多时候比如编程查看代码或者打开各种文档下我们都会用到文本编辑器,Windows自带的记事本功能很简陋并且打开大文件很慢,因此很多童鞋都会有自己喜欢的一款文本编辑器。在这里,西西挑选前15个最佳的文本编辑器,这些编辑器实际上主要适合程序员!如果觉得这些文本编辑器足够您的使用,欢迎点赞,如果还有更好的,可以给我们推荐哦。1.Notepad++中文版:这是Windows记事本一个最好…

  • Mock测试用例_测试用例库

    Mock测试用例_测试用例库近期在重构一些旧项目,看到之前同事编写的测试用例是使用注入SpringJUnit4ClassRunner直接注册实现层然后测试需要操作的方法是否可运行。虽然这样说是可以达到测试的想法。但是如果要使用

  • 分页和多条件查询功能

    分页和多条件查询功能

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号