파이썬 실습/실시간 음성메모 프로그램 만들기

파이썬 실시간 음성메모 프로그램 만들기 - 2.음성<->텍스트 변환 후 파일로 저장(계속)

파기차차 2023. 1. 26. 09:20
728x90
반응형
SMALL
728x90
반응형

ㅁ 개요

 

O 프로그램 소개

 

 

 - 이번 글은 이전글(파이썬 음성메모 프로그램 만들기 - 2.음성<->텍스트 변환 후 파일로 저장)에 이은 3번째 글로 이전글에서의 프로그램은 한번 말하면 프로그램이 종료되어 다시 프로그램을 시작해야 하는 불편사항이 존재합니다. 따라서 우리가 특정 명령을 내리기 전까지는 계속 실행되어 메모를 진행할 수 있도록 개선하는 방법에 대하여 설명합니다.

 

 

 

O 완성된 프로그램 실행 화면

 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

 

1. 프로그램 실행 결과 안내 방송이 나오고, '지금 말씀하세요: ' 라는 문구가 나온 후 제가 '안녕'이라고 말을 하였습니다.

2. 이후 제가 음성으로 말한 내용을 화면에 보여 줍니다.('말씀하신 내용입니다 : 안녕')

3. 여기까지는 이전 글과 동일하나, 여기서 종료되지 않고, 다시 '지금 말씀하세요: '라는 문구가 반복되어 나오고 제가 '반가워' 라고 말을 하였습니다.

4. 마찬가지로 화면에 '반가워' 라는 텍스트를 보여줍니다.

5. 마지막으로 프로그램을 끝내고 싶다면  '굿바이' 라고 말하면 프로그램은 종료됩니다.

 

 

 

 

6. 그리고 실행파일의 위치에 가보니 'memo.txt'파일이 생성되었고, 이 파일을 열어보니 우리가 이야기했던 내용들('안녕' 등)이 모두 텍스트로 잘 저장된 것을 볼 수 있습니다.

 

 

 

O 시작전 준비 사항

 

 

1. 프로그램을 실행하기 위해서는 아래 모듈들이 필요합니다. 아래와 같이 임포트 해줍니다.

 

import speech_recognition as sr
from gtts import gTTS
import os
import playsound
import time

 

※ 설치 시 에러가 발생거나, 궁금하신 점이 있으시면 댓글로 문의 주시면 친절하게 답변드리겠습니다.

 

 

2. 우리 프로그램은 음성을 메모하는 프로그램으로 음성을 전달할 수 있는 마이크가 있어야 합니다. 저의 경우 그냥 저렴한 이어폰의 마이크 기능이 달려있는 기본 이어폰으로 테스트를 하였으며, 잘 동작하는 것을 확인하였습니다.

 

 


 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스 : 4.py

import speech_recognition as sr
from gtts import gTTS
import os
import playsound
import time

def speak(text):
    tts = gTTS(text=text, lang='ko')
    filename='voice.mp3'
    tts.save(filename) # 파일을 만들고,
    playsound.playsound(filename) # 해당 음성파일을 실행(즉, 음성을 말함)
    os.remove(filename) # <---- 이부분이 없으면 퍼미션 에러 발생(아마도 파일을 연 상태에서 추가적인 파일생성 부분에서 에러가 발생하는 것으로 보임)

def get_audio():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("지금 말씀하세요: ")
        audio = r.listen(source)
        said = " "

        try:
            said = r.recognize_google(audio, language="ko-KR")
            print("말씀하신 내용입니다 : ", said)
        except Exception as e:
            print("Exception: " + str(e))
    
    return said

#############################
# 0.안내 방송(음성)
#############################
speak("안녕하세요. 2초 후에 '지금 말씀하세요: ' 라는 문장이 나온 후 말 하시면 텍스트로 저장되며, 종료시 '굿바이'라고 말씀하시면 됩니다.") 



if os.path.isfile('memo.txt'):
    os.remove('memo.txt')


while True:
    #############################
    # 1.음성입력
    #############################
    text=get_audio()

    # print(text, "++++++++++++++++ 1")



    #############################
    # 5.파일저장
    #############################
    with open('memo.txt', 'a') as f:
        f.write(str(text)+"\n")

    if "굿바이" in text:
        break

    time.sleep(2)

 

 

 

 

 

O 소스 다운로드 및 실행

 
 - 소스파일 다운로드 후 cmd , 파워쉘, vscode 등에서 아래와 같이 실행하시기 바랍니다.
 
 > python 4.py

 

 


 
 

O 주요 내용

 

1. 다른 부분은 이전글과 동일하므로 다른 부분 위주로 설명드리겠습니다.

 

라인 36~37은 기존에 'memo.txt'파일이 존재하면 삭제합니다.

그리고 우리가 말한 음성을 계속해서 저장하기 위해 while문을 사용하였고,

여기서 get_audio()함수를 호추하여 우리가 말을하면 음성->텍스트로 변환한 후

파일('memo.txt')에 저장하는데, 모드가 'w'가 아닌 'a'로 저장해야 모든 음성이 텍스트로 저장됩니다.

만일 'w'모드로 하면 덮어쓰기가 되므로 맨 마지막 음성만 텍스트로 저장되므로 이부분만 주의하시면 되겠습니다.

 

그리고, 만일 텍스트로 변환한 내용 중에 '굿바이'라는 문자열이 있다면 while문을 빠져 나가도록하여, 프로그램을 종료하게 하였습니다.

 

 

 

2. 아래는 위의 소스를 실행한 결과이며, '개요'에서 설명드린 내용과 같습니다.

 

 

 

3. 아래 저장된 파일에 우리가 말한 내용이 모두 담겨져 있습니다.

 

 

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘은 이전글에서의 프로그램은 한번 말하면 프로그램이 종료되어 다시 프로그램을 시작해야 하는 불편사항이 존재하는 부분에 대하여 우리가 특정 명령을 내리기 전까지는 계속 실행되어 메모를 진행할 수 있도록 개선하는 방법에 대하여 알아보았습니다.
 
 
 
 - 오늘 우리가 배운 내용을 정리해 보면 아래와 같습니다.
 
 
 > 1.파일 저장 시 모든 음성 내용을 저장하기 위해서 'a' 모드 사용
with open('memo.txt', 'a') as f:
 
 > 2.while 루프를 종료하기 위해 '굿바이' 문자열이 있으면 break로 빠져나옴
if "굿바이" in text:
        break

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

 

 

 

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

728x90
반응형
LIST