fix: update

desc : update project
parent f46f5d41
...@@ -3,5 +3,9 @@ ...@@ -3,5 +3,9 @@
"Janith", "Janith",
"leaderboard", "leaderboard",
"SLIIT" "SLIIT"
] ],
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
},
"python.formatting.provider": "none"
} }
\ No newline at end of file
from fastapi import FastAPI, HTTPException
from pymongo.mongo_client import MongoClient
from pydantic import BaseModel
from typing import List
from bson import ObjectId
app = FastAPI()
# Replace with your MongoDB Atlas credentials
username = "admin"
password = "JppbU6MZeHfOj7sp"
uri = f"mongodb+srv://{username}:{password}@researchmanagement-appl.vzhn4.mongodb.net/?retryWrites=true&w=majority"
client = MongoClient(uri)
db = client["test"]
items_collection = db["items"]
class ItemCreate(BaseModel):
item_name: str
item_description: str
class Item(BaseModel):
item_name: str
item_description: str
_id: str
@app.on_event("startup")
async def startup_db_client():
app.mongodb_client = MongoClient(uri)
try:
app.mongodb_client.admin.command("ping")
print("Pinged your deployment. You successfully connected to MongoDB!")
except Exception as e:
print(e)
@app.on_event("shutdown")
async def shutdown_db_client():
app.mongodb_client.close()
@app.get("/")
async def read_root():
return {"message": "FastAPI with MongoDB integration"}
@app.post("/items/", response_model=Item)
async def create_item(item_create: ItemCreate):
item_data = {
"item_name": item_create.item_name,
"item_description": item_create.item_description,
}
result = items_collection.insert_one(item_data)
if result.inserted_id:
return {**item_data, "_id": str(result.inserted_id)}
else:
raise HTTPException(status_code=500, detail="Failed to create item")
@app.put("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item_update: ItemCreate):
item_object_id = ObjectId(item_id) # Convert item_id to ObjectId
update_data = {
"item_name": item_update.item_name,
"item_description": item_update.item_description,
}
result = items_collection.update_one({"_id": item_object_id}, {"$set": update_data})
if result.modified_count > 0:
updated_item = items_collection.find_one({"_id": item_object_id})
return {**updated_item, "_id": str(updated_item["_id"])}
else:
raise HTTPException(status_code=404, detail="Item not found")
@app.get("/items/", response_model=List[Item])
async def get_all_items():
items = list(items_collection.find())
items_with_string_id = [{**item, "_id": str(item["_id"])} for item in items]
print(items_with_string_id)
return items_with_string_id
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
...@@ -3,6 +3,7 @@ from pymongo.mongo_client import MongoClient ...@@ -3,6 +3,7 @@ from pymongo.mongo_client import MongoClient
from pydantic import BaseModel from pydantic import BaseModel
from typing import List from typing import List
from bson import ObjectId from bson import ObjectId
from datetime import datetime
app = FastAPI() app = FastAPI()
...@@ -15,6 +16,7 @@ client = MongoClient(uri) ...@@ -15,6 +16,7 @@ client = MongoClient(uri)
db = client["test"] db = client["test"]
items_collection = db["translated_items"] items_collection = db["translated_items"]
class ItemCreate(BaseModel): class ItemCreate(BaseModel):
item_name: str item_name: str
item_description: str item_description: str
...@@ -25,6 +27,7 @@ class Item(BaseModel): ...@@ -25,6 +27,7 @@ class Item(BaseModel):
item_description: str item_description: str
_id: str _id: str
class TranslatedItemCreate(BaseModel): class TranslatedItemCreate(BaseModel):
translated_integer_si: str translated_integer_si: str
...@@ -48,11 +51,13 @@ async def shutdown_db_client(): ...@@ -48,11 +51,13 @@ async def shutdown_db_client():
async def read_root(): async def read_root():
return {"message": "FastAPI with MongoDB integration"} return {"message": "FastAPI with MongoDB integration"}
# send tranlated integer to mongodb # send tranlated integer to mongodb
@app.post("/translated_items/", response_model=TranslatedItemCreate) @app.post("/translated_items/", response_model=TranslatedItemCreate)
async def create_translated_item(translated_item_create: TranslatedItemCreate): async def create_translated_item(translated_item_create: TranslatedItemCreate):
translated_item_data = { translated_item_data = {
"translated_integer_si": translated_item_create.translated_integer_si, "translated_integer_si": translated_item_create.translated_integer_si,
"timestamp": datetime.utcnow(),
} }
result = items_collection.insert_one(translated_item_data) result = items_collection.insert_one(translated_item_data)
if result.inserted_id: if result.inserted_id:
...@@ -85,7 +90,6 @@ async def get_all_items(): ...@@ -85,7 +90,6 @@ async def get_all_items():
return items_with_string_id return items_with_string_id
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn
......
...@@ -4,7 +4,6 @@ from fastapi.responses import RedirectResponse ...@@ -4,7 +4,6 @@ from fastapi.responses import RedirectResponse
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from core import setup_logger from core import setup_logger
app = FastAPI() app = FastAPI()
logger = setup_logger() logger = setup_logger()
...@@ -19,13 +18,109 @@ origins = [ ...@@ -19,13 +18,109 @@ origins = [
"http://localhost:8080", "http://localhost:8080",
] ]
app.add_middleware(CORSMiddleware, app.add_middleware(
CORSMiddleware,
allow_origins=origins, allow_origins=origins,
allow_credentials=True, allow_credentials=True,
allow_methods=["*"], allow_methods=["*"],
allow_headers=["*"]) allow_headers=["*"],
)
@app.get('/') @app.get("/")
async def root(): async def root():
url = app.docs_url or '/docs' url = app.docs_url or "/docs"
return RedirectResponse(url) return RedirectResponse(url)
# import io
# import os
# import subprocess
# import tkinter as tk
# import urllib.parse
# from tkinter import filedialog, messagebox, scrolledtext
# from typing import List
# import moviepy.editor as mp
# import requests
# import speech_recognition as sr
# from bson import ObjectId
# from fastapi import FastAPI, File, UploadFile
# from fastapi.responses import JSONResponse
# # Define a dictionary to map Sinhala Unicode to integers
# unicode_to_int_mapping = {"මම": 1, "හෙට": 2, "යනවා": 3, "මං": 4}
# def translate_text(text, target_language):
# url = "https://translate.googleapis.com/translate_a/single"
# params = {
# "client": "gtx",
# "sl": "auto",
# "tl": target_language,
# "dt": "t",
# "q": text,
# }
# response = requests.get(url, params=params)
# translation_data = response.json()
# translated_text = translation_data[0][0][0]
# return translated_text
# # send to service.py
# def send_to_service(translated_integer_si):
# url = "http://127.0.0.1:8000/translated_items/"
# data = {
# "translated_integer_si": translated_integer_si,
# }
# response = requests.post(url, json=data)
# if response.status_code == 200:
# print("Data sent to server successfully")
# else:
# print("Failed to send data to server")
# @app.get("/rest_pyton/welcome")
# async def root():
# return {"message": "Hello, World!"}
# @app.post("/rest_pyton/uploaded_video")
# async def uploaded_video(file: UploadFile = File(...)):
# try:
# # Process the uploaded video
# video_content = await file.read()
# temp_video_path = "temp_video.mp4"
# with open(temp_video_path, "wb") as temp_video_file:
# temp_video_file.write(video_content)
# audio_save_path = "audio.wav"
# video = mp.VideoFileClip(temp_video_path)
# audio = video.audio
# audio.write_audiofile(audio_save_path)
# r = sr.Recognizer()
# with sr.AudioFile(audio_save_path) as source:
# audio = r.record(source)
# recognized_text = r.recognize_google(audio, language="si-LK")
# translated_text_si = translate_text(recognized_text, "si")
# translated_text_en = translate_text(recognized_text, "en")
# translated_integer_si = " ".join(
# str(unicode_to_int_mapping.get(word, 0))
# for word in translated_text_si.split()
# )
# print("Translated Integer (Si):", translated_integer_si)
# send_to_service(translated_integer_si)
# return JSONResponse(
# content={
# "translated_text_si": translated_text_si,
# "translated_text_en": translated_text_en,
# }
# )
# # return JSONResponse(content={"translated_text_si": "test"})
# except Exception as e:
# return JSONResponse(content={"error": str(e)}, status_code=500)
import moviepy.editor as mp import io
import speech_recognition as sr import os
import subprocess
import tkinter as tk import tkinter as tk
from tkinter import filedialog import urllib.parse
from tkinter import messagebox from tkinter import filedialog, messagebox, scrolledtext
from tkinter import scrolledtext from typing import List
import moviepy.editor as mp
import requests import requests
import speech_recognition as sr
from bson import ObjectId from bson import ObjectId
import urllib.parse from fastapi import FastAPI, File, UploadFile
import subprocess from fastapi.responses import JSONResponse
app = FastAPI()
# Define a dictionary to map Sinhala Unicode to integers # Define a dictionary to map Sinhala Unicode to integers
unicode_to_int_mapping = { unicode_to_int_mapping = {"මම": 1, "හෙට": 2, "යනවා": 3, "මං": 4}
"මම": 1,
"හෙට": 2,
"යනවා": 3,
"මං": 4
}
def translate_text(text, target_language): def translate_text(text, target_language):
url = "https://translate.googleapis.com/translate_a/single" url = "https://translate.googleapis.com/translate_a/single"
...@@ -24,13 +26,14 @@ def translate_text(text, target_language): ...@@ -24,13 +26,14 @@ def translate_text(text, target_language):
"sl": "auto", "sl": "auto",
"tl": target_language, "tl": target_language,
"dt": "t", "dt": "t",
"q": text "q": text,
} }
response = requests.get(url, params=params) response = requests.get(url, params=params)
translation_data = response.json() translation_data = response.json()
translated_text = translation_data[0][0][0] translated_text = translation_data[0][0][0]
return translated_text return translated_text
# send to service.py # send to service.py
def send_to_service(translated_integer_si): def send_to_service(translated_integer_si):
url = "http://127.0.0.1:8000/translated_items/" url = "http://127.0.0.1:8000/translated_items/"
...@@ -44,15 +47,23 @@ def send_to_service(translated_integer_si): ...@@ -44,15 +47,23 @@ def send_to_service(translated_integer_si):
print("Failed to send data to server") print("Failed to send data to server")
def convert_video(): # Define a route for the "Hello, World!" endpoint
video_path = filedialog.askopenfilename(filetypes=[("Video Files", "*.mp4")]) @app.get("/")
if not video_path: def read_root():
messagebox.showwarning("Warning", "No video file selected.") return {"message": "Hello, World!"}
return
@app.post("/uploaded_video")
async def uploaded_video(file: UploadFile = File(...)):
try: try:
# Process the uploaded video
video_content = await file.read()
temp_video_path = "temp_video.mp4"
with open(temp_video_path, "wb") as temp_video_file:
temp_video_file.write(video_content)
audio_save_path = "audio.wav" audio_save_path = "audio.wav"
video = mp.VideoFileClip(video_path) video = mp.VideoFileClip(temp_video_path)
audio = video.audio audio = video.audio
audio.write_audiofile(audio_save_path) audio.write_audiofile(audio_save_path)
...@@ -60,46 +71,24 @@ def convert_video(): ...@@ -60,46 +71,24 @@ def convert_video():
with sr.AudioFile(audio_save_path) as source: with sr.AudioFile(audio_save_path) as source:
audio = r.record(source) audio = r.record(source)
recognized_text = r.recognize_google(audio, language='si-LK') recognized_text = r.recognize_google(audio, language="si-LK")
translated_text_si = translate_text(recognized_text, "si") translated_text_si = translate_text(recognized_text, "si")
translated_text_en = translate_text(recognized_text, "en") translated_text_en = translate_text(recognized_text, "en")
# Get the integer values and join them into a single string translated_integer_si = " ".join(
translated_integer_si = ' '.join(str(unicode_to_int_mapping.get(word, 0)) for word in translated_text_si.split()) str(unicode_to_int_mapping.get(word, 0))
print("Translated Integer (Si):", translated_integer_si) # Print the translated integer for word in translated_text_si.split()
)
send_to_service(translated_integer_si) # Sending translated_integer_si print("Translated Integer (Si):", translated_integer_si)
textarea_si.delete('1.0', tk.END) send_to_service(translated_integer_si)
textarea_en.delete('1.0', tk.END)
textarea_si.insert(tk.END, f"Translated Integer: {translated_integer_si}\n{translated_text_si}")
textarea_en.insert(tk.END, translated_text_en)
return JSONResponse(
content={
"translated_text_si": translated_text_si,
"translated_text_en": translated_text_en,
}
)
# return JSONResponse(content={"translated_text_si": "test"})
except Exception as e: except Exception as e:
messagebox.showerror("Error", str(e)) return JSONResponse(content={"error": str(e)}, status_code=500)
print("Error during video conversion:", e)
if __name__ == "__main__":
# subprocess.Popen(["uvicorn", "main:app", "--host", "127.0.0.1", "--port", "8050"])
window = tk.Tk()
window.title("Video Translation")
window.geometry("800x600")
title_label = tk.Label(window, text="Video Translation", font=("Arial", 16, "bold"))
title_label.pack(pady=10)
convert_button = tk.Button(window, text="Convert Video", command=convert_video)
convert_button.pack(pady=10)
textarea_si_label = tk.Label(window, text="Sinhala Unicode Translation")
textarea_si_label.pack()
textarea_si = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=80, height=10)
textarea_si.pack()
textarea_en_label = tk.Label(window, text="Singlish Translation")
textarea_en_label.pack()
textarea_en = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=80, height=10)
textarea_en.pack()
window.mainloop()
import moviepy.editor as mp
import speech_recognition as sr
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import scrolledtext
import requests
from bson import ObjectId
import urllib.parse
import subprocess
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
from typing import List
import io
app = FastAPI()
# Define a dictionary to map Sinhala Unicode to integers
unicode_to_int_mapping = {"මම": 1, "හෙට": 2, "යනවා": 3, "මං": 4}
def translate_text(text, target_language):
url = "https://translate.googleapis.com/translate_a/single"
params = {
"client": "gtx",
"sl": "auto",
"tl": target_language,
"dt": "t",
"q": text,
}
response = requests.get(url, params=params)
translation_data = response.json()
translated_text = translation_data[0][0][0]
return translated_text
# send to service.py
def send_to_service(translated_integer_si):
url = "http://127.0.0.1:8000/translated_items/"
data = {
"translated_integer_si": translated_integer_si,
}
response = requests.post(url, json=data)
if response.status_code == 200:
print("Data sent to server successfully")
else:
print("Failed to send data to server")
# get request from frontend
@app.post("/uploaded_video/")
async def uploaded_video(file: UploadFile = File(...)):
try:
# Process the video here
# ... Extract audio, recognize speech, perform translation ...
# Example response with translated results
translated_text_si = "Translated Sinhala Text"
translated_text_en = "Translated English Text"
return JSONResponse(
content={
"translated_text_si": translated_text_si,
"translated_text_en": translated_text_en,
}
)
except Exception as e:
return JSONResponse(content={"error": str(e)}, status_code=500)
def convert_video():
video_path = filedialog.askopenfilename(filetypes=[("Video Files", "*.mp4")])
if not video_path:
messagebox.showwarning("Warning", "No video file selected.")
return
# video_file = request.files['video']
# if video_file:
# # Save the video file and perform translation
# video_path = "uploaded_video.mp4" # Save the video temporarily
# video_file.save(video_path)
try:
audio_save_path = "audio.wav"
video = mp.VideoFileClip(video_path)
audio = video.audio
audio.write_audiofile(audio_save_path)
r = sr.Recognizer()
with sr.AudioFile(audio_save_path) as source:
audio = r.record(source)
recognized_text = r.recognize_google(audio, language="si-LK")
translated_text_si = translate_text(recognized_text, "si")
translated_text_en = translate_text(recognized_text, "en")
# Get the integer values and join them into a single string
translated_integer_si = " ".join(
str(unicode_to_int_mapping.get(word, 0))
for word in translated_text_si.split()
)
print(
"Translated Integer (Si):", translated_integer_si
) # Print the translated integer
send_to_service(translated_integer_si) # Sending translated_integer_si
# textarea_si.delete('1.0', tk.END)
# textarea_en.delete('1.0', tk.END)
# textarea_si.insert(tk.END, f"Translated Integer: {translated_integer_si}\n{translated_text_si}")
# textarea_en.insert(tk.END, translated_text_en)
except Exception as e:
messagebox.showerror("Error", str(e))
print("Error during video conversion:", e)
# if __name__ == "__main__":
# # subprocess.Popen(["uvicorn", "main:app", "--host", "127.0.0.1", "--port", "8050"])
# window = tk.Tk()
# window.title("Video Translation")
# window.geometry("800x600")
# title_label = tk.Label(window, text="Video Translation", font=("Arial", 16, "bold"))
# title_label.pack(pady=10)
# convert_button = tk.Button(window, text="Convert Video", command=convert_video)
# convert_button.pack(pady=10)
# textarea_si_label = tk.Label(window, text="Sinhala Unicode Translation")
# textarea_si_label.pack()
# textarea_si = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=80, height=10)
# textarea_si.pack()
# textarea_en_label = tk.Label(window, text="Singlish Translation")
# textarea_en_label.pack()
# textarea_en = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=80, height=10)
# textarea_en.pack()
# window.mainloop()
@app.post("/uploaded_video/v1")
async def uploaded_video(file: UploadFile = File(...)):
try:
# Process the uploaded video
video_content = await file.read()
video_io = io.BytesIO(video_content)
audio_save_path = "audio.wav"
video = mp.VideoFileClip(video_io, codec="mpeg4")
audio = video.audio
audio.write_audiofile(audio_save_path)
r = sr.Recognizer()
with sr.AudioFile(audio_save_path) as source:
audio = r.record(source)
recognized_text = r.recognize_google(audio, language="si-LK")
translated_text_si = translate_text(recognized_text, "si")
translated_text_en = translate_text(recognized_text, "en")
translated_integer_si = " ".join(
str(unicode_to_int_mapping.get(word, 0))
for word in translated_text_si.split()
)
print("Translated Integer (Si):", translated_integer_si)
send_to_service(translated_integer_si)
return JSONResponse(
content={
"translated_text_si": translated_text_si,
"translated_text_en": translated_text_en,
}
)
except Exception as e:
return JSONResponse(content={"error": str(e)}, status_code=500)
import moviepy.editor as mp
import speech_recognition as sr
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import scrolledtext
import requests
# Define a dictionary to map Sinhala Unicode to integers
unicode_to_int_mapping = {
"මම": 1,
"හෙට": 2,
"යනවා": 3,
"මං": 4
}
def translate_text(text, target_language):
url = "https://translate.googleapis.com/translate_a/single"
params = {
"client": "gtx",
"sl": "auto",
"tl": target_language,
"dt": "t",
"q": text
}
response = requests.get(url, params=params)
translation_data = response.json()
translated_text = translation_data[0][0][0]
return translated_text
def convert_video():
video_path = filedialog.askopenfilename(filetypes=[("Video Files", "*.mp4")])
if not video_path:
messagebox.showwarning("Warning", "No video file selected.")
return
try:
audio_save_path = "audio.wav"
video = mp.VideoFileClip(video_path)
audio = video.audio
audio.write_audiofile(audio_save_path)
r = sr.Recognizer()
with sr.AudioFile(audio_save_path) as source:
audio = r.record(source)
recognized_text = r.recognize_google(audio, language='si-LK')
translated_text_si = translate_text(recognized_text, "si")
translated_text_en = translate_text(recognized_text, "en")
# Get the integer values and join them into a single string
translated_integer_si = ' '.join(str(unicode_to_int_mapping.get(word, 0)) for word in translated_text_si.split())
textarea_si.delete('1.0', tk.END)
textarea_en.delete('1.0', tk.END)
textarea_si.insert(tk.END, f"Translated Integer: {translated_integer_si}\n{translated_text_si}")
textarea_en.insert(tk.END, translated_text_en)
except Exception as e:
messagebox.showerror("Error", str(e))
window = tk.Tk()
window.title("Video Translation")
window.geometry("800x600")
title_label = tk.Label(window, text="Video Translation", font=("Arial", 16, "bold"))
title_label.pack(pady=10)
convert_button = tk.Button(window, text="Convert Video", command=convert_video)
convert_button.pack(pady=10)
textarea_si_label = tk.Label(window, text="Sinhala Unicode Translation")
textarea_si_label.pack()
textarea_si = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=80, height=10)
textarea_si.pack()
textarea_en_label = tk.Label(window, text="Singlish Translation")
textarea_en_label.pack()
textarea_en = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=80, height=10)
textarea_en.pack()
window.mainloop()
\ No newline at end of file
...@@ -3,7 +3,8 @@ import axios from 'axios'; ...@@ -3,7 +3,8 @@ import axios from 'axios';
class VideoToSignLanguage { class VideoToSignLanguage {
videoTranslation(data) { videoTranslation(data) {
return axios.post( return axios.post(
`http://127.0.0.1:8000/predict-sign-language/video/speed_levels?speed=${speed}`, // @ts-ignore
`http://127.0.0.1:8000/translated_items/`,
data data
); );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment