블로그

Go Hard

[기술 아티클] Streamlit과 Librosa로 구축하는 AI 음성 주파수 적발 시스템

안녕하세요, 인프런 수강생 및 개발자 여러분.딥페이크 음성 및 AI 목소리 생성 기술이 보편화됨에 따라, 이를 판별하기 위한 기술적 접근법에 대한 관심이 높아지고 있습니다. AI가 만든 오디오 데이터는 음성 인코딩 및 학습 모델 특성상 특정 고주파 대역이 잘려 나가는 상한 제한(High-Frequency Cut-off) 패턴을 보입니다.본 글에서는 파이썬 오디오 처리 모듈인 Librosa와 Streamlit 대시보드를 연동하여 이를 시각적으로 판별하는 애플리케이션 구축 사례를 공유하고, 음성 데이터 처리 시 발생하기 쉬운 웹 서버 블로킹, 메모리 누수 대처 방안을 정리합니다.1. 실전 시스템 백엔드 핵심 코드가독성을 위해 핵심 흐름만 요약했으며, 전체 예외 처리 및 상세 코드는 깃허브를 참고해 주세요.Pythonimport os import tempfile import threading import numpy as np import matplotlib.pyplot as plt import librosa import librosa.display import streamlit as st # 외부 연동 및 트래킹 백그라운드 처리 함수 def track_usage_async(app_name, action, details=None): try: # 데이터베이스 통신 수행 pass except Exception: pass # 메인 스레드 영향 차단 예외 우회 def analyze_voice_spectrum(human_audio_file, ai_audio_file): # 재실행 안정성: 파일 커서 위치 초기화 human_audio_file.seek(0) ai_audio_file.seek(0) # 물리 임시 파일 생성을 통한 디코딩 데드락 예방 human_ext = os.path.splitext(human_audio_file.name)[1] or ".mp3" ai_ext = os.path.splitext(ai_audio_file.name)[1] or ".mp3" with tempfile.NamedTemporaryFile(delete=False, suffix=human_ext) as tmp_human: tmp_human.write(human_audio_file.getvalue()) human_temp_path = tmp_human.name with tempfile.NamedTemporaryFile(delete=False, suffix=ai_ext) as tmp_ai: tmp_ai.write(ai_audio_file.getvalue()) ai_temp_path = tmp_ai.name fig, axes = plt.subplots(1, 2, figsize=(14, 5)) try: y_human, sr_human = librosa.load(human_temp_path, sr=None) y_ai, sr_ai = librosa.load(ai_temp_path, sr=None) # 푸리에 변환 및 dB 변환 db_human = librosa.amplitude_to_db(np.abs(librosa.stft(y_human)), ref=np.max) db_ai = librosa.amplitude_to_db(np.abs(librosa.stft(y_ai)), ref=np.max) # 서브플롯 렌더링 librosa.display.specshow(db_human, sr=sr_human, x_axis='time', y_axis='hz', ax=axes[0]) axes[0].set_title('Real Human Voice') librosa.display.specshow(db_ai, sr=sr_ai, x_axis='time', y_axis='hz', ax=axes[1]) axes[1].set_title('AI Voice (High-Frequency Cut-off)') st.pyplot(fig) finally: # 메모리 누수 방지: 자원 해제 및 임시 파일 삭제 plt.close(fig) if os.path.exists(human_temp_path): os.remove(human_temp_path) if os.path.exists(ai_temp_path): os.remove(ai_temp_path) 2. 음성 데이터 처리 시 실무 고려 메커니즘메인 UI 스레드 블로킹 방지 외부 데이터베이스 통신이나 통계 적재 로직을 분석 버튼 핸들러 내부에서 동기 방식으로 처리할 경우, 렌더링 스레드가 멈추는 지연 현상이 발생합니다. 이를 방지하기 위해 threading.Thread(..., daemon=True) 구조로 백그라운드 스레드로 격리하여 네트워크 통신 실패 시에도 분석 화면이 멈추지 않도록 구성해야 합니다.서버 자원 해제 (Resource Cleanup) Matplotlib 시각화 그래프 객체 및 디스크 물리 파일은 누적될 경우 서버 RAM을 지속적으로 오염시킵니다. 전체 처리 로직을 try-finally로 감싸 연산 성공 여부와 관계없이 plt.close(fig) 및 os.remove()가 강제 구동되도록 제어해야 합니다.3. 소스코드 및 구현 시연 안내해당 알고리즘 및 웹 대시보드가 실제 구동되는 꿀잼 시연 영상은 유튜브 콘텐츠를 참고해 주세요.🎬 유튜브 시연 영상: https://youtu.be/cThE0wH4EAY/📦 GitHub 소스코드: https://github.com/gohard-lab/voice_frequency_analyzer🚀 웹 앱 직접 실행해보기: https://voicefrequencyanalyzer-67zfryfptjxwdjofkymjyw.streamlit.app/📺 워드프레스: https://gohard.pe.kr/📺 잡학다식 개발자 유튜브 채널: https://www.youtube.com/@PolymathDev_KR

AI 실무 활용파이썬OpenCVTkinter이미지복원인페인팅메모리최적화이미지처리

Go Hard

[Python] 단 50줄로 구현하는 테슬라 비전과 팬텀 브레이킹의 한계

안녕하세요. 일상의 호기심을 파이썬으로 풀어보는 개발자입니다.  2021년 테슬라가 라이다와 레이더를 버리고 카메라 기반의 'Occupancy Networks'로 전환한 후 발생한 엣지 케이스(팬텀 브레이킹)를, 기초적인 컴퓨터 비전 코드로 시뮬레이션하며 그 한계를 짚어보았습니다.단순한 Haar Cascade 모델을 사용하여 블랙박스 영상 속 차량을 인식하는 기초적인 스크립트입니다. Python# tesla_vision_simulator.py import cv2 def run_vision_simulator(video_path: str, cascade_path: str) -> None: """블랙박스 영상을 통해 기초적인 차량 인식 비전 시뮬레이터를 구동합니다.""" cap = cv2.VideoCapture(video_path) car_cascade = cv2.CascadeClassifier(cascade_path) while cap.isOpened(): ret, frame = cap.read() if not ret: break # CPU 연산 병목 해결을 위한 해상도 축소 resized_frame = cv2.resize(frame, (640, 360)) gray_frame = cv2.cvtColor(resized_frame, cv2.COLOR_BGR2GRAY) # 객체 탐지 및 바운딩 박스 처리 cars = car_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=3) for (x, y, w, h) in cars: cv2.rectangle(resized_frame, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.imshow('Tesla Vision Simulator (Basic)', resized_frame) if cv2.waitKey(30) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() if __name__ == "__main__": run_vision_simulator('dashcam_footage.mp4', 'haarcascade_car.xml')  비록 구형 알고리즘이지만, 이 코드를 돌려보면 명암 변화나 짙은 그림자를 장애물로 오인하는 오탐지(False Positive) 현상을 명확히 관찰할 수 있습니다. 레이더라는 크로스체크 수단이 사라진 순수 비전(Vision Only) 모델이 현실의 가혹한 도로 환경에서 어떻게 무너지는지 확인할 수 있는 대목입니다. 요즘 파이썬 생태계 표준에 맞추어, 구형 requirements.txt 대신 pyproject.toml을 적용하여 프로젝트 의존성을 구성해 두었습니다. 자세한 시뮬레이터 구동 과정과 Tesla Vision 기술에 대한 해설은 아래 유튜브 콘텐츠에 담아두었습니다. 여러분의 블랙박스 영상으로도 직접 테스트해 보시길 권장합니다. [▶ 시뮬레이터 구동 및 기술 해설 영상]: https://youtu.be/xWrnxjh1GnY 

AI 코딩PythonOpenCV자율주행컴퓨터비전데이터분석pyproject

채널톡 아이콘