zoukankan      html  css  js  c++  java
  • 检测行人数目

    import cv2
    import time
    import numpy as np
    import pymysql
    import datetime
    
    def get_people_num(max_num):
        capture=cv2.VideoCapture("acvis09-5950.AVI")#打开本机摄像头
        classifier=cv2.CascadeClassifier('cascades.xml')#加载分类器
        color=(0,255,0)
        '''connect = pymysql.Connect(#连接到数据库
            host='192.168.43.86',
            port=3306,
            user='root',
            password='root',
            db='mydb',
            charset='utf8'
        )'''
        place="****"
        # 生成游标对象
        #cursor = connect.cursor()
        while(True):#获取每一帧q
            ret,frame=capture.read()#读取当前图像
            gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#灰度化处理
            people_num=0#定义本次图片中的人数
            time.sleep(5)#休眠一秒,减少运算负担
            blur = cv2.GaussianBlur(gray, (5, 5), 0)#高斯模糊
            kernel = np.ones((5, 5), np.uint8)
            erosion = cv2.erode(blur, kernel, iterations=1)#腐蚀
            faceRects = classifier.detectMultiScale(erosion, scaleFactor=1.2, minNeighbors=3,minSize=(32, 32))
    
    
            # 将人脸所有圈起来形成一个集合
            for faceRect in faceRects:
                x,y,w,h=faceRect
                people_num+=1
                cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
                font = cv2.FONT_HERSHEY_SIMPLEX  # 获取内置字体
                # 调用函数,对人脸坐标位置,添加一个(x+30,y+30)的矩形框用于显示当前捕捉到了多少人脸图片
                cv2.putText(frame, ('%d' % people_num), (x + 30, y + 30), font, 1, (255, 0, 255), 4)
                cv2.imshow('frame', frame)
            now=str(datetime.datetime.now())
            findsql="SELECT THRESHOLD FROM HUMANTRAFFIC WHERE SITE='%s'"%("KOI")
            out=cursor.execute(findsql)
            print(cursor.fetchone())
            max_num=int(cursor.fetchone()[0])
            print(max_num)
            if people_num>8:
                print(now[0:19])
                sql_insert = """INSERT INTO ALARM(SITE,TIME,NUM) VALUES (%s, %s,%s)"""
                result = cursor.executemany(sql_insert, [("KOI",now[0:19],str(people_num))])
                print(result)
                print("超过最大阈值人数%d人"%(max_num))
                update_sql = "UPDATE HUMANTRAFFIC SET LAST_UPDATED='%s', STATE='%s', NUM='%s' WHERE  SITE='%s'" % (
                    #now[0:19], "异常", str(people_num), "KOI")
                print(update_sql)
                cursor.execute(update_sql)
                connect.commit()
            else:
                update_sql = "UPDATE HUMANTRAFFIC SET LAST_UPDATED='%s', STATE='%s', NUM=%s WHERE  SITE='%s'" % (
                   now[0:19],"正常",str(people_num),"KOI")
                print(update_sql)
                cursor.execute(update_sql)
                connect.commit()
            c = cv2.waitKey(10)
            if c & 0xFF == ord('q'):
                break
        capture.release()  # 释放摄像头并销毁所有窗口
        cv2.destroyAllWindows()  # 销毁所有的窗口
        print('Finished.')
    
    def main():
        get_people_num(8)
    
    main()
  • 相关阅读:
    .Net 平台兼容性分析器
    编程中常见的Foo,是什么意思?
    SoC里住着一只“猫” 网络性能全靠它【转】
    Linux内核:VFIO Mediated Device(vfio-mdev)内核文档(翻译)【转】
    vfio-mdev逻辑空间分析【转】
    29. secure world对smc请求的处理------monitor模式中的处理【转】
    一步步教你:如何用Qemu来模拟ARM系统【转】
    2. [mmc subsystem] mmc core数据结构和宏定义说明【转】
    OP-TEE驱动篇----驱动编译,加载和初始化(一)【转】
    Forkjoin线程池
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11181157.html
Copyright © 2011-2022 走看看