如何使用python实现监控视频人数统计

  介绍

小编给大家分享一下如何使用python实现监控视频人数统计,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

一、图示

如何使用python实现监控视频人数统计”> <br/> <img src=

客户端请求输入一段视频或者一个视频流,输出人数或其他目标数量,上报给上层服务器端,即提供一个http API调用算法统计出人数,最终http上报总人数

二,准备

相关技术<强> python pytorch opencv http协议后请求

<强>瓶

瓶是一个python实现网络开发的微框架,对于像我对网页框架不熟悉的人来说还是比较容易上手的。

<强>瓶安装

sudo  pip  install 瓶

<强>三,一个简单服务器应用

为了稍微了解一下瓶是如何使用的,先做一个简单的服务器例子。

第一个文件你好。py .

得到flask  import 瓶   app =,瓶(__name__)   ,   @app.route (“/?   def  hello ():   return 才能;& # 39;hello 世界! & # 39;   ,   @app.route (“/python")   def  hello_python ():   return 才能;& # 39;hello  python ! & # 39;   ,   if  __name__ ==, & # 39; __main__ # 39;:   app.run才能(主机=& # 39;0.0.0.0 # 39;)

app.run(主机=' 0.0.0.0 # 39;)表示现在设定的ip为0.0.0.0,并且设定为0.0.0.0是非常方便的,如果你是在一台远程电脑上设置服务器,并且那台远程电脑的ip是172.1.1.1,那么在本地的电脑上可以设定ip为172.1.1.1来向服务器发起请求。

@app.route(& # 39;/& # 39;)表示发送请求的地址是http://0.0.0.0:5000, @app.route (“/python")表示发送请求的地址为http://0.0.0.0:5000 python。

第二个文件是request.py

import 请求   ,   时间=url  & # 39; http://0.0.0.0:5000 & # 39;   时间=r  requests.get (url)   打印(r.status_code)   打印(r.text)   ,   时间=url  & # 39; http://0.0.0.0:5000 python # 39;   时间=r  requests.get (url)   打印(r.status_code)   打印(r.text)

<强>四,向服务器发送图片

服务器代码

#编码:utf - 8   得到flask  import 请求,烧瓶   import 操作系统   app =,瓶(__name__)   ,   @app.route(“/?,,方法=[& # 39;文章# 39;])   def  get_frame ():   时间=upload_file 才能;request.files[& # 39;文件# 39;】   old_file_name 才能=upload_file.filename   file_path 才能=,os.path.join(& # 39;/地方/分享/DeepLearning& # 39;,, & # 39;新# 39;,+,old_file_name)   ,   if 才能;upload_file:   ,,,,,upload_file.save (file_path)   ,,,,,print “success"   ,,,,,return  & # 39;成功# 39;   其他的才能:   ,,,,,return  & # 39;失败# 39;   ,   ,   if  __name__ ==,“__main__":   ,,,app.run (“0.0.0.0",,端口=5000)

<强>客户端代码

import 请求   ,   时间=url “http://0.0.0.0:5000"   ,   filepath=& # 39;。/t2.jpg& # 39;   时间=split_path  filepath.split (& # 39;/& # 39;   时间=filename  split_path [1]   打印(文件名)   ,=file 开放(filepath, & # 39; rb # 39;)   files =,{& # 39;文件# 39;:(文件名,文件,& # 39;图像/jpg # 39;)}   ,   时间=r  requests.post (=url, files 文件)   result =r.text   print 结果

这种情况长传图片是最快的,比用opencv先打开后传递象素级的数字要快很多。

五,最终关键yolov5调用代码:

# !/usr/bin/env  python   #,- *安康;编码:utf-8  - * -   #,@Time ,,,: 2021/2/20  18:19   #,@Author ,: xiaorun   #,@Site ,,,,,   #,@File ,,,: yoloDetect.py   #,@Software: PyCharm   import 系统   import 线程   得到threading  import 线程   import 时间   import 操作系统   import  cv2   得到yolo  import  YOLO5   import  jsonify json   import 请求   import 瓶   得到flask  import 请求   headers =,{& # 39;内容类型# 39;:,& # 39;application/json # 39;}   url_addr=癶ttp://123.206.106.55:8065/api/视频/getPersonNum/?      #,创建一个服务,把当前这个python文件当做一个服务   时间=server  flask.Flask (__name__)      server.debug =,真的      def  gen_detector (url_video):   ,,,yolo =, YOLO5 ()   ,,,opt =, parseData ()   ,,,yolo.set_config (opt.device, opt.weights,还以为,opt.img_size, opt.conf_thres,, opt.iou_thres,,真的)   ,,,yolo.load_model ()   ,,,camera =, cv2.VideoCapture (url_video)   ,,,#,读取视频的fps,,,大小   ,,,fps =, camera.get (cv2.CAP_PROP_FPS)   ,,,size =, (camera.get (cv2.CAP_PROP_FRAME_WIDTH), camera.get (cv2.CAP_PROP_FRAME_HEIGHT))   ,,,print (“fps: {} \ nsize:, {}“.format (fps,大小))      ,,,#,读取视频时长(帧总数)   ,,,total =, int (camera.get (cv2.CAP_PROP_FRAME_COUNT))   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何使用python实现监控视频人数统计