[컴퓨터공학]/[마이크로 프로세서]

[마이크로 프로세서] 라즈베리파이 VQA 프로젝트 1 - STT

딥러닝 도전기 2022. 6. 3. 23:02

[마이크로 프로세서] 라즈베리파이 VQA 프로젝트 1 - STT

안녕하세요. 딥러닝 도전기입니다.

학부 3학년 마이크로 프로세서 교과목 시간에 진행하는 라즈베리파이 Visual Question Answering프로젝트에 대하여 포스팅을 해볼까 합니다.

 

Visual Question Answering은 질문과 이미지를 입력하면 딥러닝을 통하여 답변을 출력해주는 시스템입니다.

Input : Question, Image

Output : Answer

 

보통 학술적인 목적을 위해서 실험을 진행할 때는 질의-응답이 text input, text output이지만 실생활에 적용하기 위해서는 speech input, speech output이 적합합니다. 따라서 Speech To Text(STT), Text To Speech(TTS)의 작업이 필요 할 것으로 보입니다.

 

생각하고 있는 process는 다음과 같습니다.

 

STT와 TTS는 구글 API의 힘을 빌려볼까 합니다.

따라서 이번 포스팅에서는 마이크 및 스피커, 웹캠 설치와 STT를 위한 구글 API에 관한 내용을 작성하겠습니다.

 


0. 초기 세팅

  • 라즈비안 업데이트
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

 

  • USB 마이크, 3.5mm 오디오 잭 스피커 준비, 연결

 

1. 마이크, 스피커

  • 사용 가능한 마이크 확인
$ arecord -l

출력

**** List of CAPTURE Hardward Devices ****
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

(라즈베리에서 캡쳐 오류가 나서 출력을 직접 작성해야겠네요..)

 

위에 출력을 확인해보면, card1에 device0이 있는 것을 확인할 수 있습니다.

 

 

  • 사용 가능한 스피커 확인
$ aplay -l

출력

**** List of PLAYBACK Hardware Devices ****
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
  Subdevice #0 : subdevice #0
  Subdevice #1 : subdevice #1
  Subdevice #2 : subdevice #2
  Subdevice #3 : subdevice #3
  Subdevice #4 : subdevice #4
  Subdevice #5 : subdevice #5
  Subdevice #6 : subdevice #6
  Subdevice #7 : subdevice #7
card 2: vc4hdmi0 [vc4-hdmi-0], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0 : subdevice #0
card 3: vc4hdmi0 [vc4-hdmi-0], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0 : subdevice #0

다 무슨 뜻인지는 모르겠네요. 느낌상으로는 card0에 3.5mm로 연결된 오디오가 device0으로 있는 것 같고, card2, card3는 hdmi로 연결된 모니터 내장 스피커인 것 같습니다.

 

이제 다음 명령어를 입력해서 마이크와 스피커를 연결 설정을 해보겠습니다.

$ sudo nano .asoundrc

 

pcm.!default {
    type asym
    capture.pcm "mic"
    playback.pcm "speaker"
}

pcm.mic {
    type plug
    slave {
        pcm "hw:1,0"
    }
}

pcm.speaker {
    type plug
    slave {
        pcm "hw:0,0"
    }
}

 

hw : 뒤에는 사용할 마이크와 스피커의 (카드 번호, 디바이스 번호)를 입력해주시면 됩니다.

저의 경우 mic에는 card1, device0 밖에 잡히지 않아서 "hw : 1,0"을 사용하였고,

스피커는 hdmi가 아닌 3.5mm 스피커를 사용하기 위해서 "hw : 0, 0"을 사용하였습니다.

 

만약 hdmi로 연결된 모니터 내장 스피커를 사용하고자 하면 speaker 부분에 "hw : 2,0" 이나 "hw : 3,0"을 사용하면 될 것 같습니다.

pcm hw : [#card] [#device]

다음으로 스피커를 먼저 테스트 해줍니다

$ speaker-test -t wav

 

이 명령어를 입력하면 스피커에서 음성이 출력된다는데 저는 안돼서 방법을 찾아보다가

https://velog.io/@mythos/Raspberry-Pi-4-3.5mm-Jack-%EC%86%8C%EB%A6%AC-%EC%9E%AC%EC%83%9D

 

Raspberry Pi 4 3.5mm Jack 소리 재생

Raspberry Pi 4 에는 3.5mm Audio Jack 포트가 존재한다. (CSI Camera 포트 바로 오른쪽에 위치) 어린 시절에 썼던 헤드셋 포트가 딱 이렇게 생겼었는데 요즈음엔 이어폰은 블루투스, 헤드셋은 USB 포트로 나

velog.io

 

위의 블로그를 참고하여 수정해보았는데도 안돼서 블루투스 스피커로 해결했습니다^^

 

블루투스 스피커는 연결만 하면 바로 출력이 나와서 편하네요 추천드립니다.

 

  • 마이크 테스트는 다음의 코드로 진행합니다.

 

녹음

$ arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw

재생

$ aplay --format=S16_LE --rate=16000 out.raw

 

음.. 아래의 사이트에서 마이크 테스트 진행하는 것도 좋을 것 같습니다.

https://www.onlinemictest.com/ko/

 

Microphone Test - Check Your Mic With Our Online Tool | OnlineMicTest

An online microphone test to check if your mic is working and properly configured. For Skype and other voice call services, or for any other use.

www.onlinemictest.com

 

이제 GCP에서 300$무료 크레딧 받으시고 STT API를 사용하면 됩니다.

https://console.cloud.google.com/?hl=ko 

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

API를 등록한 후, 좌측 메뉴의 API및 서비스 $\to$ OAuth 동의 화면에서 동의 하시고

 

$\to$ 사용자 인증 정보에서 OAuth 2.0 클라이언트 ID $\to$ 가장 오른쪽에 화살표 다운로드 모양을 클릭하시면 다음의 화면이 나옵니다.

 

여기에서 JSON파일을 다운로드 받은 후 scp명령어를 통하여 라즈베리파이의 /home/userName/ 으로 복사하시면 됩니다.

초기에 userName을 설정하지 않았다면 아마도 /home/pi/로 하시면 될 것입니다.

 

scp /json파일 경로/client ~~ .json userName@ip:/home/userName/

 

오늘은 여기까지 하고 다음 포스팅으로 이어서 하겠습니다.

 

 


다음날 이어서 작성

 

구글 STT API사용을 계속해서 시도해 보았는데 JSON 파일 등록 이후 자꾸 400오류가 떴습니다.

하루정도를 이 과정으로 날린 것 같네요

 

집중력도 떨어지고 하기 싫어져서 다른 방법을 찾아보았습니다.

 

카카오API를 사용하여 해결했는데요, 어짜피 한국어 번역할것이고 카카오 API 사용해도 무관 할 것이라고 생각했습니다.

아래의 블로그를 참고하였습니다.

 

https://ai-creator.tistory.com/70

 

음성인식 (STT) 빨리 시작하기 - 카카오 OpenAPI

카카오에서는 음성인식(STT, Speech-To-Text)을 무료로 제공하고 있습니다. ㅁ 1일 무료 허용량 하루에 음성인식은 20,000건 / 5,400초(90분)를 무료로 제공하고 있습니다. 빠르게 살펴보겠습니다. << 순서

ai-creator.tistory.com

 

카카오 편하고 좋네요.. 구글에서는 json 옮기고 oauth 인증하고 뭐하고 또 뭐하고 해도 안되던 것이 REST API키 한 개만 사용해서 해결이 되네요.. 기분이 좋아야 하는데 좋지많은 않네요..

 

자 이제 마이크 음성인식 후 text로 변환까지 마쳤습니다!

앞으로 할 일은 VQA에서 V부분 (Visual) 즉 이미지가 되겠네요~

 

2. USB 웹캡

USB웹캠은 너무나도 쉬웠습니다..

 

우선 다음의 명령어를 통해서 fswebcam을 설치합니다.

 

$ sudo apt-get install fswebcam

 

사진 찍기, jpg로 저장

$ fswebcam ./test_image.jpg

이렇게 하면 찍히긴 하는데, 해상도가 너무 구리네요

 

본인의 카메라 설명서에 써있는 해상도로 맞춰줍니다.

저는 1920x1080 이여서 다음과 같이 작성했습니다.

 

$ fswebcam -r 1920x1080 ./test_image.jpg

 

자 이제 speech to text 과정을 거친 text 파일과 이미지 파일이 준비되었습니다.

이제 이 두 가지 파일을 VQA 모델에 넣어서 추론을 진행하면 될 것으로 보입니다.

 

다음 포스팅에 이어서 하도록 하겠습니다.

반응형