Giter Club home page Giter Club logo

speakit's Introduction

speAkIt

Inspiration

We are not native English speakers, and we were finding trouble with the pronunciation while learning the language, people can't be with a teacher all day and some apps out there are not particularly useful when it comes to pronunciation, these two are the obstacles we want to solve when learning English.

What it does

Our web app lets the user type some text he wants to say, that text is converted into audio and the user can hear the correct pronunciation. After it, the usar can upload a record of himself saying what he typed, after some seconds, the user can observe how good his pronunciation was. The voice recording is displayed in the app as text, where each word has a color meaning the following:

  • 🟢 Good pronunciation
  • 🟡 Kind of good pronunciation
  • 🔴 Bad pronunciation

How we built it

We can divide the functionality into three parts:

  • Frontend:
    • React web-app that lets the user type the text he wants to say, upload a recording file, get feedback on how good the pronunciation was and be able to hear the correct pronunciation.
  • Backend:
    • Endpoints responsible for integrating AWS Transcribe and Polly with the user inputs in the React Frontend, using Django rest framework.
  • Deployment:
    • The web-app is containerized in Docker, this made it easy to deploy in Google Cloud

Challenges we ran into

The project was a challenge for us! We can highlight the following:

  • Implement the easiest way to use AWS services
  • Decide how the feedback should be seen by the user
  • Implement the logic of the response from AWS Transcribe in order to have a detailed feedback.
  • Integrate the Frontend made in React with the Django rest framework endpoints

Accomplishments that we're proud of

Everything we did was an accomplishment, we made possible the functionality we imagined at the start of the project, in other words, the app rocks! 🎸

What we learned

Our personal learnings are the following:

  • Hugo:
    • I got the chance to learn about Django and about some AWS API's and IAM (to share access with my teammates)
    • I created my first REST API on Django
    • I learned about virtual environments on Python, so the process of managing dependencies is easier for our team and the docker image build
    • Refreshed my knowledge about Docker
  • Daman:
    • I had some experience with React before, but this project was really challenging because I tried to implement the best approach, this leveled up my JavaScript and ReactJS skills to the next level, also it was nice to learn Material UI.
    • I also learnt how to integrate the ReactJS with the endpoints made in Django rest framework, so, in my way to do that, I ended up learning about Boto3, Polly and Transcribe.
  • Gustavo:
    • How to integrate AWS services with the Python SDK (Boto3)
    • A lot about how Django rest framework works by implementing an endpoint
    • With the amazing programming sessions with my team I also learnt about React, Docker, GCP and teamwork, thank you guys!

What's next for speAkIt

  • Select the language of the text/recording, so you can practice any language supported by AWS Transcribe
  • See how well overall your pronunciation was (either a score or percentage)
  • Recording of the voice from the app
  • Hear the text with a TTS service, so you can know how to pronounce correctly

Built With

python django js react html go go go go

How to run the app locally

The things you must have installed are Python >= 3.9, and npm. And also have an AWS account.

Let's start with the backend service:

  1. First we need to create a virtual environment in python.
    1. Install venv pip install virtualenv
    2. python3 -m venv env
    3. This allows for easy dependency management
  2. Activate the virtual environment
    • In the path you specified: source env/bin/activate
    • You know you are in the virtual environment if in the terminal at the start is (env)
  3. Install the dependencies in the requierments.txt
    • pip install -r requirements.txt
  4. Run the Django server:
    • Go to the backend folder cd backend
    • Run python3 manage.py runserver
    • The url is going to be shown, but you don't need it.

Now the frontend service:

  1. Install all the dependencies
    1. Go to the frontend folder cd frontend
    2. Run npn install
  2. Start the server: npm start

For the AWS keys, one option is create a .env file in the backend folder with the next format (no quotes are needed):

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET_NAME=
FRONTEND_URL=http://localhost:3000/
BACKEND_URL=http://localhost:8000/

speakit's People

Contributors

hugocl avatar damans227 avatar gellanz avatar

Stargazers

 avatar Pablo Domínguez Durán avatar  avatar Moraru Daniela-Andreea avatar

Watchers

 avatar  avatar

speakit's Issues

Initiate and create the project structure

Problem/Functionality

Create folders and files that allow the team to start working on the project

Solution

Use the codebase generators included with React/Django to create the necessary structure for the project.

Upload of files to S3 and implement AWS Polly

Problem/Functionality

The AWS APIs we will use for our app will require that the files have to be uploaded to an S3 bucket.

Solution

Create the backend service that allows the upload of audio files to an S3 bucket. This service has to create the default bucket (if it doesn't exist) and upload all files in that bucket.

Generate text randomly for the user

Problem/Functionality

The user should have the option to generate a small text to practice their speaking.

Solution

Generate the text to practice speaking on the backend using an existing service or other tools

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.