基于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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pinn求解ode_pt_pin

    pinn求解ode_pt_pin今天硕士论文开题答辩,想着学了这么长时间的PINN,七七八八也看了一些文献,一来是为了整理思路,二来可以方便以后回顾复习。使用PINN求解PDE与传统有限元、有限差分、谱方法等最大的区别是,无需做预先的假设,线性化和网格化。求解一般的偏微分方程的形式:PINN具体算法步骤如下:其中只有初边界训练数据包含u的值,内部配置点不包含u的值,只有定义域内部的点。(这一点一直迷糊,最近才理清楚)。PINN求解PDE框架图:可以通过自动微分最小化损失函数,得到神经网络最优参数,从而的到.

    2025年7月13日
    1
  • VDBENCH 试用

    VDBENCH 试用linux环境首先安装java环境建议直接安装jdk,32或者64,看你linux的版本。vdbench目录下 ./vdbench-t

    2022年5月12日
    40
  • sql优化的几种方式

    sql优化的几种方式一、为什么要对SQL进行优化我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。二、SQL优化的一些方法1.对查询进行优化,应尽量避免全表扫描…

    2022年6月22日
    22
  • 机器学习常见问题

    机器学习常见问题

    2021年11月19日
    53
  • Vue基础知识总结 11:前端路由vue-router

    Vue基础知识总结 11:前端路由vue-router一、前端路由vue-router1、维基百科路由就是通过互联的网络把信息从源地址传输到目的地址的活动。2、路由的机制路由包括路由和转发。路由器->公网IP->映射表->内网IP映射表:[内网ip1:电脑标识1,内网ip2:电脑标识2]3、后端渲染JSP:javaserverpage后端渲染==html+css+javajava代码的作用是从数据库中读取数据,然后将他们动态的放在页面中。后端渲染的意思就是,前端请求后端,

    2022年7月11日
    25
  • 好用的pycharm插件_手机flash player插件

    好用的pycharm插件_手机flash player插件PyCharm无敌插件推荐(一)插件安装途径Step1在文件(File)菜单中选择设置(Settings)Step2在编辑器(Editor)菜单中选择插件(Plugins)二级1.Chinese(Simplified)LanguagePack这是一款JetBrains官方自己推出的汉化插件,对于不是很擅长的英语的初学者十分友好。能够帮助初学者尽快熟悉PyCharm。…

    2022年8月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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