Translate widget - πρόβλημα.  Το θέμα επιλύθηκε

...τα πάντα για το open source στον χώρο των gadgets, συζητήσεις, εργαλεία, open hardware, οδηγοί κ.ά.

Συντονιστής: adem1

Re: Translate widget - πρόβλημα.

Δημοσίευσηαπό malos » 16 Δεκ 2023, 04:08

Ο κώδικας

Κώδικας: Επιλογή όλων
#!/usr/bin/env python3
import sys
import speech_recognition as sr
import pyttsx3
import sounddevice
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLineEdit, QTextEdit
from PyQt5.QtCore import Qt
from google.cloud import translate_v2 as translate
from google.oauth2 import service_account
from google.cloud import speech_v1p1beta1 as speech
from PyQt5.QtGui import QIcon, QPixmap

class TranslucentTranslationWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setGeometry(1220, 460, 450, 310)
        self.setFixedSize(450, 310)
        self.setWindowFlag(Qt.WindowStaysOnBottomHint)
        self.setAcceptDrops(True)
        self.setStyleSheet("background-color: #ffdad3;")

        credentials = service_account.Credentials.from_service_account_file('/home/left/scripts/translate/token.json', scopes=['https://www.googleapis.com/auth/cloud-translation'])
        self.translator = translate.Client(credentials=credentials)

        vbox = QVBoxLayout(self)
        vbox.setContentsMargins(0, 0, 0, 0)  # Ορίζει το περιθώριο για το vbox
        self.text_input = QLineEdit(self)
        self.text_input.setPlaceholderText("Γράψε εδώ το κείμενο να μεταφράσω")
        self.text_input.setStyleSheet("border: 1px dashed #00FF00; background-color: #d0aa7c;")
        self.text_input.setFixedHeight(40)  # Ορίζει το ύψος του πεδίου εισαγωγής σε 40 pixels
        self.text_output = QTextEdit(self)
        self.text_output.setStyleSheet("color: white; background-color: rgba(0, 0, 0, 255); font-weight: bold;")
        vbox.addWidget(self.text_input, stretch=5)
        vbox.addWidget(self.text_output, stretch=5)  # Αλλαγή εδώ σε stretch=5
        vbox_input = QVBoxLayout()
        vbox_input.setContentsMargins(0, 0, 0, 2)
        self.translate_button = QPushButton("Μετάφραση", self)
        self.translate_button.setStyleSheet("background-color: #aed08b;")  # Κίτρινο
        self.translate_button.clicked.connect(self.translate_text)

        self.start_recognition_button = QPushButton(self)
        pixmap = QPixmap("microphone.png")
        icon = QIcon(pixmap)
        self.start_recognition_button.setIcon(icon)
        self.start_recognition_button.setIconSize(pixmap.rect().size())
        self.start_recognition_button.setMaximumSize(40, 40)  # Ορίζει το μέγιστο πλάτος και ύψος
        vbox_input.addWidget(self.translate_button)
        vbox_input.addWidget(self.start_recognition_button, alignment=Qt.AlignRight | Qt.AlignBottom)

        # Ορίζει το περιθώριο για την περιοχή του vbox_input
        vbox_input.setContentsMargins(0, 0, 0, 0)
        self.start_recognition_button.clicked.connect(self.start_recognition)
        vbox.addLayout(vbox_input)

        self.text_input.returnPressed.connect(self.translate_text)
        self.text_input.installEventFilter(self)
        # Όνομα αρχείου ιστορικού
        self.history_file = "history.txt"
        # Αρχικοποίηση ιστορικού
        self.load_history()




    def translate_text(self):
        text = self.text_input.text()
        translation = self.translator.translate(text, target_language='en' if self.is_greek(text) else 'el')
        self.text_output.setPlainText(translation['translatedText'])
        self.text_input.clear()
        self.text_input.setSelection(0, len(translation['translatedText']))
        # Προσθήκη στο ιστορικό
        self.add_to_history(text)

    def is_greek(self, text):
        for char in text:
            if 'α' <= char <= 'ω' or 'Α' <= char <= 'Ω':
                return True
        return False

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasUrls():
            url = event.mimeData().urls()[0]
            with open(url.toLocalFile(), "r") as f:
                self.text_input.setText(f.read())
            event.accept()
        else:
            event.ignore()

    def add_to_history(self, text):
        # Προσθήκη κειμένου στο τέλος του ιστορικού
        self.history_list.append(text)
        # Ενημέρωση του αρχείου ιστορικού
        with open(self.history_file, "a") as file:
            file.write(text + "\n")

    def load_history(self):
        # Φόρτωση ιστορικού από το αρχείο
        try:
            with open(self.history_file, "r") as file:
                self.history_list = file.read().splitlines()
                self.history_index = len(self.history_list)
        except FileNotFoundError:
            # Το αρχείο δεν υπάρχει ακόμα
            self.history_list = []
            self.history_index = 0

    def retrieve_from_history(self, forward=True):
        # Ανάκτηση κειμένου από το ιστορικό
        if forward:
            # Προς τα εμπρός
            if self.history_index < len(self.history_list) - 1:
                self.history_index += 1
        else:
            # Προς τα πίσω
            if self.history_index > 0:
                self.history_index -= 1

        if 0 <= self.history_index < len(self.history_list):
            self.text_input.setText(self.history_list[self.history_index])
        else:
            self.text_input.clear()

    def eventFilter(self, obj, event):
        if obj is self.text_input and event.type() == event.KeyPress:
            if event.key() == Qt.Key_Up:
                self.retrieve_from_history(forward=False)
                return False  # Επιστροφή False για την αποφυγή περαιτέρω επεξεργασίας του event
            elif event.key() == Qt.Key_Down:
                self.retrieve_from_history(forward=True)
                return False  # Επιστροφή False για την αποφυγή περαιτέρω επεξεργασίας του event
        return super().eventFilter(obj, event)

    # Προσθήκη συνάρτησης για έναρξη φωνητικής αναγνώρισης
    def start_recognition(self):
        #r = sr.Recognizer()
        recognizer = sr.Recognizer()


        # ΑΦΗΝΟΥΜΕ ΑΥΤΕΣ ΤΙΣ ΓΡΑΜΜΕΣ ΤΙΜΗΤΙΚΑ ΓΙΑ ΤΟΝ ΗΜΙΘΕΟ Maras
        #with sr.Microphone() as source2:
            #r.adjust_for_ambient_noise(source2, duration = 0.2)
            #audio2 = r.listen(source2, 5, 3)
            #MyText = r.recognize_google(audio2)
            #MyText = MyText.lower()
            #print("Did you say " + MyText)


        with sr.Microphone() as source:
            recognizer.adjust_for_ambient_noise(source, duration = 0.2)
            audio = recognizer.listen(source, 10, 9)

        try:
            text = recognizer.recognize_google(audio, language="el-GR")
            self.text_input.setText(text)
            self.text_input.repaint()  # Ανανέωση του πεδίου εισόδου
            print(text)
        except sr.UnknownValueError:
            print("Google Speech Recognition could not understand audio")
        except sr.RequestError as e:
            print(f"Could not request results from Google Speech Recognition service; {e}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = TranslucentTranslationWindow()
    window.show()
    sys.exit(app.exec_())
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1234
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Translate widget - πρόβλημα.

Δημοσίευσηαπό Maras » 16 Δεκ 2023, 09:58

Ωραίος!
“Long is the way, and hard, that out of hell leads up to light.”
Άβαταρ μέλους
Maras
saintTUX
saintTUX
 
Δημοσιεύσεις: 1474
Εγγραφή: 25 Ιούλ 2017, 12:49
Εκτύπωση

Re: Translate widget - πρόβλημα.

Δημοσίευσηαπό malos » 16 Δεκ 2023, 14:28

Maras έγραψε:Ωραίος!


Ποιος είναι ωραίος; Εγώ;

Εδώ ταιριάζει αυτό που λέμε "Είπε ο γάιδαρος τον πετεινό κεφάλα" :clap:

Σ' ευχαριστώ για ΟΛΑ φίλε μου.
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1234
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Translate widget - πρόβλημα.

Δημοσίευσηαπό Maras » 16 Δεκ 2023, 16:40

Εσύ είσαι ο ωραίος, βέβαια, που δεν σταματάς να εξελίσσεις το λειτουργικό σου σύστημα, να προσθέτεις καινούριες δυνατότητες, και γενικότερα να ψάχνεσαι.
Να είσαι καλά και αναμένουμε κάθε καινούριο σου πόνημα!
“Long is the way, and hard, that out of hell leads up to light.”
Άβαταρ μέλους
Maras
saintTUX
saintTUX
 
Δημοσιεύσεις: 1474
Εγγραφή: 25 Ιούλ 2017, 12:49
Εκτύπωση

Προηγούμενη

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Gadgets με Λογισμικό Ανοιχτού Κώδικα