728x90
반응형
  • http 로 호출하면 보안상의 이슈로 파라미터가 떨어져있는 경우가 있음
    • 해결 : https 로 변경해야함 
  • http,https 문제인지 확인하는 방법은 post man 활용
    • post man 에서 api 호출 시 파라미터가 있는데, 웹에서 호출할때 파라미터가 없다면 http 프로토콜 문제임
728x90
반응형

'IT > API' 카테고리의 다른 글

STT API 실행파일로 만들기!!!  (0) 2021.01.27
STT 과제 - Google STT 활용  (0) 2021.01.27
STT 과제 - 안드로이드 google STT API 활용  (0) 2020.11.24
728x90
반응형

1. Google Cloud Platform

 

1) 주소창에 https://console.cloud.google.com을 작성한 후

2) 파란 상단바에 My First Project를 클릭하면 프로젝트를 선택할 수 있는 박스가 뜬다. 우측 상단의 새 프로젝트를 누르고 프로젝트 이름과 회사명을 임의로 작성한다. -> 만들기 클릭하면 해당 프로젝트가 생긴다.

3) 다시 My First Project를 눌러 새로 만든 프로젝트에 들어간다.

4) 파란 상단바에 돋보기 옆은 검색창이다. "Speech"를 입력하면 Cloud Speech to Text API가 있다. 얘를 클릭한다.

5) 사용 설정을 눌러준다. (결제 어쩌고 뜨는데 1년동안 무료이므로 걱정하지 않아도 된다. 1년이 되기 전에 사용 정지하기)

6) 좌측에 사용자 인증 정보를 눌러준다. 파란 상단바 아래에 사용자 인증 정보 만들기가 있다. 클릭 후 서비스 계정 선택. 서비스 계정 이름은 본인이 임의로 설정한다. -> 만들기 선택

7) 서비스 계정 권한 창이 뜬다면 역할은 소유자.

8) 키 만들기를 눌러 JSON으로 만들기를 누른다. 그럼 .json 파일이 다운될 것이다.

 

2. cmd 환경 설정

******(수정)******

1) cmd 창에 들어가서 set GOOGLE_APPLICATION_CREDENTIALS=경로\파일명 (경로에 아까 다운받은 .json 파일이 있는 위치를 넣어준다. 파일명에는 다운받은 .json파일 이름을 써준다. 파일명에 .json 까지 넣어줘야 함.)

+++) 이거 매번 쳐야 하는데 귀찮으면 환경변수 - 시스템 변수에 등록 고고 <변수이름=GOOGLE_APPLICATION_CREDENTIALS> <변수 값=경로\파일명>

2) https://cloud.google.com/sdk 에서 window용 다운로드 받기 (체크박스 그냥 다 하세용)

3) SDK shell 켜지면 gcloud init -> Y -> 창 켜지면 인증 -> 만든 프로젝트 선택

 

(기존)

1) pip --version 으로 pip이 설치되어 있는지 확인. 없으면 설치하기

2) pip install virtualenv

3) pip install virtualenvwrapper-win

(WARNING으로 pip 업그레이드 하라고 하면 -> python -m pip install --upgrade pip)

 

+ cd desktop(바탕화면에 만들어 두면 보기 편함!!!)

 

4) mkdir 임의의 파일명(ex: pjh)

5) cd pjh (mkdir은 디렉토리를 만드는 명령어, cd는 이동 명령어다. 내가 만든 폴더로 이동하겠다는 뜻이다.)

6) virtualenv env

7) .\env\Scripts\activate

8) pip install --upgrade google-cloud-storage

9) pip install google-cloud-speech

10) gcloud auth activate-service-account --key-file="경로\파일명" (경로에 아까 다운받은 .json 파일이 있는 위치를 넣어준다. 파일명에는 다운받은 .json파일 이름을 써준다. 파일명에 .json 까지 넣어줘야 함.)

11) pip install pyaudio (오류날 수 있다. 설치가 다 안된다고 빨간색으로 중간에 뜰 수 있는데 그럼 pip install pipwin을 한 후에 pipwin install pyaudio 하면 된다.)

12) API 파일을 바탕화면에 있는 pjh파일(임의의 파일)안에 env파일 안에 Scripts 파일안에 넣어두기

13)다시 cmd로 와서 api파일을 실행하면 음성을 문자로 변화할 수 있다. 

 

굵은 글씨 빼고는 경현이 글 참고해도 됩니다~!!

 

 

3. exe파일 만들기

1. 새로운 cmd 창을 열고 start appdata 입력

2. appdata폴더가 열리면 local > programs > python > python38.32 순으로 cd붙여가면 들어가기!!

3. pip install pyinstaller 입력

4. 컴퓨터 검색창에 pyinstaller 검색후 나오는 파일을 열고 그 파일을 cmd로 드래그 해서 옮기기 그다음에 .exe지우고 한칸 띄고 api파일 도 cmd로 드래그 후 enter

5. 위 과정을 다 한후에 바탕화면에 있는 내가 만든 임의의 파일로 들어가서 Scripts까지 들어간후 api파일을 찾아서 실행 시키면 exe파일이 실행됩니다.

 

위 과정을 반복해서 2게의 실행파일을 만들었지만.. 인규꺼로 했을때는 실행되지 않아 원인을 분석해본 결과

python의 버전이 경환이와 나는 django하면서 깔린 파이썬이고 인규는 3.8이라서 안된다고 생각됨..

 

 

 

728x90
반응형

'IT > API' 카테고리의 다른 글

API 호출 시 파라미터가 없는 버그  (0) 2022.09.27
STT 과제 - Google STT 활용  (0) 2021.01.27
STT 과제 - 안드로이드 google STT API 활용  (0) 2020.11.24
728x90
반응형

1. Google Cloud Platform

 

1) 주소창에 https://console.cloud.google.com을 작성한 후

2) 파란 상단바에 My First Project를 클릭하면 프로젝트를 선택할 수 있는 박스가 뜬다. 우측 상단의 새 프로젝트를 누르고 프로젝트 이름과 회사명을 임의로 작성한다. -> 만들기 클릭하면 해당 프로젝트가 생긴다.

3) 다시 My First Project를 눌러 새로 만든 프로젝트에 들어간다.

4) 파란 상단바에 돋보기 옆은 검색창이다. "Speech"를 입력하면 Cloud Speech to Text API가 있다. 얘를 클릭한다.

5) 사용 설정을 눌러준다. (결제 어쩌고 뜨는데 1년동안 무료이므로 걱정하지 않아도 된다. 1년이 되기 전에 사용 정지하기)

6) 좌측에 사용자 인증 정보를 눌러준다. 파란 상단바 아래에 사용자 인증 정보 만들기가 있다. 클릭 후 서비스 계정 선택. 서비스 계정 이름은 본인이 임의로 설정한다. -> 만들기 선택

7) 서비스 계정 권한 창이 뜬다면 역할은 소유자.

8) 키 만들기를 눌러 JSON으로 만들기를 누른다. 그럼 .json 파일이 다운될 것이다.

 

2. cmd 환경 설정

******(수정)******

1) cmd 창에 들어가서 set GOOGLE_APPLICATION_CREDENTIALS=경로\파일명 (경로에 아까 다운받은 .json 파일이 있는 위치를 넣어준다. 파일명에는 다운받은 .json파일 이름을 써준다. 파일명에 .json 까지 넣어줘야 함.)

+++) 이거 매번 쳐야 하는데 귀찮으면 환경변수 - 시스템 변수에 등록 고고 <변수이름=GOOGLE_APPLICATION_CREDENTIALS> <변수 값=경로\파일명>

2) https://cloud.google.com/sdk 에서 window용 다운로드 받기 (체크박스 그냥 다 하세용)

3) SDK shell 켜지면 gcloud init -> Y -> 창 켜지면 인증 -> 만든 프로젝트 선택

 

(기존)

1) pip --version 으로 pip이 설치되어 있는지 확인. 없으면 설치하기

2) pip install virtualenv

3) pip install virtualenvwrapper-win

(WARNING으로 pip 업그레이드 하라고 하면 -> python -m pip install --upgrade pip)

4) mkdir stt_ass (stt_ass에 다른 이름 적어도 된다. 내가 만들 폴더명이다. 이 명령어 치고 나면 해당 경로에 폴더가 생긴 것을 확인할 수 있다.)

5) cd stt_ass (mkdir은 디렉토리를 만드는 명령어, cd는 이동 명령어다. 내가 만든 폴더로 이동하겠다는 뜻이다.)

6) virtualenv env

7) .\env\Scripts\activate

8) pip install --upgrade google-cloud-storage

9) pip install google-cloud-speech

10) gcloud auth activate-service-account --key-file="경로\파일명" (경로에 아까 다운받은 .json 파일이 있는 위치를 넣어준다. 파일명에는 다운받은 .json파일 이름을 써준다. 파일명에 .json 까지 넣어줘야 함.)

11) pip install pyaudio (오류날 수 있다. 설치가 다 안된다고 빨간색으로 중간에 뜰 수 있는데 그럼 pip install pipwin을 한 후에 pipwin install pyaudio 하면 된다.)

12) 창을 닫지 말고 아래 3번을 따라한 후 돌아온다.

13) 아래 코드를 넣어둔 경로로 이동한다. (cd 명령어 사용)

14) python stt_test1.py (파일명 바꿨으면 바꾼 파일명으로 실행하기)

 

 

3. 코드 확인

코드가 텍스트로 안올라가서 파일로 첨부해두었다. 원하는 곳에 다운받아둔다.

Ctrl+f 해서 ko-KR (못찾으면 def main(): 아래)가 있는데 한국어를 지원한다는 뜻이다.

영어로 사용하고 싶다면 en-US로 바꾸면 된다.

stt_test1.py
0.01MB

 

4. 결과 영상

google_stt_test.mp4
3.61MB

 

5. 추가로

pyinstaller 라는 걸 사용해서 .py 파일을 .exe 실행파일로 바꿀 수 있답니다. 저는 여기서 오류가 나서 멈춰있는데 누군가 멋지게 성공해주세욥 (py2exe는 옛날 거라 못쓰고 cx_freeze 이것도 도전 중인데 아마 pyinstaller가 가장 변환이 잘 될 거예용)

하다가 막히면 물어보세요 답해dream

728x90
반응형

'IT > API' 카테고리의 다른 글

API 호출 시 파라미터가 없는 버그  (0) 2022.09.27
STT API 실행파일로 만들기!!!  (0) 2021.01.27
STT 과제 - 안드로이드 google STT API 활용  (0) 2020.11.24
728x90
반응형

1. AndroidManifest.xml 파일에 인터넷과 오디오 접근 허용을 위한 문장을 추가한다.

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

 

2. activity_main.xml 파일에 Textview 와 Button 을 하나씩 추가한다.

Textview : stt 결과를 출력하기 위함

Button : stt 명령을 시작하기 위함

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/sttResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="STT 결과"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.405" />

    <Button
        android:id="@+id/sttStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="154dp"
        android:layout_marginTop="62dp"
        android:text="STT Button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/sttResult" />


</androidx.constraintlayout.widget.ConstraintLayout>

 

3. MainActivity.java 파일에 STT 기능을 추가한다.

package com.example.testapp;

import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    Intent intent;
    SpeechRecognizer mRecognizer;
    Button sttBtn;
    TextView textView;
    final int PERMISSION = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if ( Build.VERSION.SDK_INT >= 23 ){
            // 퍼미션 체크
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INTERNET,
                    Manifest.permission.RECORD_AUDIO},PERMISSION);
        }

        textView = findViewById(R.id.sttResult);
        sttBtn = findViewById(R.id.sttStart);

        intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,getPackageName());
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,"ko-KR");
        sttBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mRecognizer=SpeechRecognizer.createSpeechRecognizer(MainActivity.this);
                mRecognizer.setRecognitionListener(listener);
                mRecognizer.startListening(intent);
            }
        });
    }

    private RecognitionListener listener = new RecognitionListener() {
        @Override
        public void onReadyForSpeech(Bundle params) {
            Toast.makeText(getApplicationContext(),"음성인식을 시작합니다.",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onBeginningOfSpeech() {}

        @Override
        public void onRmsChanged(float rmsdB) {}

        @Override
        public void onBufferReceived(byte[] buffer) {}

        @Override
        public void onEndOfSpeech() {}

        @Override
        public void onError(int error) {
            String message;

            switch (error) {
                case SpeechRecognizer.ERROR_AUDIO:
                    message = "오디오 에러";
                    break;
                case SpeechRecognizer.ERROR_CLIENT:
                    message = "클라이언트 에러";
                    break;
                case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
                    message = "퍼미션 없음";
                    break;
                case SpeechRecognizer.ERROR_NETWORK:
                    message = "네트워크 에러";
                    break;
                case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
                    message = "네트웍 타임아웃";
                    break;
                case SpeechRecognizer.ERROR_NO_MATCH:
                    message = "찾을 수 없음";
                    break;
                case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
                    message = "RECOGNIZER가 바쁨";
                    break;
                case SpeechRecognizer.ERROR_SERVER:
                    message = "서버가 이상함";
                    break;
                case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
                    message = "말하는 시간초과";
                    break;
                default:
                    message = "알 수 없는 오류임";
                    break;
            }

            Toast.makeText(getApplicationContext(), "에러가 발생하였습니다. : " + message,Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onResults(Bundle results) {
            ArrayList<String> matches =
                    results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

            for(int i = 0; i < matches.size() ; i++){
                textView.setText(matches.get(i));
            }
        }

        @Override
        public void onPartialResults(Bundle partialResults) {}

        @Override
        public void onEvent(int eventType, Bundle params) {}
    };
}

 

4. 결과 

 

 

 

 

https://medium.com/wasd/creating-an-android-google-stt-application-4cea24ee97af

 

 

Creating an Android Google STT application

STT(Speech to Text)로 음성인식 어플을 만들기

medium.com

위 블로그를 참고하여 작성하였습니다.

728x90
반응형

'IT > API' 카테고리의 다른 글

API 호출 시 파라미터가 없는 버그  (0) 2022.09.27
STT API 실행파일로 만들기!!!  (0) 2021.01.27
STT 과제 - Google STT 활용  (0) 2021.01.27

+ 최근 게시글