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

相关推荐

  • Windows宝塔面板彻底卸载_宝塔面板怎么样

    Windows宝塔面板彻底卸载_宝塔面板怎么样宝塔面板安装与卸载

  • 腾讯会议obs推流教程_流式编程 前端

    腾讯会议obs推流教程_流式编程 前端 **RTSP视频流开发**RTSP视频开发:1.使用VLC播放RTSP视频流,然后使用wireshark抓VLC的包,找到RTSP交互报文2.报文如下: OPTIONSrtsp://192.168.0.212:554/testStreamRTSP/1.0//客户端向服务器发送,说RTSP服务你又那些操作 CSeq:2 User-Age…

    2022年10月17日
  • 东芝笔记本电脑重装系统按F几(戴尔笔记本重装系统)

    东芝笔记本电脑怎么重装系统?其实笔记本东芝要怎么重装系统的方法很简单,具体要怎么给东芝笔记本电脑重装系统呢?其实笔记本重装系统是非常简单的,那笔记本东芝如何重装系统呢?那下面就让小白小编给大家介绍笔记本东芝如何重装系统的解决方法吧。大家赶紧学习东芝笔记本重装系统吧。东芝笔记本重装系统方法1、去网站下载win7旗舰版镜像文件。2、使用软碟通软件把镜像文件里面的gho.win7提取到已经制…

  • 国内比较好的OJ平台[通俗易懂]

    国内比较好的OJ平台[通俗易懂]OnlineJudge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。北京大学POJhttp://poj.org/中国最受欢迎OJ之一,各式各样各种难度的题目都有。杭州电子科技大学HDUOJhttp://acm.hdu.edu.cn/中国最受欢迎OJ之一,题目数量多,来源广。UVAht…

  • SQL之视图与索引[通俗易懂]

    SQL之视图与索引[通俗易懂]SQL之视图与索引视图的定义、修改、使用索引的创建、查看视图人们在使用数据库时,并不是直接对数据源表进行操作,通常人们只关心源表的部分数据,因此为了使得用户在查询时方便,用不着在每次查询时都编写复杂的代码(比如连接等),可以事先将用户要使用的查询结果通过视图定义在数据库中,这样人们在进行查询时只需查看视图即可,简化了用户的操作,同时使得数据同源数据分离,提高了安全性。1.视图的创建语法:

  • Nginx日志管理——了解Nginx日志选项配置以及自定义日志格式使用「建议收藏」

    Nginx日志管理——了解Nginx日志选项配置以及自定义日志格式使用「建议收藏」一、引言不管什么程序,一般都会有日志的。哪怕你在浏览器上网访问了一个网站,也会有记录保存的。在这个里互联网时代,想在网上不留下痕迹那是很难的。在我们开发一个程序,日志功能往往也是不可缺少的,今天我们就来讲讲这个Nginx的日志是怎么样来玩的。二、了解日志管理我们查看nginx安装目录下有个logs,包含了三个文件"access.log、error.log、nginx.pid"。…

发表回复

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

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