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()
  • 相关阅读:
    如何删除windows服务zz 重新安装PostgreSQL时删除上次遗留service的方法
    如何配置OGRE 1.7.0+CEGUI 0.7.1
    [原]一个由memset引发的知识点
    ArcGis测距问题
    自己动手,制作.net35离线安装包
    TTS语音合成
    Acess字段名用到与系统冲突的特殊名时的处理
    程序运行长期等待时显示等待动画
    修改Windows 2003 SOCKET端口数量默认5000限制
    服务器上发布的网站应用80端口时内网可以访问,外网不能访问
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11181157.html
Copyright © 2011-2022 走看看