“The Complete Father Brown Mysteries” is a captivating anthology that unveils the brilliance of G.K. Chesterton’s beloved detective, Father Brown. This collection, comprising all the mysteries featuring the unassuming yet astute priest, offers readers a literary journey through the intricacies of crime-solving wrapped in moral and philosophical musings.
Father Brown, a mild-mannered clergyman with a penchant for crime-solving, possesses a unique ability to see through the complexities of human nature. Chesterton’s storytelling weaves a tapestry of mystery, morality, and wit as Father Brown navigates the enigmatic cases that come his way. Unlike many detectives of the genre, Father Brown relies on intuition, keen observation, and a deep understanding of human frailties to unravel the mysteries that cross his path.
The stories, set against the backdrop of early 20th-century England, showcase Chesterton’s mastery in creating compelling narratives that explore the psychological dimensions of crime. Father Brown’s unassuming demeanor serves as a clever disguise for his razor-sharp intellect, allowing him to penetrate the darkest corners of criminal minds.
As readers delve into “The Complete Father Brown Mysteries,” they are not merely treated to a series of whodunits but are invited to ponder the ethical dilemmas and moral complexities that Chesterton intricately embeds in each tale. The narrative becomes a playground for philosophical contemplation, challenging readers to examine the boundaries of good and evil.
Chesterton’s writing style, marked by its eloquence and rich prose, adds an additional layer of delight to the collection. The stories are both entertaining and thought-provoking, offering a literary experience that transcends the conventional detective genre.
Conclusion
In conclusion, “The Complete Father Brown Mysteries” stands as a testament to Chesterton’s genius in crafting tales that blend mystery, morality, and profound reflections on the human condition. This anthology is a must-read for those seeking a unique and intellectually stimulating journey into the world of classic detective fiction.
In an era dominated by digital communication and interconnectedness, the concept of toxicity has become increasingly prevalent in our daily lives. Whether it’s online interactions, workplace dynamics, or personal relationships, toxicity can manifest in various forms, leaving individuals grappling with its effects.
Toxicity, in essence, refers to behaviors, attitudes, or environments that are harmful, negative, and detrimental to one’s well-being. The online sphere, with its anonymity and distance, has provided a breeding ground for toxic behaviors. Cyberbullying, trolling, and the spread of hate speech have become unfortunate byproducts of our hyperconnected world, impacting mental health and fostering a culture of negativity.
Workplaces, too, are not immune to toxicity. Office politics, competition, and a toxic work environment can lead to stress, anxiety, and decreased productivity. Recognizing and addressing these issues is crucial for maintaining a healthy professional atmosphere and ensuring the well-being of employees.
In personal relationships, toxicity can take the form of manipulation, emotional abuse, or controlling behaviors. Identifying toxic dynamics early on is vital for establishing boundaries and fostering healthier connections. Toxic relationships can have long-lasting effects on mental and emotional health, underscoring the importance of cultivating positive and supportive connections.
While navigating the complexities of today’s world, it’s essential to develop strategies for dealing with toxicity. This involves setting boundaries, promoting open communication, and fostering a culture of empathy and understanding. Recognizing the signs of toxicity and taking proactive steps to address it empowers individuals to create spaces that nurture personal growth and well-being.
Conclusion
In conclusion, toxicity is a multifaceted challenge that permeates various aspects of our lives. Whether encountered online, at work, or in personal relationships, understanding and addressing toxicity is paramount for fostering a healthier and more positive environment. By promoting awareness, empathy, and proactive measures, individuals can contribute to a culture that prioritizes well-being and cultivates meaningful connections in an otherwise complex and interconnected world.
The Knight & Culverhouse Box Set, encompassing Books 7-9, delivers a gripping trilogy of crime thrillers that immerse readers into the gritty and complex world of Detective Inspector David Knight and his steadfast partner Detective Sergeant Paula Culverhouse. Authored by prolific crime writer Adam Croft, this collection seamlessly weaves together suspense, mystery, and intricate character dynamics.
In Book 7, “In Cold Blood,” Knight and Culverhouse find themselves entangled in a chilling case as they race against time to solve a series of murders that send shivers down the spine. The narrative unfolds with meticulous attention to detail, showcasing Croft’s ability to craft intricate plots that keep readers on the edge of their seats.
The tension escalates in Book 8, “End Game,” as the dynamic duo faces personal and professional challenges. Croft masterfully explores the complexities of their characters, adding depth to the storyline. The crime-solving partnership is put to the test, making for a compelling and emotionally charged narrative that delves into the psyche of both detectives.
The trilogy concludes with Book 9, “Life or Death,” where Knight and Culverhouse must confront the darkest aspects of human nature to solve a case that threatens to unravel not only their professional lives but also their personal well-being. Croft’s writing shines as he navigates the intricacies of the plot, delivering a satisfying and thought-provoking resolution.
Conclusion
Throughout the box set, Adam Croft demonstrates his skill in crafting suspenseful narratives that blend intricate plotting with well-developed characters. The Knight & Culverhouse series, with its compelling storytelling and realistic depiction of police work, is a must-read for fans of crime fiction. The box set not only offers a thrilling ride through three captivating novels but also provides a comprehensive look at the evolution of the central characters, making it a standout addition to the crime genre.
The Gavin Holder Series is a gripping literary venture that catapults readers into a world of crime, mystery, and suspense. Authored by the talented Lucas Kardon, this series follows the exploits of its titular character, Gavin Holder, a seasoned detective with a penchant for solving complex cases.
Kardon’s storytelling prowess is evident in the seamless integration of rich character development and intricate plotlines throughout the series. Gavin Holder emerges as a multifaceted protagonist, navigating the treacherous waters of criminal investigations with a combination of razor-sharp intellect and a relentless pursuit of justice. As readers delve into each installment, they become intricately woven into Holder’s world, grappling with moral dilemmas, unexpected twists, and the gritty realities of law enforcement.
The series unfolds like a carefully constructed puzzle, with each novel presenting a new challenge for Holder to unravel. From grisly murders to high-stakes conspiracies, Kardon weaves a tapestry of suspense that keeps readers on the edge of their seats. The narrative’s immersive quality extends beyond the central character, introducing a cast of supporting figures whose stories contribute to the overall depth and complexity of the series.
What sets the Gavin Holder Series apart is its ability to balance the fast-paced thrill of a crime novel with the nuanced exploration of human nature. Kardon delves into the psychology of both criminals and investigators, adding layers of intrigue and depth to the storytelling. Whether it’s navigating the murky waters of corruption or untangling the threads of a seemingly unsolvable case, Gavin Holder confronts challenges that resonate with readers, creating a visceral and engaging reading experience.
Conclusion
Lucas Kardon’s Gavin Holder Series stands as a testament to the enduring appeal of crime fiction. With its well-crafted narratives, compelling characters, and a relentless dedication to suspense, the series captivates audiences, leaving them eagerly anticipating each new installment in this thrilling literary journey.
The “Wildfire Smokejumper Trilogy” takes readers on a thrilling and heart-pounding journey into the dangerous world of wildfire smokejumpers. Authored by acclaimed writer M. L. Buchman, this trilogy is a gripping exploration of courage, resilience, and the challenges faced by those who battle nature’s wrath to protect lives and landscapes.
The first book, “Pure Heat,” introduces readers to the adrenaline-fueled life of the elite smokejumping team. Buchman weaves a tale of passion and danger as the protagonists confront not only the ferocity of wildfires but also the complexities of their own emotions. The characters are meticulously crafted, offering a mix of vulnerability and strength that adds depth to the narrative.
In “Fire Light,” the second installment, Buchman delves deeper into the personal and professional lives of the smokejumpers. The stakes are higher, the fires more intense, and the bonds among the team are tested. The author skillfully combines action with moments of introspection, creating a narrative that resonates with both the visceral thrill of firefighting and the emotional nuances of human relationships.
The trilogy concludes with “Hot Point,” where Buchman masterfully ties up the threads of the story. As the smokejumpers face their most formidable challenge yet, readers are taken on a rollercoaster of suspense and resolution. The author’s attention to detail and vivid descriptions create a sense of immersion, allowing readers to feel the heat of the flames and the weight of the decisions faced by the characters.
Conclusion
Throughout the trilogy, Buchman’s prose captures the spirit of adventure and the unforgiving nature of wildfires. The trilogy not only serves as a tribute to the brave men and women who battle these infernos but also as a celebration of the indomitable human spirit. The “Wildfire Smokejumper Trilogy” is a must-read for those who crave high-stakes drama, authentic characters, and a visceral exploration of one of the most perilous professions on Earth.
“The Witches Three Cozy Mysteries 4-6” invites readers into a world where magic, mystery, and camaraderie converge to create a delightful reading experience. In this trilogy, the enchanting trio of amateur sleuths—Hazel, Marigold, and Myrtle—return to solve three more captivating mysteries in their quaint, supernatural town.
The fourth installment, “Brewing Up Trouble,” kicks off with the discovery of a peculiar potion gone awry at the local apothecary. As the Witches Three investigate, readers are treated to a blend of magical mishaps and humorous escapades. The cozy atmosphere of the small town, combined with the witty banter between the three friends, adds a charming touch to the mystery.
In “Charms and Conundrums,” the fifth book in the series, the trio is faced with a series of mysterious charms causing chaos in the community. The magical elements take center stage as Hazel, Marigold, and Myrtle race against time to unravel the secrets behind the bewitching phenomena. The plot weaves together elements of friendship, magic, and clever detective work, keeping readers guessing until the final pages.
The sixth and final installment, “Enchanting Endings,” brings the series to a satisfying close. The Witches Three find themselves entangled in a web of secrets when an ancient spellbook goes missing. The stakes are higher, the mysteries deeper, and the bonds of friendship are put to the ultimate test. As the series concludes, readers are treated to a spellbinding resolution that ties up loose ends and leaves them with a sense of fulfillment.
Conclusion
Throughout the trilogy, author [Author’s Name] skillfully combines the warmth of a cozy mystery with the whimsy of supernatural elements, creating a harmonious blend that caters to fans of both genres. The Witches Three’s character development, the cleverly crafted plotlines, and the magical backdrop make “The Witches Three Cozy Mysteries 4-6” a must-read for those seeking a lighthearted yet engaging escape into a world where the mystical and the mundane seamlessly coexist.
Introduction: “The Wolf Who Loved Me” by Lydia Dare is a spellbinding novel that seamlessly intertwines romance and fantasy, offering readers a unique and thrilling experience. Set in a world where werewolves exist, Dare takes us on a journey filled with passion, mystery, and the timeless struggle between love and duty.
Summary: At the heart of the story is the protagonist, Gareth, a charismatic and brooding werewolf with a sense of duty that goes beyond the ordinary. His life takes an unexpected turn when he encounters the captivating Miss Rosalind Wentworth, a woman with secrets of her own. As their paths cross, a forbidden love blossoms, and readers are drawn into a world where the supernatural and the mundane collide.
Dare masterfully weaves together a narrative that explores the complexities of love and sacrifice. The novel is not merely a love story but also a tale of self-discovery and the consequences of defying societal norms. The chemistry between the characters is palpable, adding a layer of authenticity to their relationships.
Reviews: Attached to this blog post are glowing reviews from both critics and readers alike. Critics praise Dare’s ability to create a rich and immersive world, seamlessly blending historical elements with supernatural intrigue. Readers have expressed their delight in the well-developed characters and the emotional depth of the storyline.
One reviewer commends the author for her skillful storytelling, stating, “Lydia Dare has crafted a world that feels both enchanting and believable. The characters are so vividly drawn that you can’t help but become invested in their journey.”
Another review highlights the novel’s organic and relatable feel, emphasizing that “The Wolf Who Loved Me” stands out in the crowded paranormal romance genre due to its genuine portrayal of emotions and relationships.
Conclusion: In conclusion, Lydia Dare’s “The Wolf Who Loved Me” is a must-read for those seeking a captivating blend of romance and fantasy. The novel’s ability to evoke genuine emotions and its well-crafted narrative make it a standout in its genre. Dive into a world where love knows no boundaries, and the supernatural coexists with the ordinary, leaving readers yearning for more from this talented author.
“Endure” by Carrie Jones is a captivating novel that seamlessly blends elements of fantasy and romance. The story follows the protagonist, Zara White, as she navigates a world filled with mythical creatures and battles against formidable adversaries.
In this riveting tale, Zara discovers her own strength and resilience as she confronts challenges that test her character. The novel weaves together a tapestry of emotions, relationships, and supernatural elements, creating a rich and immersive reading experience.
One of the novel’s strengths lies in Jones’s ability to create organic connections between characters. The relationships feel authentic, and readers will find themselves invested in the characters’ journeys. Zara’s evolution throughout the story is particularly well-executed, as she transforms from a vulnerable protagonist into a formidable force.
The fantastical elements of “Endure” are also noteworthy. Jones paints a vivid picture of the magical world, introducing readers to a realm filled with pixies, werewolves, and other mythical beings. The world-building is intricate, adding depth to the narrative and making it easy for readers to suspend disbelief and immerse themselves in the story.
The novel’s pacing keeps readers on the edge of their seats, with a perfect balance of action, suspense, and moments of introspection. Jones crafts a plot that is both engaging and thought-provoking, making “Endure” a page-turner from start to finish.
In terms of a review, “Endure” has received acclaim for its character development, world-building, and the seamless integration of fantasy elements. Readers appreciate the emotional depth of the story and the authenticity of the relationships portrayed. Jones’s writing style is fluid and expressive, contributing to the overall organic feel of the narrative.
In conclusion, “Endure” by Carrie Jones is a must-read for fans of fantasy and romance. With its well-developed characters, immersive world, and captivating plot, the novel offers a reading experience that is both enchanting and emotionally resonant.
This project design would make use of both the face recognition and fingerprint recognition biometrics to verify a user before they can access the entry or exit a door. The Bimodal Biometric-based Surveillance System was made using a Raspberry pi 4B microcomputer, as well as an Arduino Nano board that was connected in serial connection to it. While the Raspberry Pi controls both the face and fingerprint recognition biometrics; the Arduino board was responsible for actuating and displaying feedback responses through an LCD screen to the user. Ensure you read through to the end to get the full grasp of the project design.
face and fingerprint recognition: The Raspberry pi 4B used for the project design
Face and Fingerprint Recognition: The Components/Materials Used
S/N
Apparatus
Quantity
Cost per Quantity (₦)
Cost (₦)
1
Raspberry Pi 4
1
2
Resistors
1
3
Rechargeable Battery
3
4
CSI Camera
1
5
Switch
1
6
LCD Module
1
7
5v Power Supply
1
8
Solenoid Lock
1
9
Vero Board
1
10
Potentiometer
1
11
White Box
1
12
Push Buttons
4
13
A pack of jumper Wires
1
Total
For this Bimodal Biometric-based Surveillance System; to verify and allow access to people, a fingerprint sensor is a biometric device that records and analyzes distinctive fingerprint patterns. This ensures secure identification and authorization. In this project, a simple fingerprint module was used to capture the fingerprint data of the users. The figure below shows an image of the fingerprint module that would be used.
In a lithium battery, the lithium ions are used to promote the movement of electrical current. It has a long lifespan, a lightweight design, and a high energy density. Mobile phones, laptop computers, electric cars, and portable electronics all frequently use lithium batteries. Because they provide effective and dependable power storage, they are a common option in contemporary technology. Lithium batteries must be handled and charged safely to avoid overheating or other potential risks. In this project, the lithium batteries serve as backup for the design in case of situations where there is no direct power.
face and fingerprint recognition: The LiPo battery used as power backup
A CSI (Camera Serial Interface) camera is a type of camera module that is designed to be used specifically with Raspberry Pi and other devices that support CSI interfaces. It connects to the CSI port on the device, providing a direct and high-speed data link for transferring image and video data. CSI cameras are typically compact and offer high-resolution capabilities, making them suitable for various applications such as surveillance systems, robotics, computer vision projects, and more.
face and fingerprint recognition: The CSI camera used for face detection and recognition
They often come with adjustable focus, and different lens options, and can be controlled programmatically to capture and process images or video streams.
In this project, Bimodal Biometric-based Surveillance System, the CSI camera is used to detect and record the faces of the individuals who want to gain access to the facility. Figure 3.5 shows an image of the CSI camera.
Programming the Raspberry Pi for Face Detection And Recognition
To program the face recognition part of this Bimodal Biometric-based Surveillance System project, python codes if mot most of it was replicated from Caroline Dunn from Tomshardware. The project design was supposed to log the entry of each successfully verified personnel or users but the cloud email email account required payment. And we haven’t got that yet.
To begin the preparation, we made sure that the CSI camera was connected to the raspberry pi firmly. And after this we are ready to install the dependencies for the face recognition. Using OpenCV, face_recognition, imutils, and a temporary swapfile modification, we will set up our Raspberry Pi for machine learning and facial recognition in this stage.
An open-source software package called OpenCV is used to process images and videos in real-time using machine learning. The Python face_recognition library will be utilized to calculate the bounding box surrounding every face, calculate facial embedding, and perform face comparisons inside the encoding dataset. Imutils is a set of useful routines to speed up Raspberry Pi OpenCV computation.
To finish this portion of the facial recognition tutorial, allow at least two hours. The duration of each command on a Raspberry Pi 4 8GB running at largely depends on your internet speed. Also, you may not not be successful doing this on Raspberry pi 3B+. I have tried it out 3 times and it didn’t work. I think the OpenCV library was too heavy for the processor speed. However, you are welcome to disprove me. Just leave a comment in the comments section if you pulled this off on Raspberry pi 3B+.
We assume that you have already loaded your Raspbian on your raspi and also the apps and libraries inside are up to date. You can also use the command line sudo apt-get update && sudo apt-get upgrade to update them. Personally, if i just downloaded my Raspbian OS unto a new SD, I don’t do this again. But feel free to open the command line by pressing command+T in your raspi desktop environment to get started.
Use your terminal to type the following instructions to install OpenCV. Before moving on to the next command, copy and paste each one into the terminal on your Pi, hit Enter, and wait for it to complete. When asked, “Would you like to proceed? (y/n)” hit the Enter key after selecting y.
Before executing the following set of operations, we must first extend the swapfile. We will begin by opening dphys-swapfile for editing in order to extend the swapfile:
sudo nano /etc/dphys-swapfile
After the file is opened, add CONF_SWAPSIZE=2048 and comment out the line CONF_SWAPSIZE=100.
In order to save your modifications to dphys-swapfile, press Ctrl-X, Y, and then Enter. This is merely a temporary modification that we will reverse once OpenCV is fully installed.
Please not that this file was edited using the Nano editor or IDE. We now need to restart our swapfile by running the following command in order for our changes to take effect:
sudo systemctl restart dphys-swapfile
Now let’s go back to installing packages by giving each of the following commands a separate entry in our terminal. I’ve listed the approximate times for each Raspberry Pi 4 8GB command.
Once OpenCV has been installed successfully, we will restore our swapfile to its initial condition. Enter the following in your terminal:
sudo nano /etc/dphys-swapfile
Once the file is open, uncomment CONF_SWAPSIZE=100 and delete or comment out CONF_SWAPSIZE=2048. Press Ctrl-X, Y and then Enter to save your changes to sudo phys-swapfile. Once again, we will restart our swapfile with the command:
sudo systemctl restart dphys-swapfile
Next, we need to use the pip command to install face-recognition module/lib.
pip install face-recognition
Also, install the imutils module
Install imutils
Install these modules again using pip2 instead of pip if you receive problems like “No module named imutils” or “No module named face-recognition” during model training. Some OS has pip2 installed instead of pip.
Once this is done, you can proceed to git clone my folder on GitHub. open your command terminal and type the following:
Let’s now assemble the dataset that will be used to teach our Pi. Click the folder icon to open your file manager from your Raspberry Pi desktop. Go to the dataset folder after navigating to the face_recognition folder. Within the dataset folder, use the right-click menu to choose New Folder.
Open headshots_picam.py in Geany while you’re still in the File Manager and navigate to the face_recognition folder. In line 3 of headshots_picam.py, enter the name of the folder you just made in step above in lieu of Anc (between quote marks). Continue to enclose your name in quote marks. Your name on line 3 and your name in the dataset folder should exactly match.
In Geany, click the Paper Airplane icon to run headshots_picam.py. Your CSI will be visible in a new window that opens. (On a Raspberry Pi 4, the camera viewer window opened in about ten seconds.) To take a picture of yourself, point the CSI in your direction and hit the spacebar. Pressing the spacebar initiates a new photo capture each time. We advise you to take roughly ten pictures of your face from various perspectives, being sure to slightly turn your head in each one. You can take a couple pictures both with and without your glasses if you wear them. It is not advised to wear hats in training shots. Our model will be trained using these images. When you’re done taking pictures, hit Esc.
To view your images, use your file manager and return to the folders containing your name and dataset. To view a single photo, double-click on it. Click the arrow key in the bottom left corner of each photo to navigate through all of the ones you took in the previous phase. I would recommend taking these snapshots instead of uploading a folder with pictures. Because when tested, the accuracy was more for the headshots taken with the CSI camera.
We are prepared to train our model now that our dataset has been assembled. Type the following to open a new terminal and go to face_recognition.
cd face_recognition
The command checks the directory and opens it up for further command entry from you. The Pi needs three to four seconds to process through every image in your dataset. The Pi will need roughly one and a half minutes to process a dataset containing twenty images and create the encodings.pickle folder. Enter the following to launch the model training command:
python train_model.py
training the face recognition datasets
The train_model.py code notes:
Photos in the dataset folder will be analyzed using train_model.py. Sort your pictures by the names of the people in them. For instance, inside the dataset folder, make a new folder called Paul and store all of the images of Paul’s face inside of it.
Encodings: train_model.py will produce an encodings.pickle file with the standards needed to recognize faces in the following stage. The HOG (Histogram of Oriented Gradients) detection approach is what we’re employing. Let’s test the newly trained model now.
Type the following command to test the model:
python facial_req.py
The testing of the face recognition system now will tell us how accurate the trained model is.
Your CSI camera view should open in a few seconds. Direct the CSI camera towards your visage. Your face has been appropriately trained to be recognized by the model if it has a yellow box around it with your name on it.
Fingerprint Biometric Recognition
The installation of the Adafruit libraries for this is well detailed on this Raspberry Pi website here. The blog post contains step-by-step process on how to do this.
You can also download a free copy of al versions of the schematic diagram from my GitHub page here.
Explanation of the Schematic Diagram
Although not shown above in the schematic diagram but both the Raspi and the Arduino were connected together for serial communication using the Arduino Nano programming cable (Watch YouTube video below). We used an RBG LED to show different stages of the system design. When it is locked, it will show red light, if it is half-way verified, that is only the fingerprint verification has been successful, it will show blue color, and when both face and fingerprint biometric verifications are successful, it will turn to green color.
Now, we were supposed to use micro-switches, but after much considerations we reverted to infrared proximity sensor so that the design can sense when a user is closer to the door. The actual designed was powered by a 3.7V LiPo batteries connected in series connection to form a 12V.
Combining the Whole Codes For Face and Fingerprint Recognition
Open the following file in your Raspi Desktop environment using any editor best for you. We have already done the buck of the work for you. Run this code and ensure that you connected everything as shown in the schematic diagram above.
The Arduino Source Code
// include the library code:
#include <LiquidCrystal.h>
#define sensorPin 4
#define redLED A4
#define blueLED A3
#define greenLED A2
#define doorPin A1
#define buzzer A5
int readSensor;
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 5, en = 6, d4 = 7, d5 = 8, d6 = 9, d7 = 10;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Serial.begin(9600);
pinMode(sensorPin, INPUT_PULLUP);
pinMode(redLED, OUTPUT);
pinMode(blueLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(doorPin, OUTPUT);
digitalWrite(blueLED, HIGH);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
lcd.setCursor(4, 0);
// Print a message to the LCD.
lcd.print("HELLO KARIS");
}
int readButtonPressed(){
readSensor = digitalRead(sensorPin);
return readSensor;
}
void buzzerTone(){
digitalWrite(buzzer, HIGH);
delay(2000);
digitalWrite(buzzer, LOW);
}
void blinkGreenLED(){
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
delay(300);
digitalWrite(greenLED, LOW);
delay(300);
digitalWrite(greenLED, HIGH);
delay(300);
digitalWrite(greenLED, LOW);
delay(300);
}
void blinkBlueLED(){
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);
digitalWrite(blueLED, HIGH);
delay(300);
digitalWrite(blueLED, LOW);
delay(300);
digitalWrite(blueLED, HIGH);
delay(300);
digitalWrite(blueLED, LOW);
delay(300);
}
void doorOpen(){
digitalWrite(doorPin, HIGH);
delay(7000);
digitalWrite(doorPin, LOW);
Serial.println("2");
}
void loop() {
readButtonPressed();
if (Serial.available() > 0) {
String data = Serial.readStringUntil('n');
//Serial.println(data);
if (data == "start"){
if(readSensor == LOW){
Serial.println("0");
}
else if(readSensor == HIGH){
Serial.println("");
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print(" BIMODAL");
lcd.setCursor(0, 1);
lcd.print(" VERIFICATION ");
lcd.setCursor(0, 2);
lcd.print(" SMART PROJECT");
}
}
if (data == "Waiting for finger"){
blinkGreenLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("PLEASE PLACE");
lcd.setCursor(0, 1);
lcd.print(" FINGER ");
lcd.setCursor(0, 2);
lcd.print(" FOR VERIFICATION");
}
if(data == "Error fingerprint sensor failed"){
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, LOW);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT SENSOR ");
lcd.setCursor(0, 1);
lcd.print(" FAILED ");
lcd.setCursor(0, 2);
lcd.print("PLEASE CLEAN THE");
lcd.setCursor(0, 3);
lcd.print("FINGERPRINT SENSOR");
buzzerTone();
}
if(data == "No match found"){
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, LOW);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT CHECKED ");
lcd.setCursor(0, 1);
lcd.print(" FAILED ");
lcd.setCursor(0, 2);
lcd.print("NO MATCH FOUND");
lcd.setCursor(0, 3);
lcd.print("ON THE DATABASE");
buzzerTone();
}
if(data == "fingerprint sensor not initialised"){
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, LOW);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT SENSOR ");
lcd.setCursor(0, 1);
lcd.print(" NOT CONNECTED ");
lcd.setCursor(0, 2);
lcd.print("PLEASE CHECK");
lcd.setCursor(0, 3);
lcd.print("CONNECTION");
buzzerTone();
}
if(data == "Fingerprint found"){
blinkGreenLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT DATA");
lcd.setCursor(0, 1);
lcd.print("FOUND IN DATABASE");
lcd.setCursor(0, 2);
lcd.print("PLEASE WAIT FOR");
lcd.setCursor(0, 3);
lcd.print("FACE RECOGNITION");
digitalWrite(redLED, LOW);
digitalWrite(blueLED, HIGH);
digitalWrite(greenLED, LOW);
}
if(data == "Anc"){
blinkBlueLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. ANC");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
doorOpen();
}
if(data == "Samuel"){
blinkBlueLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. SAMUEL");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
doorOpen();
}
if(data == "Constantine"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. CONSTANTINE");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Karis"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. KARIS");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Maero"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. MAERO");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Ose"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. OSE");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Otiger"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. OTIGER");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
//else{
// lcd.clear();
// lcd.setCursor(3, 0);
// // Print a message to the LCD.
// lcd.print(data);
//
//}
}
}
Results And Testing
The project design was successful and worked as programmed. We proceeded to test it out on different users and they were able to gain access to the other side of the model door only if they were registered or already in the database.
Conclusion
The face and fingerprint recognition surveillance system design has been successfully implemented in this blog post. We would like to know if you found this post helpful and you were able to follow through to replicate it. Lt us know by leaving a comment below.
What is the difference between face recognition and fingerprint recognition?
Face recognition uses facial features to identify individuals, while fingerprint recognition relies on the unique patterns of fingerprints. Both technologies offer contactless and relatively accurate identification methods. Although in Bimodal Biometric-based Surveillance System, we used both of them.
Which technology is more accurate?
The accuracy of both technologies depends on various factors, including the quality of the sensors, lighting conditions, and the size of the database being compared against. Generally, fingerprint recognition tends to be slightly more accurate than face recognition, especially in controlled environments. However, advancements in facial recognition algorithms are rapidly closing the gap.
What are the advantages of using face or fingerprint recognition?
As seen in this Bimodal Biometric-based Surveillance System, both technologies offer several advantages over traditional identification methods like passwords or key cards:
* **Convenience:** They are contactless and quick, providing seamless user experience.
* **Security:** They are more difficult to fake or forge compared to traditional methods.
* **Scalability:** They can be easily implemented for large groups of people.
What are the disadvantages of using face or fingerprint recognition?
Some potential drawbacks to consider include:
* **Privacy concerns:** Collecting and storing biometric data raises privacy concerns, and regulations like GDPR need to be considered.
* **Cost:** Implementing and maintaining these systems can be expensive, especially for complex projects.
* **Accuracy limitations:** Both technologies can be susceptible to errors under certain conditions, like poor lighting or facial coverings.
Face Recognition Specific FAQs:
What kind of camera is needed for face recognition?
For the Bimodal Biometric-based Surveillance System, we used the CSI camera. However, the type of camera needed depends on the application and desired accuracy. High-resolution cameras with good lighting are generally recommended.
How is face recognition data stored?
Face recognition data is typically stored in secure databases using encryption and other security measures.
Can face recognition be used for tracking people?
Yes, face recognition can be used for tracking people’s movements, which raises ethical concerns and requires careful consideration of privacy regulations.
Fingerprint Recognition Specific FAQs:
What kind of sensor is needed for fingerprint recognition?
There are different types of fingerprint sensors available, each with its own advantages and disadvantages. Optical sensors are common, but capacitive and ultrasonic sensors offer better accuracy for dry or damaged fingerprints.
Can fingerprints be easily copied?
While copying fingerprints is more difficult than forging signatures, it is not impossible. Implementing strong security measures is crucial to protect fingerprint data.
Can fingerprint recognition be used for medical purposes?
Fingerprint recognition is increasingly being explored for medical applications, such as identifying patients or monitoring their health.
This project design would make use of both the face recognition and fingerprint recognition biometrics to verify a user before they can access the entry or exit a door. The system design was made using a Raspberry pi 4B microcomputer, as well as an Arduino Nano board that was connected in serial connection to it. While the Raspberry Pi controls both the face and fingerprint recognition biometrics; the Arduino board was responsible for actuating and displaying feedback responses through an LCD screen to the user. Ensure you read through to the end to get the full grasp of the project design.
face and fingerprint recognition: The Raspberry pi 4B used for the project design
Face and Fingerprint Recognition: The Components/Materials Used
S/N
Apparatus
Quantity
Cost per Quantity (₦)
Cost (₦)
1
Raspberry Pi 4
1
2
Resistors
1
3
Rechargeable Battery
3
4
CSI Camera
1
5
Switch
1
6
LCD Module
1
7
5v Power Supply
1
8
Solenoid Lock
1
9
Vero Board
1
10
Potentiometer
1
11
White Box
1
12
Push Buttons
4
13
A pack of jumper Wires
1
Total
To verify and allow access to people, a fingerprint sensor is a biometric device that records and analyzes distinctive fingerprint patterns. This ensures secure identification and authorization. In this project, a simple fingerprint module was used to capture the fingerprint data of the users. The figure below shows an image of the fingerprint module that would be used.
In a lithium battery, the lithium ions are used to promote the movement of electrical current. It has a long lifespan, a lightweight design, and a high energy density. Mobile phones, laptop computers, electric cars, and portable electronics all frequently use lithium batteries. Because they provide effective and dependable power storage, they are a common option in contemporary technology. Lithium batteries must be handled and charged safely to avoid overheating or other potential risks. In this project, the lithium batteries serve as backup for the design in case of situations where there is no direct power.
face and fingerprint recognition: The LiPo battery used as power backup
A CSI (Camera Serial Interface) camera is a type of camera module that is designed to be used specifically with Raspberry Pi and other devices that support CSI interfaces. It connects to the CSI port on the device, providing a direct and high-speed data link for transferring image and video data. CSI cameras are typically compact and offer high-resolution capabilities, making them suitable for various applications such as surveillance systems, robotics, computer vision projects, and more.
face and fingerprint recognition: The CSI camera used for face detection and recognition
They often come with adjustable focus, and different lens options, and can be controlled programmatically to capture and process images or video streams.
In this project, the CSI camera is used to detect and record the faces of the individuals who want to gain access to the facility. Figure 3.5 shows an image of the CSI camera.
Programming the Raspberry Pi for Face Detection And Recognition
To program the face recognition part of this project python codes if mot most of it was replicated from Caroline Dunn from Tomshardware. The project design was supposed to log the entry of each successfully verified personnel or users but the cloud email email account required payment. And we haven’t got that yet.
To begin the preparation, we made sure that the CSI camera was connected to the raspberry pi firmly. And after this we are ready to install the dependencies for the face recognition. Using OpenCV, face_recognition, imutils, and a temporary swapfile modification, we will set up our Raspberry Pi for machine learning and facial recognition in this stage.
An open-source software package called OpenCV is used to process images and videos in real-time using machine learning. The Python face_recognition library will be utilized to calculate the bounding box surrounding every face, calculate facial embedding, and perform face comparisons inside the encoding dataset. Imutils is a set of useful routines to speed up Raspberry Pi OpenCV computation.
To finish this portion of the facial recognition tutorial, allow at least two hours. The duration of each command on a Raspberry Pi 4 8GB running at largely depends on your internet speed. Also, you may not not be successful doing this on Raspberry pi 3B+. I have tried it out 3 times and it didn’t work. I think the OpenCV library was too heavy for the processor speed. However, you are welcome to disprove me. Just leave a comment in the comments section if you pulled this off on Raspberry pi 3B+.
We assume that you have already loaded your Raspbian on your raspi and also the apps and libraries inside are up to date. You can also use the command line sudo apt-get update && sudo apt-get upgrade to update them. Personally, if i just downloaded my Raspbian OS unto a new SD, I don’t do this again. But feel free to open the command line by pressing command+T in your raspi desktop environment to get started.
Use your terminal to type the following instructions to install OpenCV. Before moving on to the next command, copy and paste each one into the terminal on your Pi, hit Enter, and wait for it to complete. When asked, “Would you like to proceed? (y/n)” hit the Enter key after selecting y.
Before executing the following set of operations, we must first extend the swapfile. We will begin by opening dphys-swapfile for editing in order to extend the swapfile:
sudo nano /etc/dphys-swapfile
After the file is opened, add CONF_SWAPSIZE=2048 and comment out the line CONF_SWAPSIZE=100.
In order to save your modifications to dphys-swapfile, press Ctrl-X, Y, and then Enter. This is merely a temporary modification that we will reverse once OpenCV is fully installed.
Please not that this file was edited using the Nano editor or IDE. We now need to restart our swapfile by running the following command in order for our changes to take effect:
sudo systemctl restart dphys-swapfile
Now let’s go back to installing packages by giving each of the following commands a separate entry in our terminal. I’ve listed the approximate times for each Raspberry Pi 4 8GB command.
Once OpenCV has been installed successfully, we will restore our swapfile to its initial condition. Enter the following in your terminal:
sudo nano /etc/dphys-swapfile
Once the file is open, uncomment CONF_SWAPSIZE=100 and delete or comment out CONF_SWAPSIZE=2048. Press Ctrl-X, Y and then Enter to save your changes to sudo phys-swapfile. Once again, we will restart our swapfile with the command:
sudo systemctl restart dphys-swapfile
Next, we need to use the pip command to install face-recognition module/lib.
pip install face-recognition
Also, install the imutils module
Install imutils
Install these modules again using pip2 instead of pip if you receive problems like “No module named imutils” or “No module named face-recognition” during model training. Some OS has pip2 installed instead of pip.
Once this is done, you can proceed to git clone my folder on GitHub. open your command terminal and type the following:
Let’s now assemble the dataset that will be used to teach our Pi. Click the folder icon to open your file manager from your Raspberry Pi desktop. Go to the dataset folder after navigating to the face_recognition folder. Within the dataset folder, use the right-click menu to choose New Folder.
Open headshots_picam.py in Geany while you’re still in the File Manager and navigate to the face_recognition folder. In line 3 of headshots_picam.py, enter the name of the folder you just made in step above in lieu of Anc (between quote marks). Continue to enclose your name in quote marks. Your name on line 3 and your name in the dataset folder should exactly match.
In Geany, click the Paper Airplane icon to run headshots_picam.py. Your CSI will be visible in a new window that opens. (On a Raspberry Pi 4, the camera viewer window opened in about ten seconds.) To take a picture of yourself, point the CSI in your direction and hit the spacebar. Pressing the spacebar initiates a new photo capture each time. We advise you to take roughly ten pictures of your face from various perspectives, being sure to slightly turn your head in each one. You can take a couple pictures both with and without your glasses if you wear them. It is not advised to wear hats in training shots. Our model will be trained using these images. When you’re done taking pictures, hit Esc.
To view your images, use your file manager and return to the folders containing your name and dataset. To view a single photo, double-click on it. Click the arrow key in the bottom left corner of each photo to navigate through all of the ones you took in the previous phase. I would recommend taking these snapshots instead of uploading a folder with pictures. Because when tested, the accuracy was more for the headshots taken with the CSI camera.
We are prepared to train our model now that our dataset has been assembled. Type the following to open a new terminal and go to face_recognition.
cd face_recognition
The command checks the directory and opens it up for further command entry from you. The Pi needs three to four seconds to process through every image in your dataset. The Pi will need roughly one and a half minutes to process a dataset containing twenty images and create the encodings.pickle folder. Enter the following to launch the model training command:
python train_model.py
training the face recognition datasets
The train_model.py code notes:
Photos in the dataset folder will be analyzed using train_model.py. Sort your pictures by the names of the people in them. For instance, inside the dataset folder, make a new folder called Paul and store all of the images of Paul’s face inside of it.
Encodings: train_model.py will produce an encodings.pickle file with the standards needed to recognize faces in the following stage. The HOG (Histogram of Oriented Gradients) detection approach is what we’re employing. Let’s test the newly trained model now.
Type the following command to test the model:
python facial_req.py
The testing of the face recognition system now will tell us how accurate the trained model is.
Your CSI camera view should open in a few seconds. Direct the CSI camera towards your visage. Your face has been appropriately trained to be recognized by the model if it has a yellow box around it with your name on it.
Fingerprint Biometric Recognition
The installation of the Adafruit libraries for this is well detailed on this Raspberry Pi website here. The blog post contains step-by-step process on how to do this.
You can also download a free copy of al versions of the schematic diagram from my GitHub page here.
Explanation of the Schematic Diagram
Although not shown above in the schematic diagram but both the Raspi and the Arduino were connected together for serial communication using the Arduino Nano programming cable (Watch YouTube video below). We used an RBG LED to show different stages of the system design. When it is locked, it will show red light, if it is half-way verified, that is only the fingerprint verification has been successful, it will show blue color, and when both face and fingerprint biometric verifications are successful, it will turn to green color.
Now, we were supposed to use micro-switches, but after much considerations we reverted to infrared proximity sensor so that the design can sense when a user is closer to the door. The actual designed was powered by a 3.7V LiPo batteries connected in series connection to form a 12V.
Combining the Whole Codes For Face and Fingerprint Recognition
Open the following file in your Raspi Desktop environment using any editor best for you. We have already done the buck of the work for you. Run this code and ensure that you connected everything as shown in the schematic diagram above.
The Arduino Source Code
// include the library code:
#include <LiquidCrystal.h>
#define sensorPin 4
#define redLED A4
#define blueLED A3
#define greenLED A2
#define doorPin A1
#define buzzer A5
int readSensor;
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 5, en = 6, d4 = 7, d5 = 8, d6 = 9, d7 = 10;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Serial.begin(9600);
pinMode(sensorPin, INPUT_PULLUP);
pinMode(redLED, OUTPUT);
pinMode(blueLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(doorPin, OUTPUT);
digitalWrite(blueLED, HIGH);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
lcd.setCursor(4, 0);
// Print a message to the LCD.
lcd.print("HELLO KARIS");
}
int readButtonPressed(){
readSensor = digitalRead(sensorPin);
return readSensor;
}
void buzzerTone(){
digitalWrite(buzzer, HIGH);
delay(2000);
digitalWrite(buzzer, LOW);
}
void blinkGreenLED(){
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
delay(300);
digitalWrite(greenLED, LOW);
delay(300);
digitalWrite(greenLED, HIGH);
delay(300);
digitalWrite(greenLED, LOW);
delay(300);
}
void blinkBlueLED(){
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);
digitalWrite(blueLED, HIGH);
delay(300);
digitalWrite(blueLED, LOW);
delay(300);
digitalWrite(blueLED, HIGH);
delay(300);
digitalWrite(blueLED, LOW);
delay(300);
}
void doorOpen(){
digitalWrite(doorPin, HIGH);
delay(7000);
digitalWrite(doorPin, LOW);
Serial.println("2");
}
void loop() {
readButtonPressed();
if (Serial.available() > 0) {
String data = Serial.readStringUntil('\n');
//Serial.println(data);
if (data == "start"){
if(readSensor == LOW){
Serial.println("0");
}
else if(readSensor == HIGH){
Serial.println("");
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print(" BIMODAL");
lcd.setCursor(0, 1);
lcd.print(" VERIFICATION ");
lcd.setCursor(0, 2);
lcd.print(" SMART PROJECT");
}
}
if (data == "Waiting for finger"){
blinkGreenLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("PLEASE PLACE");
lcd.setCursor(0, 1);
lcd.print(" FINGER ");
lcd.setCursor(0, 2);
lcd.print(" FOR VERIFICATION");
}
if(data == "Error fingerprint sensor failed"){
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, LOW);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT SENSOR ");
lcd.setCursor(0, 1);
lcd.print(" FAILED ");
lcd.setCursor(0, 2);
lcd.print("PLEASE CLEAN THE");
lcd.setCursor(0, 3);
lcd.print("FINGERPRINT SENSOR");
buzzerTone();
}
if(data == "No match found"){
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, LOW);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT CHECKED ");
lcd.setCursor(0, 1);
lcd.print(" FAILED ");
lcd.setCursor(0, 2);
lcd.print("NO MATCH FOUND");
lcd.setCursor(0, 3);
lcd.print("ON THE DATABASE");
buzzerTone();
}
if(data == "fingerprint sensor not initialised"){
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, LOW);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT SENSOR ");
lcd.setCursor(0, 1);
lcd.print(" NOT CONNECTED ");
lcd.setCursor(0, 2);
lcd.print("PLEASE CHECK");
lcd.setCursor(0, 3);
lcd.print("CONNECTION");
buzzerTone();
}
if(data == "Fingerprint found"){
blinkGreenLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("FINGERPRINT DATA");
lcd.setCursor(0, 1);
lcd.print("FOUND IN DATABASE");
lcd.setCursor(0, 2);
lcd.print("PLEASE WAIT FOR");
lcd.setCursor(0, 3);
lcd.print("FACE RECOGNITION");
digitalWrite(redLED, LOW);
digitalWrite(blueLED, HIGH);
digitalWrite(greenLED, LOW);
}
if(data == "Anc"){
blinkBlueLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. ANC");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
doorOpen();
}
if(data == "Samuel"){
blinkBlueLED();
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. SAMUEL");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
doorOpen();
}
if(data == "Constantine"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. CONSTANTINE");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Karis"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. KARIS");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Maero"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. MAERO");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Ose"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. OSE");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
if(data == "Otiger"){
blinkBlueLED();
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print("WELCOME MR. OTIGER");
lcd.setCursor(0, 1);
lcd.print("FACE IDENTITY ");
lcd.setCursor(0, 2);
lcd.print("VERIFIED ");
lcd.setCursor(0, 3);
lcd.print("PLEASE PROCEED");
doorOpen();
}
//else{
// lcd.clear();
// lcd.setCursor(3, 0);
// // Print a message to the LCD.
// lcd.print(data);
//
//}
}
}
Results And Testing
The project design was successful and worked as programmed. We proceeded to test it out on different users and they were able to gain access to the other side of the model door only if they were registered or already in the database.
Conclusion
The face and fingerprint recognition surveillance system design has been successfully implemented in this blog post. We would like to know if you found this post helpful and you were able to follow through to replicate it. Lt us know by leaving a comment below.
What is the difference between face recognition and fingerprint recognition?
Face recognition uses facial features to identify individuals, while fingerprint recognition relies on the unique patterns of fingerprints. Both technologies offer contactless and relatively accurate identification methods.
Which technology is more accurate?
The accuracy of both technologies depends on various factors, including the quality of the sensors, lighting conditions, and the size of the database being compared against. Generally, fingerprint recognition tends to be slightly more accurate than face recognition, especially in controlled environments. However, advancements in facial recognition algorithms are rapidly closing the gap.
What are the advantages of using face or fingerprint recognition?
Both technologies offer several advantages over traditional identification methods like passwords or key cards:
* **Convenience:** They are contactless and quick, providing seamless user experience.
* **Security:** They are more difficult to fake or forge compared to traditional methods.
* **Scalability:** They can be easily implemented for large groups of people.
What are the disadvantages of using face or fingerprint recognition?
Some potential drawbacks to consider include:
* **Privacy concerns:** Collecting and storing biometric data raises privacy concerns, and regulations like GDPR need to be considered.
* **Cost:** Implementing and maintaining these systems can be expensive, especially for complex projects.
* **Accuracy limitations:** Both technologies can be susceptible to errors under certain conditions, like poor lighting or facial coverings.
Face Recognition Specific FAQs:
What kind of camera is needed for face recognition?
The type of camera needed depends on the application and desired accuracy. High-resolution cameras with good lighting are generally recommended.
How is face recognition data stored?
Face recognition data is typically stored in secure databases using encryption and other security measures.
Can face recognition be used for tracking people?
Yes, face recognition can be used for tracking people’s movements, which raises ethical concerns and requires careful consideration of privacy regulations.
Fingerprint Recognition Specific FAQs:
What kind of sensor is needed for fingerprint recognition?
There are different types of fingerprint sensors available, each with its own advantages and disadvantages. Optical sensors are common, but capacitive and ultrasonic sensors offer better accuracy for dry or damaged fingerprints.
Can fingerprints be easily copied?
While copying fingerprints is more difficult than forging signatures, it is not impossible. Implementing strong security measures is crucial to protect fingerprint data.
Can fingerprint recognition be used for medical purposes?
Fingerprint recognition is increasingly being explored for medical applications, such as identifying patients or monitoring their health.