2 분 소요

활동 기록


팀 활동

  • 4월 1일(월) 21:00 ~ 22:40 (정기 미팅)

→ 총 1시간 40분 진행

개별 활동

  • 유재휘
    • 2024.04.03 : ICA 개념정리 - 약 2시간
    • 2024.04.04 : ICA 알고리즘 재테스트 - 약 4시간
    • 2024.04.05 : ICA 사용 가능 여부 정리 - 약 3시간

      → 약 9시간 진행

  • 이민석
    • 04-05(금) 19:00 ~ 20:30 (부품 연결 및 프레임 스케치)
    • 04-06(토) 20:00 ~ 24:00 (부품 동작 체크)

      → 5시간 30분 진행

  • 조민수
    • 04.05 (금요일) 10:00~ 13:00 인터페이스 화면 구성
    • 04.07 (일요일) 11:00 ~ 13:30 인터페이스간 버튼을 사용한 화면 전환

      → 5시간 30분 진행

진행 상황


1. UI 제작 및 화면 구성

  • QTdesigner를 사용하여 파이썬 코드로 사용가능한 GUI화면 구성
  • QTdesign을 사용하기위한 라이브러리 설치
import os
import sys

from PyQt5.QtWidgets import *
from PyQt5 import uic
  • 제작해둔 ui를 파이썬에서 불러오기 위한 코드
def resource_path(relative_path):
    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

form = resource_path('start.ui')
form_class = uic.loadUiType(form)[0]

form_second = resource_path('check_noise.ui')
form_secondwindow = uic.loadUiType(form_second)[0]

class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
    def btn_main_to_second(self):
	      self.hide()                     # 메인윈도우 숨김
        self.second = secondwindow()    #
        self.second.exec()              # 두번째 창을 닫을 때 까지 기다림
        self.show()                     # 두번째 창을 닫으면 다시 첫 번째 창이 보여짐짐

class secondwindow(QDialog,QWidget,form_secondwindow):
    def __init__(self):
        super(secondwindow,self).__init__()
        self.initUi()
        self.show()

    def initUi(self):
        self.setupUi(self)

    def btn_second_to_main(self):
  • 각 화면에 대해서 불러오는 form을 생성 해두고 버튼버튼을 눌렀을 때 기존 화면을 지우고 두번째 인터페이스를 띄우는 형식으로 구현

2. HW 프레임 스케치

  • 04-01 정기미팅을 통해서 HW 프레임 방향성 변경
    • 기존의 하드웨어의 필요성을 못느낌 → 완전한 수납형(최대한 간단하게)으로 변경
    • 기존처럼 일자형으로 배치하기에는 마이크와 스피커가 큰 탓에 어수선해 보임
    • 사용자가 책상에 앉아서 제품을 쓰고있다는 가정하에 마이크를 아래쪽에 배치하여 입과 가깝도록 해 최대한 마이크와 가깝게 셋팅하고 사용자가 터치스크린을 정면으로 편하게 바라볼 수 있도록 위쪽으로 배치함

  • 부품 작동 체크
    • LCD 터치스크린 (이상 없음)
      • FPC 케이블 연결하는 포트가 헐렁해서 자주 빠지는 현상이 발생함
    • USB 콘덴서 마이크 (이상 없음)
    • 2채널 멀티 스피커
      • 3.5mm잭과 USB잭이 동시에 존재하는데 이 2개를 전부 연결해야 스피커가 작동함
      • 라즈베리파이에는 3.5mm잭 연결하는 곳이 없어, 현재 사용 불가
    • 아날로그 사운드센서
      • 점퍼 케이블 3개가 별도로 필요해서 작동 확인을 하지 못함

3. ICA 알고리즘 사용 여부 → 사용 불가

사용자가 녹음한 목소리와 주변 배경 잡음을 구분하기 위해선 ICA 알고리즘뿐만이 아니라 해당 음들을 하나하나 구분하도록 학습이 되어야 한다. 그러나 이를 딥러닝으로 하나하나 학습시키기엔 너무 오래 걸리고 사람마다 성별과 목소리의 특징 등이 전부 다르기 때문에 ICA를 통해 잡음을 제거하는 것은 어려울 것으로 보인다.

즉 사용자가 녹음한 하나의 음성 .wav파일에서 잡음을 제거하기 위해선 딥러닝을 통해 잡음과 목소리를 구분하도록 오래 학습을 시켜야 할 것으로 예상된다. 아래 관련 자료와 논문을 보면 잡음(or 배경음)과 사람의 목소리를 구분시키기 위해 미리 학습을 시켰다고 나와있다.

관련 자료

위 엔비디아(NVIDIA) 블로그의 잡음제거 관련 글을 보면 현재 실시간으로 녹음하는 사람의 목소리에서 잡음을 제거하는 알고리즘은 존재하지 않는다고 나온다.

위 연구글의 가장 접근성이 높은 잡음 제거 3단계를 보면 다음과 같다. 지금까지 나온 방법으로는 잡음과 깨끗한 음성을 섞어 이를 여러 개 만들어 데이터셋을 생성하고, DNN을 통해 출력값으로 잡음이 제거된 음성이 나오도록 한다. 그리고 이러한 딥러닝을 이용하여 말을 할 때마다 잡음을 제거해주는 마이크를 제작한다.

*출처 : [Real-Time Noise Suppression Using Deep Learning NVIDIA Technical Blog](https://developer.nvidia.com/blog/nvidia-real-time-noise-suppression-deep-learning/)*

이 논문은 “Geguntangan”이라는 발리 음악에서 각 악기별 소리를 ICA를 통해 구분하는 것을 실험하였는데, 알고리즘을 실행하기 전에 미리 40여가지의 악기들을 하나하나 들려주며 소리를 구분하도록 학습을 시켰다. 또한 남자와 여자 목소리를 구분할 수 있도록 여러 보컬 데이터도 수집하는 식으로 배경음악과 보컬을 구분하도록 연구하였다.

*출처 : [Fast Independent Component Analysis (FastICA) in Separating Vocals and Instruments in the Art of Geguntangan Semantic Scholar](https://www.semanticscholar.org/paper/Fast-Independent-Component-Analysis-%28FastICA%29-in-in-Putra-Gede/d920162e1820844d12823c5bf187adf0d55b46f4)*

카테고리:

업데이트: