OCBC Hackathon 2022 - #1 Place Overall Winner 🏆
Index Deployment: https://notaddison.github.io/ATM-3/Web/HTML/Index/
Dashboard Deployment: https://notaddison.github.io/ATM-3/Web/HTML/Dashboard/
Problem Statement:
What if we could build an intelligent electronic detection system which does not disrupt the customer experience at out automated teller machines to detect such scam activities?
API Flow
API Documentation: https://github.com/NotAddison/PFD-2022/blob/main/API/README.md
Demo Video
PFD_Team_D_Demo.mp4
Possible security risks that ATMs faces
- PIN Thermal Imaging
- Shoulder Surfing
- Database Leaks
- Scams
- Card Skimming
Network Attack[Implemented alr (ATM Firewall)]Lebanese Loop[ Hard to Detect ]Cash Trapping[ Hard to Detect ]
Possible ideas to mitigate the risks
-
Computer Vision (OpenCV)
- Facial / Emotion Recognition
- Hostile Object Recognition (E.g; Knife, Gun)
-
Covered Camera Check
- Checks if camera of ATM is covered / broken.
-
Mobile App
- To utilize Biometrics (fingerprint / face recognition)
- Listen to ATM response > Request from device (on request auth)
-
Outlier Analysis (ML)
- Check for outlier when withdrawing cash.
- If an account receives a large amount of money within a short period, mark account as "Suspicious".
- If an account withdraws a large amount of money within a short period, mark account as "Suspicious".
- If an account receives many transactions from multiple accounts within a short period, mark account as "Suspicious".
-
Extra Validations
- Withdrawal : Fingerprint + Age Check (if elderly / large amount :: show warning prompt of scam possibility)
- Transfer of Funds : Check if address of transfer is "Blacklisted" or "Suspicious"
- Integrate w/ ML to detect outliers > Prompt/Notify users.
- (esp for Senior Citizen) & Scams.
-
Database Leak Checker (HaveIBeenPwned API)
- Check if user's data has been leaked, send a pop-up notification on the ATM ONCE.
-
Message Alert (Webhook)
- Integrate w/ Database Leak Checker & Authentications (OpenCV & Pin failure).
- Send a message to the user's phone when the ATM detects a suspicious activity (ML - #4).
- Send alert when user is withdrawing a large amount of money (#5).
- Send alert if user is transferring money to a suspicious (blacklisted) account (#5).
- Send an alert if user is in a hostage situation (#1).
-
NFC/EVC Chip Biometrics
- Read Card Number > Query backend > Get biometric "fingerprint"/hash > Compare with user's biometrics
-
Operator Dashboard
- Summary of all ATM : [E.G: 3 Hostage situation detected]
-
Transfer Details
- Show details of the transferee (Name, Address, etc).
- Allow the user to verify the details before transferring money (also can prevent accidental typo).
--- Contributions 👤 ---
Addison (@NotAddison)
Paul (@realelongatedmusket)
Fredor (@Lunebun)
Jia Hau (@JiaHauHau)
Haziq (@haziqakid)
- Clone the repo
- Add a .env file in the API folder
- Add the following variables in the .env file
WEBHOOK_URL = "YOUR_KEY_HERE"
HIBP_API_KEY = "YOUR_KEY_HERE"
- Run the "Startup.bat" file
- Launch your android emulator
- Press "1" and press "Enter" to start all the services
- Profit 👍
Dependencies for the project
-
Python => 3.9
- OpenCV (Custom CUDA Build) [pip install opencv-python]
- Deepface [pip install deepface]
- YoloV4
- Matplotlib & Pandas
- Requests
- Tensorflow-GPU (https://www.tensorflow.org/install/source#gpu)
-
Flutter
- Flutter SDK 3.3.10
- Android Studio SDK (Virtual Device)
-
NodeJS (NPM)
- Express
- Requests
- Python-Shell
-
CUDA Toolkit
- CUDA (Version 11.2)
- cuDNN (Version 8.1.0)
OpenCV CUDA Build Properties
- CMAKE Options:- (optional) PYTHON3_PACKAGE_PATH
- WITH_CUDA
- BUILD_opencv_dnn
- OPENCV_DNN_CUDA
- ENABLE_FAST_MATH
- BUILD_opencv_world
- OPENCV_EXTRA_MODULES_PATH (set path to opencv contrib folder "contrib/modules")
- (AFTER CONGIRUATION)
- CUDA_FAST_MATH
- CUDA_ARCH_BIN (set gpu architechture: https://en.wikipedia.org/wiki/CUDA) - config (set to Release)
Naming Conventions, Git, References & Credits
Naming Conventions
- Commits : https://www.freecodecamp.org/news/writing-good-commit-messages-a-practical-guide/- Functions : PascalCase, Function names start with a capital letter. (E.g: ParseJson())
- Variables: camelCase or Hungarian Notation. (E.g: isValid or **b**IsValid)
- Constants: All uppercase. (E.g: const int MAX_SIZE = 100;)
- Classes: PascalCase, Class names start with a capital letter. (E.g: class MyClass)
- Asset Files: PascalCase, File names start with a capital letter. (E.g: MyFile.txt)
- Script Files: PascalCase or snake_case, File names start with a lowercase letter. (E.g: my_script.py or MyScript.py)
- References:
-
Coding Practices: https://curc.readthedocs.io/en/latest/programming/coding-best-practices.html
References / Credits
- UX of digital randomized Numberpad : https://uxpajournal.org/usability-evaluation-of-randomized-keypad/- HaveIBeenPwned API: https://haveibeenpwned.com/API/v3
