-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathM1.py
170 lines (150 loc) · 21.7 KB
/
M1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
import os
import time
from google.cloud import speech_v1p1beta1 as speech
from google.cloud.speech_v1p1beta1 import types
import pyaudio
from difflib import SequenceMatcher
# Google STT 인증 정보 설정
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
CREDENTIALS_PATH = os.path.join(BASE_DIR, 'challenge-395408-6472f6ef3591.json')
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = CREDENTIALS_PATH
count = 0
MAX_STREAM_MINUTES = 4.5 # 5분 전에 스트림을 재시작합니다.
class StreamAudioToText:
def __init__(self, rate=44100, chunk=220500):
self.rate = rate
self.chunk = chunk
self.client = speech.SpeechClient()
self.config = types.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=self.rate,
language_code='ko-KR'
)
self.streaming_config = types.StreamingRecognitionConfig(
config=self.config,
interim_results=True
)
self.audio_interface = pyaudio.PyAudio()
self.audio_stream = self.audio_interface.open(
format=pyaudio.paInt16,
channels=1,
rate=self.rate,
input=True,
frames_per_buffer=self.chunk,
input_device_index=1 # 여기에 장치 번호를 지정
)
self.start_time = time.time()
def listen_print_loop(self, responses):
for response in responses:
if not response.results:
continue
result = response.results[0]
if not result.alternatives:
continue
transcript = result.alternatives[0].transcript
if result.is_final:
self.most_similar(transcript)
break
#가장 유사도가 높은 단어를 출력하는 메소드
def most_similar(self,transcript):
highest_similarity = 0.0
most_similar = None
global count
count += 1
predescribed_words = [
"가격", "거실난방꺼라", "건조헹굼", "과거", "기분어때", "날씨안내해줘", "녹음", "다음",
"가기", "거실난방온도내려", "걷기동작", "과거현재미래", "기어", "날씨정보", "녹음리스트", "다음메뉴",
"가스닫아", "거실난방온도올려", "걸어", "관광레저테마파크", "기억", "날짜", "녹화", "다음명령",
"가스밸브", "거실난방외출", "걸어줘", "관광정보", "기차시간", "날짜시간변경", "논술교육", "다음목록",
"가스밸브닫아", "거실난방켜", "검색", "교육정보", "기차표", "날짜정렬", "논술정보", "다음문제도전",
"가습기", "거실난방켜라", "검색하기", "교육콘텐츠", "까스닫아", "남쪽", "높은", "다음으로",
"가습기작동", "거실로와", "검색해줘", "구간반복", "까스닫어", "내려가", "누리마루", "다이어리",
"가습기정지", "거실밝게", "게임", "구두", "까스밸브", "내문서", "누리마루홍보관", "닫기",
"가열헹굼", "거실불꺼", "경로", "구십층", "까스밸브닫아", "내일", "누리마루소개", "달력",
"가장작게", "거실불꺼라", "경보기능", "구월", "까스잠거", "내일날씨", "누워", "답장",
"가져오기", "거실불밝게", "경비실연결", "구층", "까스잠궈", "냉동온도설정", "눈감아", "대유증권",
"가져와", "거실불어둡게", "경비실통화", "국어학습", "께임", "냉수헹굼", "눈떠", "더하기",
"가족보기", "거실불켜", "계산기", "국제금융단지", "꼬리흔들어", "냉장고", "뉴스", "도구",
"간단히", "거실불켜라", "계속", "국제비즈니스", "꽃", "냉장고로와", "뉴스안내", "도구모음",
"감성모드", "거실소등", "골프", "굵게", "꽃새나무", "냉장온도설정", "뉴스안내안내해줘", "도리도리",
"감성모드실행", "거실어둡게", "곱하기", "그룹선택", "끊기", "네비게이션", "뉴스안내해줘", "도마크",
"감시", "거실점등", "공가져와", "그만", "끝내기", "네이버", "뉴스정보", "도시안내",
"감시해", "거실조명꺼", "공부방꺼", "그쪽으로", "끝으로", "네이트", "느리게", "도우미",
"개발개요", "거실조명꺼라", "공부방난방", "기념일", "나를봐", "네트워크연결", "다국어홍보시스템", "도움말",
"개인일정관리", "거실조명켜", "공부방소등", "기념촬영", "나무", "네트워크연결끊기", "다른", "도움말항목",
"거꾸로", "거실조명켜라", "공부방점등", "기념촬영하기", "나의정보", "년", "다른이름으로저장", "도착일",
"거리", "거실청소", "공부방켜", "기능및역할", "난방모드", "노래방안내", "다른집통화", "도청시설안내",
"거리측정", "거절", "공을가져와", "기록", "날봐", "노래방안내해줘", "다시입력", "돌아",
"거실난방", "건강", "공지사항", "기본값복원", "날씨", "노트", "다시찍기", "돌아가",
"거실난방꺼", "건강지수", "공찾아", "기본자세", "날씨안내", "노트편집", "다시한번", "돌아봐",
"동관", "라디오켜", "메인화면", "문자메세지", "받지마", "변환해", "부산시티투어", "사진앨범",
"동기화", "라이브러리추가", "메일", "문자전송", "발신", "별표", "북쪽", "사진앨범안내해줘",
"동명검색", "래프팅", "메일내용", "문잠가", "발신메세지", "보관", "붙여넣기", "사진찍기",
"동봉하기", "로봇이란", "메일보내기", "문잠가줘", "밝게", "보기", "뷰모드", "사층",
"동영상유씨씨", "로비문열어", "메일작성", "문제", "밥솥", "보내기", "뷰어", "삭제",
"동요", "리스트", "메일전송", "문화특강", "방문리스트", "보낸사람", "뷰어정보", "삭제해",
"동쪽", "마스코트", "메일제목", "미디어검색", "방문자리스트", "보안", "비디오", "삼십층",
"되감기", "마이크", "메일확인", "미디어라이브러리", "방범리스트", "보여줘", "비디오설정", "삼층",
"둘리", "마지막결과보기", "명령", "미디어정보", "방범모드", "보일러", "비밀기능", "상세",
"둘리야", "말하기", "몇시", "미디어플레이어", "방이로와", "보일러꺼", "비상연락", "상위",
"뒤로", "멈춰", "몇시야", "미래", "방일로와", "보일러작동", "비상정지", "상자",
"뒤로가", "메뉴", "몇시입니까", "미리보기", "배경화면설정", "보일러정지", "비용정산", "상태표시줄",
"뒤로돌아", "메뉴삭제", "모니터링해", "밑으로", "배고파", "보일러켜", "비전", "새",
"뒤로돌아가", "메뉴선택", "모두보내기", "바람방향설정", "배달", "복도", "비전및목표", "새로고침",
"뒤쪽으로", "메모", "모두선택", "바로가기", "배터리잔량", "복사", "빠르게", "새로만들기",
"드라마", "메모등록", "모드설정", "바로가기만들기", "백과사전", "복사하기", "빠른새로고침", "새로압축",
"듣고", "메모리", "모든카테고리", "바로가기붙여넣기", "백라이트", "복원", "빵", "새메일",
"듣기시작", "메모있어", "목록", "바이오리듬", "백업", "본관", "사람찾기", "새파일",
"들려줘", "메모장", "목록삭제", "반대로", "백층", "볼륨", "사랑해", "새폴더",
"등록", "메모재생", "목록선택", "반만내려", "번지점프", "볼륨낮춤", "사십층", "서관",
"등록정보", "메모해", "목요일", "반복", "번호", "볼륨높임", "사용자이름", "서바이벌게임",
"등산", "메모확인", "목표", "반복해", "벨소리", "볼륨다운", "사전", "서비스안내해줘",
'디브이디', '메신져', '몬테소리', '반전', '벨진동전환', '볼륨업', '사진', '선택', '따뜻하게해줘', '메인',
'문닫아', '받는사람', '변경', '볼륨줄여줘', '사진메뉴', '선택그룹해제', '라디오꺼', '메인메뉴', '문열어',
'받은편지함', '변환', '볼륨크게해줄래', '사진모델하기', '선택된아카이브테', '스트', '선택된아카이브풀', '기', '수신함', '신관', '아이페즈란', '안방불켜', '야경투어', '에어콘이십삼도', '영문', '선택반전', '수요일', '실내온도설정', '아이페즈소개', '안방불켜라', '야식집번호', '에어콘이십오도', '영문필기인식', '선택영역반전', '수정', '실행', '아젠다', '안방소등', '야후', '에어콘이십이도', '영상쪽지', '선택항목숨기기', '순서섞기', '실행취소', '아침', '안방으로와', '약속', '에어콘이십일도', '영상쪽지안내해줘', '선풍기', '숨김파일표시', '십이장생도', '아카이브복구', '안방점등', '약속만들기', '에어콘켜', '영상통화', '설명', '숫자', '십일층', '아카이브열기', '안방조명꺼', '양손내려', '에어펙이란', '영어', '설명정렬', '쉘', '십초추가', '아카이브잠그기', '안방조명꺼라', '양손들어', '에이펙개요', '영어만세', '설정', '쉬프트', '십초후촬영', '아카이브정보보기', '안방조명켜', '양손올려', '에이펙이란', '영어사전', '세대간통화', '스키', '십층', '악수하기', '안방조명켜라', '어둡게', '엑셀', '영어학습', '소리', '스톱', '쌀', '악수하자', '앉아', '어린이', '엠비씨', '영역검색', '소리낮춰', '슬라이드쇼', '썸네일', '안개', '알람', '언어', '엠에스리더', '영종지구', '소리높혀', '슬라이드쇼반복', '쏠리테어', '안내', '알람설정', '얼굴등록', '엠에스머니', '영한사전', '소리작게', '슬로건', '씨디오디오', '안녕', '알람해제', '엄마번호', '엠에스메신져', '영화', '소리줄여줘', '시간', '아니오', '안녕서비스', '알려줘', '업무만들기', '엠에스앤', '영화감상모드', '소리크게', '시간정보', '아래', '안돼', '암호', '엎드려', '엠티비', '영화감상모드실행', '소요시간', '시계', '아래로', '안방난방', '압축', '에너지조회', '엠파스', '옆으로', '손내려', '시원하게해줘', '아래를봐', '안방난방꺼', '압축닫기', '에어컨', '여기가어디입니까', '예', '손들어', '시작', '아빠번호', '안방난방꺼라', '압축열기', '에어컨작동', '연결', '예비세척', '송도지구', '시작메뉴', '아웃룩', '안방난방온도내려', '압축테스트', '에어컨정지', '연결아이템보기', '예약', '수동', '시작설정', '아이로비', '안방난방온도올려', '압축풀기', '에어콘꺼', '연결해', '예약녹화', '수락', '시작해', '아이콘정렬', '안방난방외출', '앞으로', '에어콘십구도', '연락처', '예약설정', '수면모드실행', '시작화면', '아이콘줄맞춤', '안방난방켜', '앞으로가', '에어콘십칠도', '열기', '예약시간', '수신메세지', '시장', '아이템연결', '안방난방켜라', '앞으로나란히', '에어콘십팔도', '열선택', '예약취소', '수신메일', '시장메뉴', '아이티비티알엔디', '안방불꺼', '앞의', '에어콘이십도', '열어', '예약해', '수신메일확인', '시황분석', '아이페즈', '안방불꺼라', '애쓰비애쓰', '에어콘이십사도', '열어줘', '오늘', '오늘날씨', '온도올려', '원래대로', '음성통화', '이쁜짓', '일반', '작게', '저리가', '오늘며칠이니', '온도조절', '월', '음악', '이십초후촬영', '일본어', '볼륨작게', '저장', '오늘며칠이야', '올라가', '월패드', '음악들려줘', '이십층', '일시정지', '작게보기', '저쪽으로', '오늘무슨요일이니', '옵션', '월패드보여줘', '음악정보', '이전', '일시중지', '작게해줘', '저쪽으로가', '오늘무슨요일이야', '외갓집번호', '웹브라우져', '음악채널', '이전메뉴', '일어사전', '작동', '적외선연결', '오델로', '외출모드', '웹브라우징', '응답', '이전목록', '일어서', '작업표시줄', '적용', '오락', '외출모드설정', '웹페이지', '응용프로그램', '이전크기', '일어학습', '작은방으로와', '전등꺼', '오른발', '외출모드실행', '위로', '의자젖히기', '이쪽으로', '일요일', '작은아이콘', '전송', '오른손내려', '왼손내려', '위를봐', '이것열기', '이쪽으로와', '일정', '잘라내기', '전시물소개', '오른손들어', '왼손들어', '윙크', '이동', '이층', '일정검색', '잘잤니', '전원작동', '오른손올려', '왼손올려', '유미디어', '이동해', '이퀄라이져', '일정관리', '잘잤어', '전원정지', '오른쪽', '왼쪽', '유아교육', '이름', '익힘', '일정관리안내해줘', '잠금', '전원켜', '오른쪽앞', '왼쪽뒤로', '유알엘열기', '이름넣기', '인기가요', '일정안내', '장난감', '전자메일', '오른쪽으로', '왼쪽으로', '유치원조례', '이름바꾸기', '인박스', '일정확인', '장소', '전자수첩', '오른쪽으로가', '왼쪽으로가', '유치원출석부', '이름변경', '인사', '일층', '재발신', '전자우편', '오른쪽을봐', '왼쪽을봐', '육십층', '이름으로찾기', '인사말변경', '읽기', '재생', '전체', '오십층', '요리안내해줘', '육층', '이름정렬', '인사하기', '잃어버린', '재생도구', '전체모드', '오전', '요리정보', '율동동요', '이리와', '인사해', '자동새로고침', '재생목록가져오기', '전체보기', '오초후촬영', '요리정보안내해줘', '음성', '이메일보내기', '인쇄', '자동응답기', '재생목록내보내기', '전체불꺼', '오층', '우리말', '음성녹음기', '이미지검색', '인쇄설정', '자동응답기확인', '재생목록표시', '전체불꺼라', '오케이', '우물정자', '음성메모', '이미지만표시', '인천대교', '자동차', '재생해줘', '전체불켜', '오픈', '움직이지마', '음성명령시작', '이미지뷰어', '인천타워', '자세히', '재택모드실행', '전체선택', '오프라인파일', '운세정보', '음성메세지', '이미지복사', '인천의강점', '자르기', '재택모드', '전체불켜라', '온도내려', '워드', '음성인식기', '이미지속성', '인터넷탐색기', '자세히보기', '저널', '전체조명꺼', '온도설정', '원격검침조회', '음성테스트', '이비에쓰', '인터렉티브아트월', '자습서', '저녁', '전체조명꺼라', '전체조명켜', '정보검색', '주요사업', '지도검색', '천천히', '충전', '커튼우', '타일',
'전체조명켜라', '정보보기', '주요투자실적', '지물검색', '첨단화훼단지', '충전대앉아', '커튼위', '탈수행정', '전체크기', '정지', '줄', '지우기', '첨부하기', '충전하고와', '커튼좌', '탐색창', '전체화면', '제거', '중간', '지움', '청라지구', '충전하러가', '컨텐츠', '태스크', '전체회신', '제니보', '중국어', '지하철', '청사시설안내', '충전해', '컨트롤', '태종대방향', '전화', '제목', '중국어사전', '직접입력', '청소제어', '충청북도소개', '컬럼보기', '테마가있는여행', '전화걸기', '제목표시', '중국어학습', '집', '청소제어안내해줘', '취소', '컴투미', '토요일', '전화기', '제어판', '중국집', '집지킴모드', '청취', '취침모드', '컴퓨터', '토토야', '전화번호넣기', '제자리로가', '중국집전화연결', '창문닫아', '초기메뉴', '칠십층', '코리아닷컴', '통화기록', '전화번호등록', '조명밝게', '중단해', '창문열어', '초기화면', '칠층', '코스선택', '투자상품', '전화번호로찾기', '조명어둡게', '중앙', '찾기', '촬영취소', '침실불꺼', '퀴즈나라', '튜너', '전화번호부', '조용', '중지', '찾아', '최근목록', '침실불켜', '퀴즈시작하기', '트랙정보', '전화번호안내', '제이팩변환', '중국집번호', '참조하기', '체지방측정', '층별안내', '켄슬', '통화', '전화번호알려줘', '조용히', '즐거운놀이', '찾아라', '최근번호', '침실소등', '퀵메뉴', '틀린그림찾기', '전화번호입력', '조직도', '즐겨찾기', '찾아줘', '최신노래', '침실전등', '퀵스타트', '티브이녹화', '전화정보', '조직안내', '즐겨찾기구성', '채널', '추가', '침실점등', '크게해줘', '티브이로와', '전화통화', '종교음악', '즐겨찾기리스트', '채널돌려', '추진배경', '캐쉬유지보수', '크기', '티비', '절반크기', '종료', '즐겨찾기추가', '채널변경', '추천여행지', '캐이비애쓰원', '크기순으로', '티비구번', '절전모드', '주', '증권정보', '채널삼번', '축소모드', '캘린더', '크기정렬', '티비녹화', '점검', '주방난방', '지금몇시니', '채널오번', '출력하기', '캡션', '큰아이콘', '티비로와', '점검해', '주방불꺼', '지금몇시야', '채널이번', '출발시간', '커튼닫아', '클레이사격', '티비사번', '정답확인', '주방으로와', '지금재생', '채널일번', '춤춰봐', '커튼멈춰', '키보드', '티비삼번', '정렬', '주소', '지난달', '처음', '충북특산물', '커튼아래', '키보드필기인식', '티비십번', '정보', '주소록', '지도', '처음으로', '충북도청', '커튼열어', '타이머', '티비십사번', '티비십삼번', '티비팔번', '파일탐색기', '풍향설정', '피자집전화연결', '할아버지번호', '현재위치', '확인', '티비십오번', '파란', '파일표식', '풍향자동', '피잣집번호', '할일', '현재폴더사용자정', '의', '확장팩', '티비십육번', '파워', '파일형식', '풍향자동조절', '필기연습', '해운대방향', '형식', '환경설정', '티비십이번', '파워냉동', '팔십층', '프로그램', '하위', '해운항만물류', '형식정렬', '회국학교및병원', '티비십일번', '파워냉장', '팔층', '프로그램모드', '하지마', '해제', '홈모니터링', '회신', '티비십칠번', '파워오프', '페이지', '프로그램연결', '학습안내', '행사안내', '홈바불꺼', '회전', '티비십팔번', '파워온', '편집', '프로그램제거', '학습안내해줘', '행정구역', '홈바불켜', '휴대폰', '티비오번', '파워포인트', '폴더', '프로그램종료', '한국어', '향토음식', '홈빠소등', '힌트', '티비월패드', '파일', '폴더검색', '프리미엄콘텐츠', '한글', '현관문', '홈빠점등', '티비육번', '파일리스트', '폴더로이동', '프리셀', '한글만세', '현관문열기', '홈으로', '티비이번', '파일모으기', '폴더설명', '프린터', '한글필기인식', '현관보기', '홍보관소개', '티비일번', '파일목록생성', '폴더에복사', '플레이', '한영사전', '현관으로와', '홍보영상', '티비전원', '파일보기', '폴더옵션', '피씨연결', '한영전환', '현재', '홍보이미지', '티비칠번', '파일삭제', '표시', '피아노', '한자',
'현재시간', '확대', '티비켜', '파일연결', '풍량설정', '피자집', '할머니번호', '혼자놀아', '회사', '홈', '종류', '증권시황', '채널사번', '축소', '캐이비애쓰투', '크기자동조절', '티비꺼',
]
print(f'transcript : {transcript}')
if transcript in predescribed_words:
print(f'{count}:{transcript}')
else:
for word in predescribed_words:
similarity = SequenceMatcher(None, transcript, word).ratio()
if similarity >= highest_similarity:
highest_similarity = similarity
most_similar = word
print(f'{count}:{most_similar}')
def start(self):
while True:
try:
if time.time() - self.start_time > MAX_STREAM_MINUTES * 60:
self.restart_stream()
audio_data = self.audio_stream.read(self.chunk, exception_on_overflow=False)
request = types.StreamingRecognizeRequest(audio_content=audio_data)
responses = self.client.streaming_recognize(self.streaming_config, [request])
self.listen_print_loop(responses)
except IOError as e:
print(f"IOError: {e}")
# 여기서 오류를 처리하고 필요한 경우 스트림을 재시작할 수 있습니다.
self.restart_stream()
def restart_stream(self):
self.audio_stream.stop_stream()
self.audio_stream.close()
self.audio_interface.terminate()
self.audio_interface = pyaudio.PyAudio()
self.audio_stream = self.audio_interface.open(
format=pyaudio.paInt16,
channels=1,
rate=self.rate,
input=True,
frames_per_buffer=self.chunk,
input_device_index=1 # 여기에 장치 번호를 지정
)
self.start_time = time.time()
def main():
print("실시간 STT 시작. 종료하려면 Ctrl+C를 누르세요.")
stream_audio = StreamAudioToText()
stream_audio.start()
if __name__ == '__main__':
main()