简单易上手YOLOV5-deepsort之撞线代码+Mysql数据库传输

目录

一、撞线代码

(1)撞线完整代码

(2)Deepsort-speed代码中修改polygon

二、将算法结果传到Mysql数据库中

(1)数据库部分

 (2)算法部分



一、撞线代码

之前的简单易上手YOLOV5-deepsort(Windows)的博客已经和大家介绍了如何修改撞线,鉴于一些小伙伴需要撞线的代码,我在这里写出来

(1)撞线完整代码

name = 'egg'
    # 根据视频尺寸,填充一个polygon,供撞线计算使用
    mask_image_temp = np.zeros((1080, 1920), dtype=np.uint8)

    # 初始化2个撞线polygon(蓝色)
    list_pts_blue = [[850, 100], [850, 850], [880, 850], [880, 100]]
    ndarray_pts_blue = np.array(list_pts_blue, np.int32)
    polygon_blue_value_1 = cv2.fillPoly(mask_image_temp, [ndarray_pts_blue], color=1)
    polygon_blue_value_1 = polygon_blue_value_1[:, :, np.newaxis]

    # 填充第二个polygon(黄色)
    mask_image_temp = np.zeros((1080, 1920), dtype=np.uint8)
    list_pts_yellow = [[820, 100], [820,850], [850, 850], [850, 100]]
    ndarray_pts_yellow = np.array(list_pts_yellow, np.int32)
    polygon_yellow_value_2 = cv2.fillPoly(mask_image_temp, [ndarray_pts_yellow], color=2)
    polygon_yellow_value_2 = polygon_yellow_value_2[:, :, np.newaxis]

    # 撞线检测用mask,包含2个polygon,(值范围 0、1、2),供撞线计算使用
    polygon_mask_blue_and_yellow = polygon_blue_value_1 + polygon_yellow_value_2

    # 缩小尺寸,1920x1080->960x540
    polygon_mask_blue_and_yellow = cv2.resize(polygon_mask_blue_and_yellow, (960, 540))

    # 蓝 色盘 b,g,r
    blue_color_plate = [255, 0, 0]
    # 蓝 polygon图片
    blue_image = np.array(polygon_blue_value_1 * blue_color_plate, np.uint8)

    # 黄 色盘
    yellow_color_plate = [0, 255, 255]
    # 黄 polygon图片
    yellow_image = np.array(polygon_yellow_value_2 * yellow_color_plate, np.uint8)

    # 彩色图片(值范围 0-255)
    color_polygons_image = blue_image + yellow_image
    # 缩小尺寸,1920x1080->960x540
    color_polygons_image = cv2.resize(color_polygons_image, (960, 540))

    # list 与蓝色polygon重叠
    list_overlapping_blue_polygon = []

    # list 与黄色polygon重叠
    list_overlapping_yellow_polygon = []

    # 进入数量
    down_count = 0
    # 离开数量
    up_count = 0

    font_draw_number = cv2.FONT_HERSHEY_SIMPLEX
    draw_text_postion = (int(960 * 0.01), int(540 * 0.05))
    det = Detector()
        if len(list_bboxs) > 0:
            # ----------------------判断撞线----------------------
            for item_bbox in list_bboxs:
                x1, y1, x2, y2, label, track_id = item_bbox

                # 撞线检测点,(x1,y1),y方向偏移比例 0.0~1.0
                y1_offset = int(y1 + ((y2 - y1) * 0.6))

                # 撞线的点
                y = y1_offset
                x = x1

                if polygon_mask_blue_and_yellow[y, x] == 1:
                    # 如果撞 蓝polygon
                    if track_id not in list_overlapping_blue_polygon:
                        list_overlapping_blue_polygon.append(track_id)
                    pass

                    # 判断 黄polygon list 里是否有此 track_id
                    # 有此 track_id,则 认为是 外出方向
                    if track_id in list_overlapping_yellow_polygon:
                        # 外出+1
                        up_count += 1
                        print(
                                f'类别: {label} | id: {track_id} | 上行撞线 | 上行撞线鸡蛋总数: {up_count} | 上行鸡蛋id列表: {list_overlapping_yellow_polygon}')

                        # 删除 黄polygon list 中的此id
                        list_overlapping_yellow_polygon.remove(track_id)
                        pass
                    else:
                        # 无此 track_id,不做其他操作
                        pass

                elif polygon_mask_blue_and_yellow[y, x] == 2:
                    # 如果撞 黄polygon
                    if track_id not in list_overlapping_yellow_polygon:
                        list_overlapping_yellow_polygon.append(track_id)
                    pass

                    # 判断 蓝polygon list 里是否有此 track_id
                    # 有此 track_id,则 认为是 进入方向
                    if track_id in list_overlapping_blue_polygon:
                        # 进入+1
                        down_count += 1
                        print(
                                f'类别: {label} | id: {track_id} | 下行撞线 | 下行撞线鸡蛋总数: {down_count} | 下行鸡蛋id列表: {list_overlapping_blue_polygon}')
                        # 删除 蓝polygon list 中的此id
                        list_overlapping_blue_polygon.remove(track_id)

                        pass
                    else:
                        # 无此 track_id,不做其他操作
                        pass
                    pass
                else:
                    pass
                pass
            pass

(2)Deepsort-speed代码中修改polygon


在代码中的demo.py,可以看到在开头的时候填充了polygon,然后在这个基础上分别画了蓝色polygon和黄色polygon,这两个就是撞线,以下代码即通过经过这两条线判断经过或者返回累计个数。

(1)list_pts_blue就是蓝色这个多边形的左边,可以看到有四个点坐标(x,y),这就说明这是四边形,左边点的顺序依次为左上,左下,右下,右上,即逆时针转一圈。修改位置左边或者添加坐标点的个数即可以实现多边形的切换。

(2)blue_color_plate为多边形的颜色,通过RGB值。可以修改撞线的不同的颜色。

二、将算法结果传到Mysql数据库中
 

yolov5+deepsort算法常见的检测结果就是一些类被和个数等,要传递这些数据,就需要在算法里增加代码,并且配置好本地mysql数据库,建好数据库的表。

(1)数据库部分

首先需要安装数据库,建表,然后新建用户,本次就不过多赘述了这些内容了,只是简述一下如何使用。

首先use mysql然后select host,user from user;可以看到自己可以连接的数据库,如果想要连接其他电脑的数据库,一般更改权限,我这里是终端设备给我电脑传输数据,于是我使用update user set...这句话允许所有的用户连接我的数据库(本人比较懒,图方便)。

然后使用flush privileges;更新一下即可

注意:最好将电脑防火墙关闭。

 (2)算法部分

算法代码如下:

    def db_use(table_name, value):
        # 打开数据库连接
        db = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="123456", db="egg", charset="utf8")
        # SQL 更新语句
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        sql = "INSERT %s (fresh,brown,broken) VALUES ('%d','%d','%d')" % \
                  (table_name, value[0], value[1],value[2])
        # try:
        # 执行SQL语句
        print("start in DB")
        cursor.execute(sql)
        # 提交到数据库执行
        try:
            db.commit()
            print("done")
        except:
            # 发生错误时回滚
            db.rollback()
            print("some problem")
        # 关闭数据库连接
        db.close()

这里是编写了一个数据库的函数,这个函数用来连接数据库,传递数据

db = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="123456", db="egg", charset="utf8")

这句话里localhost是主机名,也就是你要将数据传输的地方,如果是本地就是localhost,也可以是其他电脑的ip地址,例如“192.168.85.45”。port是端口号,这个一般不用改,user是数据库的用户名,passwd是密码,db是你要传输的数据库的名称,charset=utf-8是世界通用语言编码。

sql = "INSERT %s (fresh,brown,broken) VALUES ('%d','%d','%d')" % \
                  (table_name, value[0], value[1],value[2])

这是sql语句,表示插入数据,具体使用方法搜sql语句的基本用法即可。

然后只需要在主函数中调用即可

value = [int(fresh), int(brown), int(broken)}
Detector.db_use('egg', value)

你在哪个类里面写就写这个"类.db_use()"即可,而value是你要传的值。

后续我将不定期分享自己所学知识,感谢大家的支持,谢谢

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
YOLOv5-6.0是YOLOv5系列的最新版本,它具有以下特点和更新内容: 1. 友好且易于上YOLOv5系列一直以来都非常友好且易于上,兼容性也比较高。它不会对训练的硬件配置有很多苛刻的要求,从搭建环境到训练再到应用,都非常简便。这使得使用者能够更多地将时间花在实际的应用场景的协调和改进上。\[1\] 2. 更新的源码和信息:YOLOv5-6.0的源码可以在GitHub上找到,链接为https://github.com/ultralytics/yolov5/tree/v6.0。此外,还有一些关于更新信息的说明可以在https://github.com/ultralytics/yolov5/releases/tag/v6.0找到。\[1\] 3. 网络结构的改进:YOLOv5-6.0在Conv模块中封装了卷积(Conv2d)、Batch Normalization和激活函数,并使用autopad(k, p)实现了padding的效果。此外,YOLOv5-6.0版本使用Swish作为激活函数,代替了旧版本中的Leaky ReLU。还引入了Focus模块,进一步改进了网络结构。\[2\] 4. 可视化网络结构:可以使用netron工具来可视化YOLOv5的网络结构。安装netron工具的命令是snap install netron,然后输入netron即可打开软件。YOLOv5提供的网络文件是yaml格式,可以转换成onnx模型进行可视化。需要注意的是,可视化的结构可能与网络本身定义的有一定的变化,比如没有bn、激活函数变化了。\[3\] 总结起来,YOLOv5-6.0是YOLOv5系列的最新版本,它在易用性、网络结构和可视化方面都有一些改进和更新。 #### 引用[.reference_title] - *1* [【YOLOYOLOv5-6.0环境搭建(不定时更新)](https://blog.csdn.net/qq_44703886/article/details/118851718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* [YOLOv5-v6.0学习笔记](https://blog.csdn.net/baoli8425/article/details/122154078)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v4^insert_chatgpt"}} ] [.reference_item] - *3* [【yolov5系列】yolov5 v6.0 环境配置、图片视频测试、模型可视化、v6.0的更新内容](https://blog.csdn.net/magic_ll/article/details/121352907)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值