CPP Report
CPP Report
The Online Gate Pass Management System is a digital solution designed to streamline and automate the
process of issuing, approving, and monitoring gate passes within an organization, such as a college,
company, or residential society. The system replaces traditional manual methods, ensuring improved
efficiency, security, and accountability.
Through a user-friendly web or mobile interface, users such as students, employees, or residents can
apply for gate passes by submitting required details and supporting documents. These requests are then
reviewed and approved or rejected by authorized personnel such as wardens, managers, or security
officers.
The system incorporates real-time notifications, automated logs, and access control features to ensure
secure and traceable movement of individuals or goods. Admins can monitor activity through dashboards
and reports, and security personnel can verify passes using QR codes or unique IDs.
By minimizing paperwork and human error, the Online Gate Pass Management System enhances
operational transparency, saves time, and provides a scalable and reliable platform for gate management.
RATIONALE
The rationale for implementing a College Gatepass Management System revolves around several key
factors that aim to improve security, streamline administrative processes, and ensure the overall safety
and well-being of students and staff. Here are some important points that justify the need for such a
system:
1. Improved Security
- Control Over Movement: A gatepass system helps monitor and control the movement of students in
and out of the campus, ensuring that only authorized individuals can leave or enter. This is especially
critical in maintaining campus security, preventing unauthorized access, and ensuring students' safety.
- Emergency Management: In case of emergencies, the system can quickly identify which students are
on or off-campus, allowing for faster response times and better emergency management.
CHAPTER 1
INTRODUCTION
INTRODUCTION
The College Gatepass Project is developed to streamline the process of monitoring and managing
student attendance as well as the movement of students, staff, visitors, and resources in and out of the
college campus. The primary goals of the project are to enhance campus security, ensure student
accountability, and support efficient campus administration.
With the advancement of technology in the 21st century, numerous smart tools and applications have
emerged to simplify daily life. In this context, university safety stands out as a key area that must be
prioritized. Leveraging modern technology in this project aims to protect students, efficiently record their
movement at the campus gates, track visitor activity, and monitor the movement of institutional resources.
Despite the presence of a manual record-keeping system in many institutions, it has proven to be
inefficient and unreliable.
Important documents and records are often misplaced or lost, especially when needed urgently by the
administration. This can lead to confusion, data inaccuracy, and delayed decisions.
The digital gatepass system ensures that all movement records of students, visitors, and materials
crossing the college premises are stored securely and can be accessed easily. These records are crucial for
making informed decisions, conducting security audits, and responding effectively to emergencies.
By replacing the traditional manual processes with a centralized, automated system, the College
Gatepass Project contributes to building a secure, smart, and well-managed campus environment.
CHAPTER 2
LITERATURE SURVEY
LITERATURE SURVEY
The Online Gate Pass Management System is a digital solution designed to streamline and
automate the process of issuing, approving, and monitoring gate passes within an organization,
such as a college, company, or residential society. The system replaces traditional manual
methods, ensuring improved efficiency, security, and accountability.
Through a user-friendly web or mobile interface, users such as students, employees, or residents
can apply for gate passes by submitting required details and supporting documents. These
requests are then reviewed and approved or rejected by authorized personnel such as wardens,
managers, or security officers.
The system incorporates real-time notifications, automated logs, and access control features to
ensure secure and traceable movement of individuals or goods. Admins can monitor activity
through dashboards and reports, and security personnel can verify passes using QR codes or
unique IDs.
2. Another system for Visitor Pass was discussed in the paper by Prof. Abhay
Gaidhani, Suraj Sahijwani, Parag Jain, Shantanu:
Visitor gate-pass management system is designed to replace traditional visitor registration and
visitorinformation management activities in the premises, with this system we will able to
expedite the visitor registration process,
determine who is still inside of the premises after meeting and notify to the system. This is a
review paper in which systemsolves the problem of appointments and it electively capturing all-
relevant information about the visitors and that
information is recorded in centralized database server, which provides data management and
manipulation throughsearching for future purposes in the organization. The benefits of Visitor
Gate pass Management System( VGMS) isenhancing the level of security enforced in premises,
providing an organized view of visitor records and reducing the time
Visitor’s Management System (VMS) is a web-application through which the administrator can
collect details of the visitors for any organization like (apartments, quarters or colonies).
It tracks the records and information of the visitors who visits particular apartment’s – floor &
room number including the visit time and checkout time. This system can be used as access
control system for any building or multiple
buildings (colonies). Bringing ease to the manual report based accountability system for tracking
people who are visitors, this automated electronic based system becomes more powerful and
versatile with much more functionality
domination the prevailing primitive tracking system.With the principle to record the data
electronically the system makes it easier to track records in an easy way
generating reports for various modes of tracking e.g. (tracking particular visitor,
daily/monthly/yearly record ofvisitors) also with other modes of tracking which enhances
the security and accountability of the building making a strong management for people who just
visits but not reside permanently
A software application based on facial recognition is used to create a gate pass system. During
college hours, it coordinates the student's gate pass request and leave. This system is ready for use
and is simple to operate and manage. A gate pass security system is what this system is called. Its
main goal is to keep the campus safe from outside visitors and to keep track of permissions.
The Face Recognition based Gate pass system assists both the organization and the guest in
managing their Gate passes. We can quickly enter the entry and exit of a student, teacher, and
unknown guests using the gate pass system. One of the many benefits of employing this system is
that all of a person's entry and departure records are stored and accessible.
This system is simple to use. The goal of the project 'Face Recognition based Gate-pass System'
is to keep track of the user's information and actions. It streamlines the process and reduces
paperwork. We are providing the electronic version of the paper gate pass.
Surveillance cameras are necessary to find and track a person in the technology world for
various security purposes. The work aims to design an auto gate pass system using face
recognition technology based on real-time video processing.
Various photographs of the student at different environmental conditions have been collected
and stored in the database. While exiting from the campus students need to show their face in
front of the camera and the proposed system recognizes the student by comparing the details
stored in the database.
After recognizing a student, the next step is to fetch the student's record from the database
and make the entry of a person into e-register. Meanwhile, the automated system will send a
notification to the respective student. To track the whole action, the system provides a
graphical user interface (GUI), which helps to monitor all activities more easily..
CHAPTER 3
SCOPE OF
PROJECT
It is a digital solution designed to manage and streamline the process of granting and
monitoring student gatepasses in educational institutions. Traditionally, students must obtain
manual approval from faculty or administrative staff to leave the campus during college
hours.This process is often time-consuming, inefficient, and prone to errors or misuse.
By digitizing this system, institutions can ensure a more secure, transparent, and organized
process for student movement. The gatepass management system allows students to request
passes online, which can then be approved or rejected by authorized personnel. Security staff
can verify approved passes using digital methods such as ID verification or QR code scanning,
reducing the likelihood of unauthorized exits.
Key Features:
2. Admin/Faculty Approval:
o Faculty or staff members can view and manage incoming gatepass requests.
o Each request can be approved, rejected, or set to pending based on institutional policies.
3. Notification System:
o Students receive real-time updates via SMS or email once their request is processed.
o Parents or guardians can optionally be informed for safety and transparency.
4. Security Verification:
o Approved gatepasses can be shown at the gate, either printed or on a mobile device.
o Security staff can verify the pass using QR codes or digital dashboards.
5. Record Maintenance:
o All gatepass records are stored in a centralized database for future reference.
o Admins can view historical data, generate reports, and monitor trends.
Goal:
The primary goal of the College Gatepass Management System is to digitize and streamline the process
of managing student gatepass requests, ensuring a more efficient, secure, and transparent method
for handling student movements in and out of the campus.
Automate the gatepass approval process, reducing manual paperwork and delays.
Enhance campus security by ensuring only authorized students can exit the premises.
Provide real-time updates to students and staff regarding the status of gatepass requests.
Maintain digital records for all gatepass transactions for easy tracking and reporting.
By achieving these objectives, the system supports better administrative control, student discipline, and
campus safety through the use of modern technology.
CHAPTER 4
DEFINITION
PROBLEM DEFINITION
CHAPTER 5
METHODOLOGY
METHODOLOGY
1. Admin Login:
o In In this module, the admin user enters username and password
o . These details are checked against the ‘admin’ table and if matched login is made.
Otherwise invalid username message will be displayed.
2. Staff Entry:
o This module is used for storing the staff information.
o The details such as staff id, name, department, contact no, email id and
password are stored in the table.
o These details are stored in the staff table with the help of sql.
3. Student Entry:
o This module is used for storing the student information.
o The details such register no., name, department, image, contact no, email id and
password are stored in the table.
o These details are stored in the student table with the help of SQL.
4. Staff Information:
o This module is used to view the staff information. Here admin will just select a picture
from staff folder.
o Once the submit button has been clicked, the details regarding the person will be
displayed.
o The details such as staff id, name, department, contact no, email id and password are
viewed from staff table.
5. Student Information:
o This module is used to view the student information. Here admin will just select a
picture from student folder
o Once the submit button has been clicked, the details regarding the person will be
displayed.
o The details such as register no., name, department, image, contact no, email id and
password are viewed from students table.
.
6. Staff Login:
o In this module, the staff user enters staff id and password. These details are checked
against the ‘staff’ table and if matched login is made. Otherwise invalid staff id message
will be displayed
10.Student Login:
o In this module, the student user enters register no. and password. These details are
checked against the ‘student’ table and if matched login is made. Otherwise invalid
register no. message will be displayed.
ACTIVITY DIAGRAM
CHAPTER 6
CODE & OUTPUT
options: DefaultFirebaseOptions.currentPlatform,);
Code : FirebaseMessaging messaging = FirebaseMessaging.instance;
Main:-
FirebaseMessaging.onBackgroundMessage(firebaseBackgroundH
andler);
import 'package:firebase_messaging/firebase_messaging.dart'; await messaging.requestPermission();
import 'package:flutter/material.dart'; runApp(MyApp());
import 'package:getpass/Flash.dart'; }
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart'; class MyApp extends StatelessWidget{
Widget build(BuildContext context) {
@pragma('vm:entry-point') return MaterialApp(
Future<void> firebaseBackgroundHandler(RemoteMessage title: "Get Pass",
message) async { home: Flash(),
await Firebase.initializeApp(options: debugShowCheckedModeBanner: false,
DefaultFirebaseOptions.currentPlatform,); );
} }
Future<void> main() async { }
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
LoginForm:-
import 'package:flutter/material.dart'; const SizedBox(height: 30,),
import 'package:getpass/Login/StudentLogin.dart'; Container(
import 'package:getpass/Login/TeacherLogin.dart'; height: 55,width: 190,
import 'package:google_fonts/google_fonts.dart'; decoration: BoxDecoration(color: const
Color(0xff80C4E9),borderRadius: BorderRadius.circular(30)),
class LoginOption extends StatelessWidget { child: TextButton(
Widget build(BuildContext context) { child: Text("Login as Student",style:
return Scaffold( GoogleFonts.albertSans(color: Colors.white,fontSize: 17,fontWeight:
backgroundColor: Colors.white, FontWeight.w600)),
body: ListView( onPressed: (){
children: [ Navigator.push(context, MaterialPageRoute(builder:
Column( (builder){
mainAxisAlignment: MainAxisAlignment.start, return StudentLogin();
crossAxisAlignment: CrossAxisAlignment.center, }));
children: [ }
const SizedBox(height: 100,), ),
Padding( ),
padding: const EdgeInsets.all(5), const SizedBox(height: 20,),
child: Container( Container(
height: 120,width: 120, height: 55,width: 190,
decoration: BoxDecoration(image: const decoration: BoxDecoration(color: const
DecorationImage(image: Color(0xff6A9C89),borderRadius: BorderRadius.circular(30)),
AssetImage("assets/images/vvplogo.jpg"),fit: BoxFit.fill), child: TextButton(
borderRadius: BorderRadius.circular(50)), child: Text("Login as Admin",style:
), GoogleFonts.albertSans(color: Colors.white,fontSize: 17,fontWeight:
), FontWeight.w600)),
Text("VVPPS Get Pass",style: onPressed: (){
GoogleFonts.audiowide(fontSize: 20),), Navigator.push(context, MaterialPageRoute(builder:
const SizedBox(height: 30,), (builder){
Text("Welcome to the College Get Pass return Teacherlogin();
application",style: TextStyle(fontSize: 16,color: }));
Colors.black.withOpacity(0.5),fontWeight: FontWeight. },
// Text("Select your login type to proceed.",style: ),
TextStyle(fontSize: 16,color: ),
Colors.black.withOpacity(0.5),fontWeight: FontWeight.w600),), SizedBox(height: 90,),
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 20
People Detection and Counting System
Text("Note",style: TextStyle(fontSize: 15,color: final _key=GlobalKey<FormState>();
Colors.red.withOpacity(0.9),fontWeight: FontWeight.w600
SizedBox(height: 8,), Widget build(BuildContext context) {
Text("This software is developed for only limited return Scaffold(
users.",style: TextStyle(fontSize: 14,color: body: ListView(
Colors.black.withOpacity(0.4),fontWeight: FontWeight. children: [
SizedBox(height: 5,), Form(
Text("Registration phase isn't available, to register your key: _key,
id please contact head of department.",textAlign: child: Column(
TextAlign.center, children: [
style: TextStyle(color: const SizedBox(height: 160,),
Colors.red.withOpacity(0.6),fontSize: 14,fontWeight: Padding(
FontWeight.w600),), padding: const EdgeInsets.all(5),
SizedBox(height: 7,), child: Container(
Row( height: 100,width: 100,
mainAxisAlignment: MainAxisAlignment.center, decoration: BoxDecoration(image: const
children: [ DecorationImage(image:
Icon(Icons.call,color: AssetImage("assets/images/studentpfp.png"),fit: BoxFit.fill),
Colors.black.withOpacity(0.5),size: 20,), borderRadius: BorderRadius.circular(60)),
SizedBox(width: 8,), ),
Text("9356434349",style: TextStyle(fontSize: ),
15,color: Colors.blueAccent.withOpacity(0.6),fontWeight: const SizedBox(height: 3,),
FontWeight.w600),), Text("Student Login",style:
], GoogleFonts.albertSans(fontSize: 22, fontWeight:
) FontWeight.w600),),
], const SizedBox(height: 30,),
) Padding(
], padding: const EdgeInsets.fromLTRB(30, 0, 30, 0),
), child: TextFormField(
); keyboardType: TextInputType.emailAddress,
} decoration: InputDecoration(contentPadding: const
EdgeInsets.symmetric(horizontal: 20, vertical: 15),hintText: "Email
} ID",border: OutlineInputBorder(borderRadius:
BorderRadius.circular(30),
borderSide: BorderSide.none),filled: true,fillColor:
StudentLogin:- Colors.grey.withOpacity(0.2),
import 'package:cloud_firestore/cloud_firestore.dart'; hintStyle: TextStyle(fontWeight:
import 'package:firebase_messaging/firebase_messaging.dart'; FontWeight.w500,color: Colors.black.withOpacity(0.5))),
import 'package:flutter/material.dart'; controller: emailController,
import 'package:getpass/StudentModules/StudBottomNav.dart'; validator: (value){
import 'package:getpass/Errro.dart'; if(value!.isEmpty || value==null){
import 'package:google_fonts/google_fonts.dart'; return "Enter valid email";
import 'package:firebase_auth/firebase_auth.dart'; } else {
return null;
class StudentLogin extends StatefulWidget { }
@override },
State<StudentLogin> createState() => _StudentLoginState(); ),
} ),
const SizedBox(height: 15,),
class _StudentLoginState extends State<StudentLogin> { Padding(
padding: const EdgeInsets.fromLTRB(30, 0, 30, 0),
final FirebaseAuth _auth=FirebaseAuth.instance; child: TextFormField(
CollectionReference keyboardType: TextInputType.visiblePassword,
ref=FirebaseFirestore.instance.collection('Students'); obscureText: pass?true:false,
final emailController=TextEditingController(); decoration: InputDecoration(contentPadding: const
final passController=TextEditingController(); EdgeInsets.symmetric(horizontal: 20, vertical: 15),hintText:
bool pass=true; "Password",border: OutlineInputBorder(borderRadius:
bool load=false; BorderRadius.circular(30),
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 21
People Detection and Counting System
borderSide: BorderSide.none),filled: true,fillColor:
builder: (context) => StudBottomNav()),
Colors.grey.withOpacity(0.2), (Route<dynamic> route) => false,);
hintStyle: TextStyle(fontWeight: } else {
FontWeight.w500,color: Colors.black.withOpacity(0.5)), Error().toastMessage("Invalid Email ID and
suffixIcon:Padding( Password");
padding: const EdgeInsets.only(right: 10), setState(() {
child: IconButton( load=false;
icon: pass? const Icon(Icons.lock_outline_rounded });
const Icon(Icons.lock_open_outlined), _auth.signOut();
onPressed: (){ }
setState(() { }).onError((error, stackTrace){
pass=pass?false:true; setState(() {
}); load=false;
}, });
), Error().toastMessage(error.toString());
)), });
controller: passController, } else {
validator: (value){ setState(() {
if(value!.isEmpty || value==null){ load=false;
return "Enter valid password"; });
} else { }
return null; },
} ),
}, )
), ],
), ),
const SizedBox(height: 25,), )
Container( ],
height: 50,width: 200, ),
decoration: BoxDecoration(color: );
Color(0xff80C4E9),borderRadius: BorderRadius.circular(30)), }
child: TextButton( }
child: load? const CircularProgressIndicator(color:TeacherLogin:-
Colors.white,)
:Text("Login",style: import 'package:cloud_firestore/cloud_firestore.dart';
GoogleFonts.albertSans(color: Colors.white,fontSize: import 'package:firebase_auth/firebase_auth.dart';
17,fontWeight: FontWeight.w700),), import 'package:firebase_messaging/firebase_messaging.dart';
onPressed: () async { import 'package:flutter/material.dart';
setState(() { import 'package:getpass/HODsModules/hodBottomnNav.dart';
load=true; import 'package:getpass/Principle/pBottomNav.dart';
}); import 'package:getpass/TeacherModules/TeaBottomNav.dart';
if(_key.currentState!.validate()) { import 'package:google_fonts/google_fonts.dart';
await _auth.signInWithEmailAndPassword( import 'package:getpass/Errro.dart';
email: emailController.text.toString(),
password: passController.text.toString() class Teacherlogin extends StatefulWidget {
).then((onValue) async { @override
DocumentSnapshot docData=await State<Teacherlogin> createState() => _TeacherloginState();
ref.doc(_auth.currentUser!.uid.toString()).get(); }
Map<String, dynamic> data=docData.data() as
Map<String, dynamic>; class _TeacherloginState extends State<Teacherlogin> {
if(data['userType']=="Student") {
String? token=await CollectionReference
FirebaseMessaging.instance.getToken(); ref=FirebaseFirestore.instance.collection('Teachers');
await ref.doc(_auth.currentUser!.uid).update({
CollectionReference
'fcmToken':token.toString() collectionReference=FirebaseFirestore.instance.collection('HODs');
}); CollectionReference
principle=FirebaseFirestore.instance.collection('Principle');
Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute( final FirebaseAuth _auth=FirebaseAuth.instance;
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 22
People Detection and Counting System
decoration: InputDecoration(hintText:
final emailController=TextEditingController(); "Password",border: OutlineInputBorder(borderRadius:
final passController=TextEditingController(); BorderRadius.circular(30),
bool pass=true; borderSide: BorderSide.none),filled: true,fillColor:
bool load=false; Colors.grey.withOpacity(0.2),
final _key=GlobalKey<FormState>(); hintStyle: TextStyle(fontWeight:
FontWeight.w500,color: Colors.black.withOpacity(0.5)),
Widget build(BuildContext context) { suffixIcon:Padding(
return Scaffold( padding: const EdgeInsets.only(right: 10),
body: ListView( child: IconButton(
children: [ icon: pass? const Icon(Icons.lock_outline_rounded):
Form( const Icon(Icons.lock_open_outlined),
key: _key, onPressed: (){
child: Column( setState(() {
children: [ pass=pass?false:true;
const SizedBox(height: 160,), });
Padding( },
padding: const EdgeInsets.all(5), ),
child: Container( )),
height: 100,width: 100, controller: passController,
decoration: BoxDecoration(image: const validator: (value){
DecorationImage(image: if(value!.isEmpty || value==null){
AssetImage("assets/images/teacherpfp.png"),fit: BoxFit.fill), return "Enter valid password";
borderRadius: BorderRadius.circular(60)), } else {
), return null;
), }
const SizedBox(height: 3,), },
Text("Admin/Teacher Login",style: ),
GoogleFonts.albertSans(fontSize: 22, fontWeight: ),
FontWeight.w600),), const SizedBox(height: 25,),
const SizedBox(height: 30,), Container(
Padding( height: 50,width: 200,
padding: const EdgeInsets.fromLTRB(30, 0, 30, 0), decoration: BoxDecoration(color: const
child: TextFormField( Color(0xff6A9C89),borderRadius: BorderRadius.circular(30)),
keyboardType: TextInputType.emailAddress child: TextButton(
decoration: InputDecoration(hintText: "Email child: load? const CircularProgressIndicator(color:
ID",border: OutlineInputBorder(borderRadius: Colors.white,):Text("Login",style: GoogleFonts.albertSans(color:
BorderRadius.circular(30), Colors.white,fontSize: 17,fontWeight: FontWeight.w700),),
borderSide: BorderSide.none),filled: true,fillColor: onPressed: (){
Colors.grey.withOpacity(0.2), setState(() {
hintStyle: TextStyle(fontWeight: load=true;
FontWeight.w500,color: Colors.black.withOpacity(0.5))), });
controller: emailController, if(_key.currentState!.validate()) {
validator: (value){ _auth.signInWithEmailAndPassword(
if(value!.isEmpty || value==null){ email: emailController.text.toString(),
return "Enter valid email"; password: passController.text.toString()
} else { ).then((onValue) async {
return null; //Check staf
} DocumentSnapshot docData=await
}, ref.doc(_auth.currentUser!.uid.toString()).get();
), Map<String, dynamic>? data=docData.exists?
), docData.data() as Map<String, dynamic>:null;
const SizedBox(height: 15,), //Check HODs
Padding( DocumentSnapshot hodDoc=await
padding: const EdgeInsets.fromLTRB(30, 0, 30,collectionReference.doc(_auth.currentUser!.uid).get();
0),
child: TextFormField( Map<String, dynamic>? hodData=hodDoc.exists?
keyboardType: TextInputType.visiblePasswordhodDoc.data() as Map<String, dynamic>:null;
obscureText: pass?true:false, // Check Principle
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 23
People Detection and Counting System
DocumentSnapshot pDoc=await }
principle.doc(_auth.currentUser!.uid).get(); },
Map<String, dynamic>? pData=pDoc.exists? ),
pDoc.data() as Map<String, dynamic>:null; )
],
if(data?['userType']=="Teacher"){ ),
String? token=await )
FirebaseMessaging.instance.getToken(); ],
await ref.doc(_auth.currentUser!.uid).update({),
'fcmToken':token.toString() );
}).then((onValue){ }
}
Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute HodModel:-
(builder: (context) => TeaBottomNav()),
(Route<dynamic> route) => false,);
}); TeacherADD:-
} else if(hodData?['userType']=="HOD"){import 'package:cloud_firestore/cloud_firestore.dart';
String? token=await import 'package:firebase_auth/firebase_auth.dart';
FirebaseMessaging.instance.getToken(); import 'package:flutter/material.dart';
await import 'package:getpass/HODsModules/DeptTeacher.dart';
collectionReference.doc(_auth.currentUser!.uid).update({ import 'package:getpass/Errro.dart';
'fcmToken':token.toString() import 'package:getpass/Success.dart';
}).then((onValue){
class AddTeacher extends StatefulWidget {
Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute @override
(builder: (context) => hodBottomNav()), State<AddTeacher> createState() => _AddTeacherState();
(Route<dynamic> route) => false,);}
});
} else if(pData?['userType']=="Principle"){
class _AddTeacherState extends State<AddTeacher> {
String? token=await
FirebaseMessaging.instance.getToken(); bool pass=true;
await bool load=false;
principle.doc(_auth.currentUser!.uid).update({ final _key=GlobalKey<FormState>();
'fcmToken':token.toString() final nameController=TextEditingController();
}).then((onValue){ final contactController=TextEditingController();
final emailController=TextEditingController();
Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute final passwordController=TextEditingController();
(builder: (context) => pBottomNav()), final classController=TextEditingController();
(Route<dynamic> route) => false,); final educationController=TextEditingController();
});
} else{ FirebaseAuth _auth=FirebaseAuth.instance;
setState(() { String getCurrentYearMonth() {
load=false; DateTime now = DateTime.now();
}); return "${now.year}-${now.month.toString().padLeft(2, '0')}";
_auth.signOut(); }
Error().toastMessage("Invalid Email ID and
Password"); Widget build(BuildContext context) {
} return Scaffold(
}).onError((error, stackTrace){ appBar: AppBar(
setState(() { title: const Text("Add Teacher"),
load=false; centerTitle: true,
}); ),
Error().toastMessage(error.toString()); body: Padding(
}); padding: const EdgeInsets.only(left: 20,right: 20),
} else { child: Form(
setState(() { key: _key,
load=false; child: ListView(
}); children: [
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 24
People Detection and Counting System
Text("Teacher Details",style: TextStyle(fontSize: TextFormField(
17,fontWeight: FontWeight.w500,color: keyboardType: TextInputType.visiblePassword,
Colors.black.withOpacity(0.6))), obscureText: pass?true:false,
const SizedBox(height: 20,), decoration: InputDecoration(labelText: "Password",
TextFormField( border: OutlineInputBorder(borderRadius:
keyboardType: TextInputType.name, BorderRadius.circular(10)),
decoration: InputDecoration(labelText: "Name", prefixIcon: const Icon(Icons.security_outlined,size:
hintText: "eg. John R.K", 22,color: Color(0xff3F72AF)),
border: OutlineInputBorder(borderRadius: suffixIcon: IconButton(
BorderRadius.circular(10)), icon: pass? const Icon(Icons.lock_outline,color:
prefixIcon: const Color(0xff1DB954),size: 22,): const
Icon(Icons.person_outline_rounded,size: 22,color: Icon(Icons.lock_open_outlined,color: Color(0xffDC3545),size: 22,),
Color(0xff3F72AF),)), onPressed: (){
controller: nameController, setState(() {
validator: (value){ pass=pass?false:true;
if(value==null || value.isEmpty){ });
return "Enter valid name"; },
} else { )),
return null; controller: passwordController,
} validator: (value){
}, if(value==null || value.isEmpty){
), return "Enter valid password";
const SizedBox(height: 15,), } else {
TextFormField( return null;
keyboardType: TextInputType.number, }
decoration: InputDecoration(labelText: "Contact", },
border: OutlineInputBorder(borderRadius: ),
BorderRadius.circular(10)), const SizedBox(height: 20,),
prefixIcon: const Icon(Icons.call_outlined,size: Text("Other Details",style: TextStyle(fontSize:
22,color: Color(0xff3F72AF))), 17,fontWeight: FontWeight.w500,color:
controller: contactController, Colors.black.withOpacity(0.6))),
validator: (value){ const SizedBox(height: 20,),
if(value==null || value.isEmpty || value.length!=10){ StreamBuilder(
return "Enter valid number"; stream:
} else { FirebaseFirestore.instance.collection('HODs').doc(_auth.currentUser!.
return null; uid).snapshots(),
} builder: (context, AsyncSnapshot<DocumentSnapshot>
}, streamSnapshot){
), if(streamSnapshot.connectionState ==
const SizedBox(height: 15,), ConnectionState.waiting){
TextFormField( return const Center(child: CircularProgressIndicator(),);
keyboardType: TextInputType.emailAddress, } else if(streamSnapshot.hasError){
decoration: InputDecoration(labelText: "Email", return const Center(child: Text("Something went
border: OutlineInputBorder(borderRadius: wrong"),);
BorderRadius.circular(10)), } else {
prefixIcon: const Map<String, dynamic> data=streamSnapshot.data!.data()
Icon(Icons.alternate_email_rounded,size: 22,color: as Map<String, dynamic>;
Color(0xff3F72AF))), return TextField(
controller: emailController, keyboardType: TextInputType.name,
validator: (value){ readOnly: true,
if(value==null || value.isEmpty){ decoration: InputDecoration(hintText: "${data['dept']}",
return "Enter valid email"; border: OutlineInputBorder(borderRadius:
} else { BorderRadius.circular(10)),
return null; prefixIcon: const Icon(Icons.school_outlined,size:
} 22,color: Color(0xff3F72AF),)),
}, );
), }
const SizedBox(height: 15,), },
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 25
People Detection and Counting System
), onPressed: () async {
const SizedBox(height: 15,), setState(() {
Row( load=true;
children: [ });
Expanded( if(_key.currentState!.validate()){
child: TextFormField( final String hodID = _auth.currentUser!.uid;
keyboardType: TextInputType.name, DocumentSnapshot docData=await
decoration: InputDecoration(hintText: "eg. TYCO-
FirebaseFirestore.instance.collection('HODs').doc(_auth.currentUser!.
A",labelText: "Class", uid).get();
border: OutlineInputBorder(borderRadius: CollectionReference
BorderRadius.circular(10)), ref=FirebaseFirestore.instance.collection('Teachers');
prefixIcon: const Icon(Icons.class_outlined FirebaseAuth tea=FirebaseAuth.instance;
22,color: Color(0xff3F72AF),)), await tea.createUserWithEmailAndPassword(
controller: classController, email: emailController.text.toString(),
validator: (value){ password: passwordController.text.toString()
if(value==null || value.isEmpty){ ).then((onValue) async {
return "Enter valid class"; await ref.doc(tea.currentUser!.uid).set({
} else {
return null; 'class':classController.text.toUpperCase().toString(),
} 'contact':contactController.text.toString(),
}, 'dept':docData['dept'].toString(),
), 'hodName':docData['name'].toString(),
), 'education':educationController.text.toString(),
const SizedBox(width: 15,), 'email':emailController.text.toString(),
Expanded( 'name':nameController.text.toString(),
child: TextFormField( 'password':passwordController.text.toString(),
keyboardType: TextInputType.name, 'photoURL':null,
decoration: InputDecoration(labelText: 'totalLeave':"0",
"Education", 'lastReset':getCurrentYearMonth().toString(),
border: OutlineInputBorder(borderRadius: 'hodID':hodID,
BorderRadius.circular(10)), 'userID':tea.currentUser!.uid.toString(),
prefixIcon: const 'userType':"Teacher"
Icon(Icons.school_outlined,size: 22,color: Color(0xff3F72AF),)), }).then((onValue) async {
controller: educationController, tea.signOut();
validator: (value){ await _auth.signInWithEmailAndPassword(
if(value==null || value.isEmpty){ email: docData['email'],
return "Enter valid education"; password: docData['password']
} else { ).then((onValue){
return null; Success().toastMessage("Teacher Added
} Successfully");
}, Navigator.pop(context,
), MaterialPageRoute(builder: (builder){
), return DeptTeacher();
], }));
), });
const SizedBox(height: 25,), });
Row( }).onError((error, stackTrace){
mainAxisAlignment: MainAxisAlignment.center, Error().toastMessage(error.toString());
children: [ setState(() {
Container( load=false;
height: 45,width: 150, });
decoration: BoxDecoration(color: const });
Color(0xff112D4E),borderRadius: BorderRadius.circular(5)), } else {
child: TextButton( setState(() {
child: load? const load=false;
CircularProgressIndicator():Text("Add",style: TextStyle(color: });
Colors.white.withOpacity(0.8),fontSize: 18,fontWeight: }
FontWeight.w500)), },
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 26
People Detection and Counting System
), return Center(child: CircularProgressIndicator(),);
), } else if(streamSnapshot.hasError){
const SizedBox(width: 15,), return Center(child: Text("Something went wrong"),);
Container( } else if(streamSnapshot.hasData == false ||
height: 45,width: 150,
streamSnapshot.data!.docs.isEmpty){
decoration: BoxDecoration(color: const
Color(0xffDBE2EF),borderRadius: BorderRadius.circular(5)),
return Center(child: Text("No any request"),);
child: TextButton( } else {
child: const Text("Cancel"), return ListView.builder(
onPressed: (){ itemCount: streamSnapshot.data!.docs.length,
Navigator.pop(context, itemBuilder: (itemBuilder, index){
MaterialPageRoute(builder: (builder){ DocumentSnapshot
return DeptTeacher(); data=streamSnapshot.data!.docs[index];
})); return Padding(
}, padding: EdgeInsets.only(top: 10,bottom: 10),
), child: Container(
),
decoration: BoxDecoration(color:
],
), Colors.white,borderRadius: BorderRadius.circular(15)),
const SizedBox(height: 25,), child: Padding(
], padding: EdgeInsets.all(15),
), child: Column(
), mainAxisAlignment:
), MainAxisAlignment.start,
); crossAxisAlignment:
} CrossAxisAlignment.start,
} children: [
Row(
TeacherRequest:- import
mainAxisAlignment:
'package:cloud_firestore/cloud_firestore.dart'; MainAxisAlignment.start,
import 'package:firebase_auth/firebase_auth.dart'; crossAxisAlignment:
import 'package:flutter/material.dart'; CrossAxisAlignment.start,
import '../SendLeaveNotificastion.dart'; children: [
Container(
class TeacherRequest extends StatelessWidget { height: 75,width: 75,
Widget build(BuildContext context) { decoration: BoxDecoration(image:
DecorationImage(image: data['photoURL']==null?
FirebaseAuth _auth=FirebaseAuth.instance; AssetImage("assets/images/studentpfp.png"):NetworkImage(da
CollectionReference ta['photoURL']),fit: BoxFit.contain),
ref1=FirebaseFirestore.instance.collection('Campus borderRadius:
Leaves'); BorderRadius.circular(50)),
return Scaffold( ),
appBar: AppBar( Expanded(
title: Text("Teacher Requests"), child: ListTile(
centerTitle: true, title: Padding(
), padding: EdgeInsets.only(bottom: 5),
body: Padding( child: Text("${data['name']}",style:
padding: EdgeInsets.only(left: 15,right: 15), TextStyle(color: Colors.black,fontWeight:
child: StreamBuilder( FontWeight.w500,fontSize: 19),),
stream: ref1.orderBy('appliedAt', descending: ),
true).where('hodID', isEqualTo: subtitle: Text("Class: $
_auth.currentUser!.uid).snapshots(), {data['class']}",style: TextStyle(color:
builder: (context, AsyncSnapshot<QuerySnapshot>
Colors.black.withOpacity(0.6),fontWeight:
streamSnapshot){ FontWeight.w500,fontSize: 17),),
if(streamSnapshot.connectionState == ),
ConnectionState.waiting){
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 27
People Detection and Counting System
) Icon(Icons.info_rounded,color:
], Color(0xff006BFF),size: 21,),
), SizedBox(width: 10,),
SizedBox(height: 17,), Expanded(child: Text("${data['reason']}",
Container( style: TextStyle(color:
height: 40,width: 220, Colors.black,fontSize: 17),))
decoration: BoxDecoration(color: ],
Color(0xffC4D9FF),borderRadius: ),
BorderRadius.circular(30)), SizedBox(height: 15,),
child: Center(child: Text("$ Row(
{data['dept']}",style: TextStyle(color: children: [
Color(0xff344CB7),fontSize: 17,fontWeight: Icon(Icons.access_time_rounded,size:
FontWeight.w500),)), 20,color: Colors.black.withOpacity(0.6),),
), SizedBox(width: 10,),
SizedBox(height: 17,), Text("Applied on: $
Container( {data['appliedAt']}",style: TextStyle(color:
height: 1,width: Colors.black.withOpacity(0.6),fontSize: 15,fontWeight:
MediaQuery.of(context).size.width, FontWeight.w500),)
decoration: BoxDecoration(color: ],
Colors.black.withOpacity(0.1)), ),
), SizedBox(height: 20,),
SizedBox(height: 20,), Container(
Row( height: 1,width:
mainAxisAlignment: MediaQuery.of(context).size.width,
MainAxisAlignment.spaceBetween, decoration: BoxDecoration(color:
children: [ Colors.black.withOpacity(0.1)),
Row( ),
children: [ SizedBox(height: 15,),
Row(
Icon(Icons.calendar_today_rounded,color: mainAxisAlignment:
Color(0xff006BFF),size: 20,), MainAxisAlignment.center,
SizedBox(width: 10,), children: [
Text("${data['date']}",style: Expanded(
TextStyle(color: Colors.black,fontSize: 17),), child: Container(
], height: 45,
), decoration: BoxDecoration(color:
Row( data['hodApproval']=="Pending"? Color(0xff1DB954)
children: [ :data['hodApproval']=="Approved"?
Color(0xff1DB954).withOpacity(0.5)
Icon(Icons.access_time_filled_rounded,color: : Color(0xff1DB954),borderRadius:
Color(0xff006BFF),size: 20,), BorderRadius.circular(10)),
SizedBox(width: 10,), child: TextButton(
Text("${data['time']}",style: child: Row(
TextStyle(color: Colors.black,fontSize: 17),), mainAxisAlignment:
], MainAxisAlignment.center,
) children: [
], Icon(Icons.check_rounded,size:
), 20,color: Colors.white,),
SizedBox(height: 15,), SizedBox(width: 5,),
Row( Container(
crossAxisAlignment: child:
CrossAxisAlignment.start, data['hodApproval']=="Pending"? Text("Approve",style:
children: [ TextStyle(color: Colors.white,fontSize: 17,fontWeight:
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 28
People Detection and Counting System
FontWeight.w500)) FontWeight.w500),)
:data['hodApproval']=="App :data['hodApproval']=="Rejecte
roved"? Text("Approved",style: TextStyle(color: d"? Text("Rejected",style: TextStyle(color:
Colors.white,fontSize: 17,fontWeight: FontWeight. Colors.white,fontSize: 17,fontWeight: FontWeight.w500),)
: Text("Approve Me",style: : Text("Cancel",style:
TextStyle(color: Colors.white,fontSize: 17,fontWeight: TextStyle(color: Colors.white,fontSize: 17,fontWeight:
FontWeight.w500))) FontWeight.w500),))
],), ],),
onPressed: () async { onPressed: () async {
CollectionReference CollectionReference
ref=FirebaseFirestore.instance.collection('Campus Leaves');ref2=FirebaseFirestore.instance.collection('Campus Leaves');
await ref.doc(data.id).update({ await ref2.doc(data.id).update({
'hodApproval':"Approved", 'hodApproval':"Rejected",
}).then((onValue) async { }).then((onValue) async {
String? studToken = (await String? studToken = (await
FirebaseFirestore.instance.collection('Teachers').doc(data['u
FirebaseFirestore.instance.collection('Teachers').doc(data['userI
serID']).get()).data()?['fcmToken']; D']).get()).data()?['fcmToken'];
await sendNotification( await sendNotification(
title: "Leave Request title: "Leave Request Rejected",
Approved", body: "HOD sir rejected your leave
body: "HOD sir approved request.
your Tap to see more.",
leave request. Tap to see more.", fcmToken: studToken.toString(),
fcmToken: );
studToken.toString(), });
); },
}); ),
}, ),
), )
), ],
), )
SizedBox(width: 10,), ],
Expanded( ),
child: Container( ),
height: 45, ),
decoration: BoxDecoration(color: );
data['hodApproval']=="Pending"? Color(0xffDC3545) },
:data['hodApproval']=="Rejected" );
? Color(0xffDC3545).withOpacity(0.5) }
: },
Color(0xffDC3545),borderRadius: ),
BorderRadius.circular(10)), ),
child: TextButton( );
child: Row( }
mainAxisAlignment: }
MainAxisAlignment.center,
children: [
Icon(Icons.close_rounded
20,color: Colors.white),
SizedBox(width: 5,),
Container(
child:
data['hodApproval']=="Pending"? Text("Reject",style:
TextStyle(color: Colors.white,fontSize: 17,fontWeight:
VIDYA VIKAS PRATISHTAN POLYTECHNIC, SOLAPUR
Page | 29
People Detection and Counting System
OUTPUT
Flashscreen
Teacher Section
Hod Section
Principle Section
CHAPTER 7
Test Cases
CHAPTER 8
Conclusion &
Future Scope
CONCLUSION
This project is easy to implement and it is technically flexible to adapt to new environment. This
project is designed in such an extensible fashion to increase the future adaptability and it is flexible,
where the modification could be done whenever necessary.
This project made the entry work easier to make the entry details secured by providing the
appropriate authorization. In this process administrator is provided separate username and password
so that no one can access the data that are entered in the database.
By using this project clerical work in mostly reduced and all process are carried out digitally so that
the data are ported easily. The corresponding department HOD is approving or rejecting the gate
pass request made by students. It is developed in a user-friendly manner. The system is very fast and
any transactions can be viewed or retaken at any level. The work burden is reduced and solves the
problem of time consuming.
The end users are required to have less working experience to run this project. The application is tested
well and end users satisfaction is found to be more. The user can easily understand the details available
from the report. This software will support for the future development.
FUTURE SCOPE
1. Real-Time Processing
o The current system processes pre-recorded videos. Future improvements can enable live
video analysis to detect and count people in real-time, making it useful for security
monitoring and crowd control in public places.
2. Multi-Camera Integration
o By integrating multiple cameras, the system can track individuals across different locations
and provide more comprehensive surveillance. This is beneficial for large venues like malls,
airports, and stadiums where a single camera is insufficient.
6. Edge AI Deployment
o Deploying the system on low-power edge devices like Raspberry Pi or NVIDIA Jetson will
reduce reliance on high-performance computers. This will allow on-site, real-time people
counting without requiring constant internet access.
By enhancing these future capabilities, the People Detection and Counting System can evolve into
a powerful and versatile solution for crowd monitoring and security management, scalability,
and automation. With advanced AI models, multi-camera integration, and IoT- powered alerts,
optimize resource allocation, and improve public safety in high-footfall areas.
REFERENCES
[1] online gate pass application for hostel student by S.Venkatesa Perumal, B. I. Juvanna, and Sanju
Rajan. ( Dec-2018 )
[2] Automated gate pass system development by Romy Jun A. Sunico, Elwin S. Argana, Marife M.
Dumale (May-2014)
[3] Visitor gate-pass management system by Akshay ET, Afsal M,Abhinav R, Rahul C, Prof
Mohammed Malik CK,Associate Prof Haseena M ( Jan-2019 )
[4] E-Gatepass system by Chaitanya Lengure, by Laxmikant Kakde, Mamta Bargat, Saachi
Jambhulkar,Prof. Ashish Palandurkar, Prof. Hemant Wade ( Apr-2016 )
[5] Face recognition based gate-pass by Dr. Sunil Bhutada, Dr. Sreenivas Mekala, Mayukhi
Gandham,Rishika Bhat, Ruchitha Upadhya yula (May-June 2022)
ACTION PLAN