{"id":22957969,"url":"https://github.com/sergio11/voice_passport_architecture","last_synced_at":"2025-08-13T04:33:02.513Z","repository":{"id":236374228,"uuid":"215115594","full_name":"sergio11/voice_passport_architecture","owner":"sergio11","description":"VoicePassport 🎤is an innovative authentication system leveraging voice recognition technology, blockchain ⛓️ security, and vector databases 📊 for robust and seamless user verification.","archived":false,"fork":false,"pushed_at":"2025-03-25T18:14:25.000Z","size":13319,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-25T19:25:19.467Z","etag":null,"topics":["apache-airflow","apache-airflow-etl-pipeline","blockchain","blockchain-technology","docker-compose","hproxy","mongodb","qdrant","qdrant-client","qdrant-vector-database","solidity","solidity-contracts","web3","web3py"],"latest_commit_sha":null,"homepage":"https://sanchezsanchezsergio418.medium.com/voicepassport-secure-voice-identity-verification-using-vector-databases-and-blockchain-technology-bd8dccec44e6","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sergio11.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-14T18:20:22.000Z","updated_at":"2025-03-25T18:14:29.000Z","dependencies_parsed_at":"2024-08-26T15:52:18.845Z","dependency_job_id":"6616cf3d-f433-445b-a41a-fedca0160465","html_url":"https://github.com/sergio11/voice_passport_architecture","commit_stats":null,"previous_names":["sergio11/voice_passport_architecture"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sergio11/voice_passport_architecture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergio11%2Fvoice_passport_architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergio11%2Fvoice_passport_architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergio11%2Fvoice_passport_architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergio11%2Fvoice_passport_architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sergio11","download_url":"https://codeload.github.com/sergio11/voice_passport_architecture/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergio11%2Fvoice_passport_architecture/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270182803,"owners_count":24541311,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-13T02:00:09.904Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache-airflow","apache-airflow-etl-pipeline","blockchain","blockchain-technology","docker-compose","hproxy","mongodb","qdrant","qdrant-client","qdrant-vector-database","solidity","solidity-contracts","web3","web3py"],"created_at":"2024-12-14T17:33:58.224Z","updated_at":"2025-08-13T04:33:02.247Z","avatar_url":"https://github.com/sergio11.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VoicePassport: Exploring Voice-Based Authentication 🎙️🔐\n\n\u003cimg width=\"auto\" height=\"300px\" align=\"left\" src=\"./doc/voice_passport_logo.webp\" /\u003e\n\n🔒🗣️ **VoicePassport** is a proof-of-concept project exploring user authentication through unique voiceprints. Leveraging technologies like **Resemblyzer**, it generates *voice embeddings*—compact numerical representations of vocal features—to capture the distinctive traits of an individual's voice.\n\n🔍🔐 These embeddings enable a similarity-based verification process. By comparing a new voice sample with stored entries in a vector database, VoicePassport estimates the likelihood of a match and determines whether a user's identity can be confirmed.\n\n💼💬 Designed for experimentation and learning, VoicePassport offers a hands-on framework for investigating voice biometrics and secure authentication methods. It serves as a foundation for further exploration in the areas of machine learning, voice processing, and identity verification.\n\n🙏 I would like to extend my heartfelt gratitude to Karan Shingde for his insightful article published on Medium titled [\"Build an Audio-driven Speaker Recognition System Using Open Source Technologies: resemblyzer and pyAudioAnalysis\"](https://medium.com/@karanshingde/build-an-audio-driven-speaker-recognition-system-using-open-source-technologies-resemblyzer-and-6499cf0246eb). His comprehensive guide served as a significant source of inspiration and a crucial starting point for developing the VoicePassport Architecture project. Karan's expertise and dedication have been instrumental in shaping my understanding and implementation of speaker recognition technologies. I am truly thankful for his invaluable contribution to the field and for sharing his knowledge with the community. 🚀\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/flask-%23000.svg?style=for-the-badge\u0026logo=flask\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Apache%20Airflow-017CEE?style=for-the-badge\u0026logo=Apache%20Airflow\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/gunicorn-%298729.svg?style=for-the-badge\u0026logo=gunicorn\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge\u0026logo=mongodb\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Solidity-2E8B57?style=for-the-badge\u0026logo=solidity\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Alchemy-039BE5?style=for-the-badge\u0026logo=alchemy\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Remix IDE-3e5f8a?style=for-the-badge\u0026logo=remix\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Hardhat-E6522C?style=for-the-badge\u0026logo=hardhat\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Ethereum-3C3C3D?style=for-the-badge\u0026logo=Ethereum\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Smart%20Contracts-8B0000?style=for-the-badge\u0026logo=Ethereum\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/web3j-F16822?style=for-the-badge\u0026logo=web3.js\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Blockchain.com-121D33?logo=blockchaindotcom\u0026logoColor=fff\u0026style=for-the-badge\" /\u003e\n\u003c/p\u003e\n\n## ⚠️ Disclaimer  \n\n**VoicePassport** is an **experimental and educational project** designed to explore the capabilities of **voice authentication** and **speaker recognition technologies**. This system leverages **Resemblyzer** for voice processing and embedding generation, aimed at providing a **proof-of-concept** solution for identity verification through voice.  \n\nAdditionally, the name **\"VoicePassport\"** was generated during a **brainstorming session with AI**, and any resemblance to existing brands or services is purely **coincidental**.  \n\nThe **logo of VoicePassport** was **generated by ChatGPT** and is **free of copyright restrictions**. It is provided exclusively for **demonstration and educational purposes** and does not represent an actual brand or commercial entity.  \n\n## ✨ Features\n\n* **🔒 Advanced Voice Authentication**: VoicePassport harnesses the cutting-edge Resemblyzer technology to analyze and generate unique voice embeddings from user audio samples. These embeddings serve as the foundation for precise and trustworthy user authentication based on voice similarity.\n\n* **⛓️ Blockchain-Powered Security:** With blockchain integration, VoicePassport ensures unparalleled security and immutability in storing user authentication data. Each user's voice authentication details are securely hashed and recorded on the blockchain, establishing a tamper-proof ledger of user interactions.\n\n* **💾 Efficient Vector Database:** VoicePassport leverages a specialized vector database to effectively store and query voice embeddings derived from user audio samples. By employing advanced vector similarity search algorithms, VoicePassport facilitates rapid and accurate matching of voice patterns for seamless user authentication.\n\n* **🚀 Streamlined Workflow Management**: Empowered by Apache Airflow, VoicePassport streamlines the authentication process with robust workflow management capabilities. Through automated task orchestration, including audio processing, embedding generation, and database integration, VoicePassport ensures smooth and dependable operation.\n\n* **👤 Intuitive User Experience:** Designed for user convenience, VoicePassport offers a hassle-free authentication experience. Users can effortlessly enroll their voice profiles and authenticate themselves with a simple voice command, eliminating the complexity of traditional password-based methods.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"auto\" height=\"250px\" src=\"./doc/airflow_logo.png\" /\u003e\n\u003c/p\u003e\n\n## More Details 📝\n\nFor comprehensive information about this project, check out this [Medium article](https://sanchezsanchezsergio418.medium.com/voicepassport-secure-voice-identity-verification-using-vector-databases-and-blockchain-technology-bd8dccec44e6).\n\n## 🛠️ Technologies Used\n\n* **🎤 Resemblyzer**: Advanced voice analysis tool for generating voice embeddings.\n* **🔍 QDrant**: Vector database for efficient storage and querying of voice embeddings.\n* **🐍 Python**: Programming language used for backend development.\n* **🌐 Flask**: Web framework for building the RESTful API.\n* **🔗 Web3**: Python library for interacting with Ethereum blockchain.\n* **📝 Solidity**: Programming language for writing smart contracts on the Ethereum blockchain.\n* **🟣 Polygon PoS**: Scalable Ethereum sidechain for fast and low-cost transactions.\n* **🔬 Alchemy**: An analytics platform that provides insights into blockchain transactions, allowing users to monitor and analyze transaction data on the Ethereum blockchain.\n* **📦 MinIO**: Object storage service for storing voice samples files.\n* **🍃 MongoDB**: NoSQL database for storing user metadata and authentication data.\n* **🌀 Apache Airflow**: Workflow management tool for automation of audio processing tasks and database integration.\n* **🐳 Docker**: Containerization platform for packaging VoicePassport application components.\n* **🔀 HAProxy**: Load balancer for distributing incoming traffic across multiple Docker containers.\n\n## Unveiling Architecture 🏛️\n\nIn the VoicePassport platform, various architectural components work in harmony to ensure seamless voice authentication and user management functionalities. Let's explore the purpose and role of each element:\n\n\u003cimg width=\"auto\" src=\"./doc/voice_passport_architecture_diagram.jpg\" /\u003e\n\n1. **Enrollment** 🎤: Users enroll and register their voice profiles by providing audio samples. These audio samples are processed by Resemblyzer, an advanced voice analysis tool, to generate unique voice embeddings. These voice embeddings capture the distinctive characteristics of each user's voice accurately and securely. Once generated, these embeddings are stored in a database for later use in authentication.\n\n2. **Authentication** 🔐: During authentication, users speak a passphrase, and their voice is compared against the stored voice embeddings using a vector similarity search algorithm. This process determines the likelihood of a match between the user's voice and the previously registered voice embeddings. If the match is sufficiently high, the user is successfully authenticated.\n\n3. **Blockchain Verification** 🛡️: User authentication data, including voice embeddings and authentication results, undergoes cryptographic hashing and is recorded on the blockchain. This approach ensures the security and integrity of authentication data by providing an immutable and auditable record of all user interactions with the voice authentication system.\n\n4. **Apache Airflow Integration** ⚙️: The entire authentication workflow, from audio processing to task management and workflow orchestration, is handled by Apache Airflow. This integration ensures the efficient execution of audio processing tasks, voice embedding generation, and blockchain integration. Additionally, it enables centralized monitoring and management of the authentication process, ensuring its reliability and scalability.\n\nThis architectural approach provides a comprehensive and robust solution for voice authentication, offering an optimal balance of security, efficiency, and user-friendliness for end-users.\n\n## Why Blockchain Verification? 🛡️\n\nBlockchain verification is pivotal in ensuring the security, integrity, and transparency of the voice authentication system. Here's why it's essential, especially considering the implementation of the **VoiceIDVerifier DApp**:\n\n1. **Immutable Record**: By recording user authentication data on the blockchain via the VoiceIDVerifier DApp, the system creates an immutable and tamper-proof record of all authentication transactions. This ensures that once authentication data is stored, it cannot be altered or deleted, providing a reliable audit trail of user interactions.\n\n2. **Enhanced Security**: Through the VoiceIDVerifier DApp, user authentication data, including the hash of the user ID and the hash of the voice audio stored in MinIO, is cryptographically hashed and securely recorded on the blockchain. This robust security measure ensures that sensitive information remains protected from unauthorized access or tampering.\n\n3. **Transparency and Auditability**: The decentralized nature of blockchain technology, facilitated by the VoiceIDVerifier DApp, enables transparent and auditable verification of user authentication data. Stakeholders can easily access and verify the authenticity of recorded transactions, fostering trust and transparency in the authentication process.\n\n4. **Decentralized Trust**: The VoiceIDVerifier DApp eliminates the need for centralized authorities or intermediaries to verify user authentication data. Instead, trust is distributed across the network, with consensus mechanisms ensuring the accuracy and validity of recorded transactions. This decentralized trust model enhances the reliability and resilience of the authentication system.\n\nBy leveraging the capabilities of the VoiceIDVerifier DApp and blockchain technology, the voice authentication system achieves heightened security, transparency, and trustworthiness, ensuring a robust and reliable mechanism for authenticating user identities.\n\n\u003cimg width=\"auto\" height=\"250px\" src=\"./doc/polygon_logo.png\" /\u003e\n\n## UML Diagram Explanation for VoiceIDVerifier DApp Deployed on Polygon PoS\n\nThe UML diagram provides an overview of the VoiceIDVerifier decentralized application (DApp) deployed on the Polygon Proof of Stake (PoS) blockchain network. This diagram illustrates the key components, interactions, and workflows involved in the authentication process within the DApp.\n\n\u003cimg width=\"auto\" src=\"./doc/VoiceIdVerifierDapp.svg\" /\u003e\n\n## The Vector Database: A Core Element, Why QDrant? 📊\n\nThe vector database plays a crucial role in the voice authentication system, and choosing QDrant as the platform for its implementation offers several significant advantages. Below are some key reasons why QDrant is the ideal choice for managing the vector database in our system:\n\n1. **Scalability and Performance**: QDrant is designed to handle large volumes of data and provide exceptional performance in high-load environments. Its distributed architecture and parallel processing capabilities ensure optimal scalability, enabling efficient management of large amounts of voice vectors without compromising system performance.\n\n2. **Advanced Similarity Search**: QDrant offers powerful similarity search capabilities that are essential for the voice authentication process. Its vector-based similarity search algorithm ensures accurate and efficient results, allowing for quick and effective comparison of input voice vectors with those stored in the database.\n\n3. **Security and Privacy**: QDrant prioritizes data security and privacy, offering robust security measures to protect the integrity and confidentiality of stored voice vectors. Its advanced security features, such as data encryption and granular access controls, ensure that user data is effectively protected against external threats.\n\n4. **Integration with Voice Technologies**: QDrant seamlessly integrates with other key voice technologies, such as Resemblyzer, making it easy to generate, store, and search voice vectors in the voice authentication system. This seamless integration ensures optimal interoperability between the various tools and components of the system.\n\nIn summary, QDrant provides a comprehensive and highly efficient solution for managing the vector database in our voice authentication system. Its scalability, performance, security, and integration capabilities make it the ideal choice to meet the storage and search needs of voice vectors in a robust and secure voice authentication environment.\n\n \u003cimg width=\"auto\" height=\"350px\" src=\"./doc/qdrant_logo.png\" /\u003e\n\n## Installation\n\nIn this section I will provide an explanation about how to setup the whole project architecture.\n\n### Deploy VoiceIdVerifier DApp on Polygon PoS Blockhain\n\nThe first step is to clone the repository and execute the following command directory to install all the required modules\n\n```\nrake voicepassport:dapp:install_dependencies\n```\n\nAfter that it will be necessary to create an account in Alchemy, infura or another similar service in order to configure the network on which the Dapp will be deployed.\n\nIn my case, I have created a project in Alchemy and I have created a `secret.json` file to configure the deployment over the Mumbai testnet as you can see in the `hardhat.config.ts` file of the project:\n\n```\nimport { HardhatUserConfig } from \"hardhat/config\";\nimport \"@nomicfoundation/hardhat-toolbox\";\nconst secret = require('./.secret.json');\n\nconst config: HardhatUserConfig = {\n  solidity: {\n    version: \"0.8.9\",\n    settings: {\n      optimizer: {\n        enabled: true,\n      },\n    },\n  },\n  networks: {\n    hardhat: {},\n    ganache: {\n      url: \"http://127.0.0.1:7545\",\n      allowUnlimitedContractSize: true,\n      gas: 2100000,\n      gasPrice: 8000000000\n    },\n    amoy: {\n      url: `https://polygon-amoy.g.alchemy.com/v2/${secret.projectId}`,\n      accounts: [secret.accountPrivateKey]\n    }\n  }\n};\n\nexport default config;\n```\n\nThe project has a set of tests to validate the correct behaviour of the contracts and the interaction between them.\nYou can run the following command to launch the test suite on the local EVM:\n\n```\nrake voicepassport:dapp:run_tests\n```\n\n```\nVoiceIDVerifier\n    ✔ Should set the right owner (3173ms)\n    ✔ register voiceID verification successfully (181ms)\n    ✔ disable voiceID verification successfully (164ms)\n    ✔ enable voiceID verification successfully (170ms)\n    ✔ only the contract's owner can register and verify voice ids (112ms)\n\n\n  5 passing (4s)\n```\n\nYou can deploy your own VoiceIdVerifier DApp instance using the following command:\n\n```\nrake voicepassport:dapp:deploy_contracts\n```\n\nThe project has been deployed on the Polygon PoS Amoy testnet, the address of the contract is as follows:\n\n```\ncd VoiceIdVerifierDapp \u0026\u0026 npx hardhat run --network amoy scripts/deploy.ts\nVoiceIDVerifier contract deployed to 0xb23286ffEFa312CB6e828d203BB4a9FF85ee61DD\n```\n\n### Environment configuration\n\nIt is necessary preparing the environment file called `.env` placed at the root folder which contains a lot of params to configure the services used in the architecture\n\n```\n## QDrant Configuration\nQDRANT_URI=http://voice_passport_qdrant:6333\nQDRANT_API_KEY=\nQDRANT_COLLECTION=user_voice_embeddings\n\n## VoiceIdVerifierDApp - Alchemy - Polygon PoS\nVOICE_ID_VERIFIER_HTTP_PROVIDER=https://polygon-amoy.g.alchemy.com/v2/api_token\nVOICE_ID_VERIFIER_CALLER_ADDRESS=CALLER_ADDRESS\nVOICE_ID_VERIFIER_CALLER_PRIVATE_KEY=PRIVATE_KEY\nVOICE_ID_VERIFIER_CONTRACT_ADDRESS=0xb23286ffEFa312CB6e828d203BB4a9FF85ee61DD\nVOICE_ID_VERIFIER_CONTRACT_ABI_NAME=VoiceIDVerifier.json\n....................\n....................\n```\n\n### Platform Setup\n\nBelow is the order in which tasks should be executed to set up the project:\n\n1. **Upload Contract ABI to MinIO**:\n   ```bash\n   rake voicepassport:upload_contract_abi_to_minio\n   ```\n2. **Build and Push Apache Airflow Image**:\n   ```bash\n   rake voicepassport:build_and_push_airflow_image\n   ```\n3. **Build and Push VoicePassport API Image**:\n   ```bash\n   rake voicepassport:build_and_push_voice_passport_api_image\n   ```\n4. **Deploy Architecture**:\n   ```bash\n   rake voicepassport:deploy\n   ```\n5. **Create Users in Apache Airflow**:\n  ```bash\n  rake voicepassport:create_apache_airflow_users\n  ```\n\n## Screenshots 📷\nHere are some screenshots that demonstrate the functionality of Voice Passport:\n\nIt is possible to manage the information stored in QDrant by accessing its dashboard. We can visualize the created collections and stored embeddings, and even perform similarity searches.\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/snapshots/picture_1.PNG\" /\u003e\n\u003c/p\u003e\n\nEach operator implemented in each of the Apache Airflow DAGs stores tracking records in MongoDB that we can analyze and track in order to inspect their operation.\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/snapshots/picture_2.PNG\" /\u003e\n\u003c/p\u003e\n\nThrough the Apache Airflow dashboard, it is possible to monitor the operation of the DAGs and analyze their performance and various metrics.\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/snapshots/picture_3.PNG\" /\u003e\n\u003c/p\u003e\n  \nIt's possible to examine details about task execution and the provided execution configuration.\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"./doc/snapshots/picture_4.PNG\" /\u003e\n\u003c/p\u003e\n  \nThrough the Alchemy dashboard, it's possible to monitor the different transactions executed and various details regarding gas consumption or the block number where the transaction was mined.\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/snapshots/picture_5.PNG\" /\u003e\n\u003c/p\u003e\n\nIt's also possible to visit the Polygon Block Explorer to obtain more details about the mined transaction.\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/snapshots/picture_6.PNG\" /\u003e\n\u003c/p\u003e\n\nThe platform offers a REST API through which it's possible to interact with the system, initiate the registration of new users, and perform authentications.\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/snapshots/picture_7.PNG\" /\u003e\n\u003c/p\u003e\n\nThrough the Apache Airflow UI, it's possible to examine the operation of the registered DAGs, identify the number of failed, queued, and completed tasks...\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/snapshots/picture_8.PNG\" /\u003e\n  \u003cimg src=\"./doc/snapshots/picture_9.PNG\" /\u003e\n\u003c/p\u003e\n  \n## Task Descriptions\n\nThe following table provides descriptions and examples of tasks available in the Rakefile for deploying and managing your environment.\n\n| Task                                            | Description                                                                                   | Command                                        |\n|-------------------------------------------------|-----------------------------------------------------------------------------------------------|------------------------------------------------|\n| **voicepassport:deploy**                        | Deploys the architecture and launches all necessary services and daemons.                     | `rake voicepassport:deploy`                    |\n| **voicepassport:undeploy**                      | Undeploys the architecture.                                                                   | `rake voicepassport:undeploy`                  |\n| **voicepassport:start**                         | Starts the containers.                                                                        | `rake voicepassport:start`                     |\n| **voicepassport:stop**                          | Stops the containers.                                                                         | `rake voicepassport:stop`                      |\n| **voicepassport:status**                        | Shows the status of the containers.                                                           | `rake voicepassport:status`                    |\n| **voicepassport:create_apache_airflow_users**   | Creates users in Apache Airflow.                                                              | `rake voicepassport:create_apache_airflow_users`|\n| **voicepassport:build_and_push_airflow_image**  | Builds and pushes Apache Airflow Docker image to DockerHub.                                    | `rake voicepassport:build_and_push_airflow_image`|\n| **voicepassport:build_and_push_voice_passport_api_image** | Builds and pushes VoicePassport API Docker image to DockerHub.                             | `rake voicepassport:build_and_push_voice_passport_api_image` |\n| **voicepassport:upload_contract_abi_to_minio**  | Uploads the contract ABI JSON file to MinIO.                                                  | `rake voicepassport:upload_contract_abi_to_minio`|\n| **voicepassport:delete_contract_abi_from_minio**| Deletes the contract ABI JSON file from MinIO.                                                 | `rake voicepassport:delete_contract_abi_from_minio` |\n| **voicepassport:check_contract_abi_in_minio**  | Checks if the contract ABI JSON file exists in MinIO.                                          | `rake voicepassport:check_contract_abi_in_minio`|\n| **voicepassport:clean_environment**             | Cleans the environment.                                                                       | `rake voicepassport:clean_environment`         |\n| **voicepassport:check_docker**                  | Checks if Docker and Docker Compose are installed and accessible.                               | `rake voicepassport:check_docker`              |\n| **voicepassport:login**                         | Logs in to DockerHub.                                                                         | `rake voicepassport:login`                     |\n| **voicepassport:check_deployment_file**         | Checks the existence of the deployment file.                                                   | `rake voicepassport:check_deployment_file`     |\n\nTo execute any of these tasks, use the `rake` command followed by the task name. For example, to deploy VoicePassport, run `rake voicepassport:deploy`.\n\n## Services Overview\n\nBelow is a list of services available locally, each with its associated port number and a short description of its purpose. These services are used in the VoicePassport architecture for various functions, including data storage, database management, and API services. Understanding these services and their ports will be helpful when working with the VoicePassport environment.\n\n| Service Name                   | Ports                      | Purpose                                                                                        |\n|--------------------------------|----------------------------|------------------------------------------------------------------------------------------------|\n| voice_passport_minio1         |                            | Object and data storage                                                                       |\n| voice_passport_minio2         |                            | Object and data storage                                                                       |\n| voice_passport_minio3         |                            | Object and data storage                                                                       |\n| voice_passport_minio_haproxy  | 9000 (MinIO), 1936 (Stats) | Load balancer for MinIO                                                                       |\n| voice_passport_mongo          | 27017                      | NoSQL database                                                                                |\n| voice_passport_mongo_express  | 9001                       | Web interface to administer MongoDB                                                           |\n| voice_passport_redis          |                            | Cache storage and message broker for Apache Airflow                                            |\n| voice_passport_postgres       | 5432                       | Relational database for Apache Airflow                                                         |\n| voice_passport_pgadmin        | 9002                       | Web interface to administer PostgreSQL                                                         |\n| voice_passport_airflow_webserver| 9003                      | Apache Airflow web server for workflow management                                              |\n| voice_passport_celery_flower  | 9004 (Celery), 9005 (Web), 9006 (Stats) | Web-based tool to monitor and manage Celery clusters                                   |\n| voice_passport_airflow_scheduler| 9007                      | Task scheduler for Apache Airflow                                                              |\n| voice_passport_airflow_worker_1|                           | Apache Airflow task processing                                                                 |\n| voice_passport_api_service_1  |                            | API service for VoicePassport                                                                  |\n| voice_passport_api_service_2  |                            | API service for VoicePassport                                                                  |\n| voice_passport_api_service_3  |                            | API service for VoicePassport                                                                  |\n| voice_passport_api_service_haproxy| 9008 (API), 1937 (Stats)| Load balancer for VoicePassport API services                                                   |\n| voice_passport_qdrant         | 6333 (gRPC), 6334 (HTTP)  | Database for storing and querying vectors                                                      |\n\n## ⚠️ Disclaimer  \n\n**VoicePassport** is an **experimental and educational project** designed to explore the capabilities of **voice authentication** and **speaker recognition technologies**. This system leverages **Resemblyzer** for voice processing and embedding generation, aimed at providing a **proof-of-concept** solution for identity verification through voice.  \n\nAdditionally, the name **\"VoicePassport\"** was generated during a **brainstorming session with AI**, and any resemblance to existing brands or services is purely **coincidental**.  \n\nThe **logo of VoicePassport** was **generated by ChatGPT** and is **free of copyright restrictions**. It is provided exclusively for **demonstration and educational purposes** and does not represent an actual brand or commercial entity.  \n\n## License\nThis project is licensed under the [MIT License](LICENSE).\n\n## Acknowledgements 🙏\n\n🙏 I would like to extend my heartfelt gratitude to Karan Shingde for his insightful article published on Medium titled [\"Build an Audio-driven Speaker Recognition System Using Open Source Technologies: resemblyzer and pyAudioAnalysis\"](https://medium.com/@karanshingde/build-an-audio-driven-speaker-recognition-system-using-open-source-technologies-resemblyzer-and-6499cf0246eb). His comprehensive guide served as a significant source of inspiration and a crucial starting point for developing the VoicePassport Architecture project. Karan's expertise and dedication have been instrumental in shaping my understanding and implementation of speaker recognition technologies. I am truly thankful for his invaluable contribution to the field and for sharing his knowledge with the community. 🚀\n\n## Visitors Count\n\n\u003cimg width=\"auto\" src=\"https://profile-counter.glitch.me/voice_passport_architecture/count.svg\" /\u003e\n\n## License ⚖️\n\nThis project is licensed under the **Apache License 2.0**, a permissive open-source software license that allows developers to freely use, modify, and distribute the software. 🚀 This includes both personal and commercial use, with some conditions for distribution and modification. 📜\n\nKey terms of the Apache License 2.0:\n\n- You are allowed to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the software. 💻\n- If you modify and distribute the software, you must include the original copyright notice, provide a copy of the Apache 2.0 license, and indicate any modifications made. 📝\n- You are not allowed to use the name of the project or its contributors to promote derived works without permission. ✋\n- The software is provided \"as is,\" without any warranties, express or implied. 🚫🛡️\n\nPlease see the full license text below for more detailed terms.\n\n```\nApache License Version 2.0, January 2005 http://www.apache.org/licenses/\n\nCopyright (c) 2024 Dream software - Sergio Sánchez\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergio11%2Fvoice_passport_architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsergio11%2Fvoice_passport_architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergio11%2Fvoice_passport_architecture/lists"}