├── README.md ├── readme_imgs ├── 1_mask.jpg ├── 1_no_mask.jpg ├── 2_mask.jpg ├── 2_no_mask.jpg ├── Project_scheme.jpeg ├── first_solution.jpg └── new_solution.jpg └── webPart ├── index.html ├── playsite └── stylesIndex.css /README.md: -------------------------------------------------------------------------------- 1 | # queue_analysis 2 | 3 | System for queue detection and control 4 | 5 | ## Motivation 6 | 7 | This project is the open source solution for queue analysis for people counting. 8 | 9 | ## TechStack 10 | 11 | - [OpenCV](https://opencv.org/) 12 | - [Pytorch head detector implementation](https://github.com/aditya-vora/FCHD-Fully-Convolutional-Head-Detector) 13 | - [Flask for backend](https://flask.palletsprojects.com/en/1.1.x/) 14 | - [SQLite DB](https://www.sqlite.org/) 15 | 16 | Scheme of system is illustrated below 17 | 18 | 19 | 20 | ## Solution 21 | 22 | Firstly person detector was based on full body detector. 23 | 24 | 25 | 26 | But this approach was not so effective. So it was replaced by head detector, which is not so sensitive for overlapping. Also masks were added in order to hide useless for detecting zone and prevent false positive detection. Example can be seen below. 27 | 28 | 29 | 30 | ## Advanced functionality 31 | 32 | Also functionality of system can be extended due to the system flexibility. As represented above, mask detection + face recognition system can be added for COVID-19 situation control monitoring. 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /readme_imgs/1_mask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmkuznecov/queue_analysis/3de4e741d6b6b1e45587ffeaf57490dd0e4660ef/readme_imgs/1_mask.jpg -------------------------------------------------------------------------------- /readme_imgs/1_no_mask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmkuznecov/queue_analysis/3de4e741d6b6b1e45587ffeaf57490dd0e4660ef/readme_imgs/1_no_mask.jpg -------------------------------------------------------------------------------- /readme_imgs/2_mask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmkuznecov/queue_analysis/3de4e741d6b6b1e45587ffeaf57490dd0e4660ef/readme_imgs/2_mask.jpg -------------------------------------------------------------------------------- /readme_imgs/2_no_mask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmkuznecov/queue_analysis/3de4e741d6b6b1e45587ffeaf57490dd0e4660ef/readme_imgs/2_no_mask.jpg -------------------------------------------------------------------------------- /readme_imgs/Project_scheme.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmkuznecov/queue_analysis/3de4e741d6b6b1e45587ffeaf57490dd0e4660ef/readme_imgs/Project_scheme.jpeg -------------------------------------------------------------------------------- /readme_imgs/first_solution.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmkuznecov/queue_analysis/3de4e741d6b6b1e45587ffeaf57490dd0e4660ef/readme_imgs/first_solution.jpg -------------------------------------------------------------------------------- /readme_imgs/new_solution.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmkuznecov/queue_analysis/3de4e741d6b6b1e45587ffeaf57490dd0e4660ef/readme_imgs/new_solution.jpg -------------------------------------------------------------------------------- /webPart/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | MyName 6 | 7 | 8 | 9 | 10 | 11 |
25 |
26 | 27 |
28 |
29 |
Добро пожаловать на ... !
30 | 31 |
32 |
33 |
Тут будет информация о сайте,проекте и то, что можно увидеть ,найти здесь
34 |
35 |
36 | 37 |
38 |
39 |
40 |
41 | 42 |
43 | 44 |
45 |
46 |
Camera1
47 |
48 |

Number1

49 |
50 |
51 | 52 |
53 |
54 | 55 |
56 | 57 |
58 |
59 |
Camera2
60 |
61 |

Number2

62 |
63 |
64 | 65 |
66 |
67 | 68 |
69 |
70 |
Camera3
71 |
72 |

Number3

73 |
74 |
75 |
76 | 77 | 78 | 79 | 80 |
81 | 82 |
83 | 84 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /webPart/playsite: -------------------------------------------------------------------------------- 1 | from flask import Flask, render_template, url_for 2 | import requests 3 | from flask import abort 4 | from peewee import * 5 | 6 | 7 | db = SqliteDatabase('AnalisDB.sq') 8 | 9 | class CamerasAndQueues(Model): 10 | id = IntegerField() 11 | queuesid = IntegerField() 12 | camerasip = CharField() 13 | numberofpeople = IntegerField() 14 | lastupdatetime = CharField() 15 | 16 | class Meta: 17 | database = db 18 | 19 | 20 | app = Flask(__name__) 21 | 22 | @app.route('/') 23 | @app.route('/home') 24 | def about(): 25 | return "Hello" 26 | 27 | #Возвратит кол-во людей в данной очереди 28 | @app.route('/home/PeopleNumber/', methods=['GET']) 29 | def getNearshop(number): 30 | for i in CamerasAndQueues.select(): 31 | if number == i.queuesid: 32 | amount = i.numberofpeople 33 | 34 | return(f"В данной очереди в настоящий момент находится {amount} человек") 35 | 36 | if __name__ == '__main__': 37 | app.run(port=8080, debug = True) 38 | -------------------------------------------------------------------------------- /webPart/stylesIndex.css: -------------------------------------------------------------------------------- 1 | *{ 2 | box-sizing: border-box; 3 | margin:0; 4 | padding: 0; 5 | 6 | } 7 | 8 | 9 | .container_section1{ 10 | padding-left:30%; 11 | padding-right: 30%; 12 | padding-top: 3%; 13 | } 14 | 15 | .container_section2 { 16 | padding-left: 20%; 17 | padding-right: 20%; 18 | padding-top: 3%; 19 | } 20 | 21 | 22 | h2{ 23 | text-align: center; 24 | } 25 | 26 | .border-secondary{ 27 | padding-top:10px; 28 | } 29 | .container_section3 { 30 | padding-top: 5%; 31 | } 32 | .display-6{ 33 | text-align:center; 34 | } 35 | 36 | .footer{ 37 | padding-top:10%; 38 | 39 | 40 | } 41 | --------------------------------------------------------------------------------