제 14 장

이미지·음성·영상 입력

문서 쪽이 어느 정도 자리를 잡을 무렵 현장 직원에게서 요청이 왔다. 게시판에 붙은 안내문을 사진으로 찍어 올리고 말로 물어보게 해 달라는 것이었다. 장갑을 낀 손으로는 휴대폰 자판을 누를 수가 없어서, 궁금한 것이 생겨도 사무실에 돌아올 때까지 미뤄 두고 있다고 했다.

그러면 텍스트 질의응답 앞에 해석 단계가 둘 더 붙는다. 사진에서 문장을 읽어야 하고 음성을 질문으로 바꿔야 한다. 최종 답이 틀렸을 때 검색이나 언어 모델만 보면 앞 단계에서 이미 바뀐 숫자와 고유명사를 놓친다. 개발팀은 가상 교육비 문서를 이미지로 만들어 OCR로 읽어 보고, 같은 주제의 질문을 합성 음성으로 만들어 로컬 음성 인식 모델에 넘겨 봤다. 영상과 이미지 생성은 이번에 봇에 붙이지 않았다.

변환 단계의 자리

변환 단계가 붙는 자리 · 굵은 칸은 사람의 확인문서 입력정책 이미지OCR원문 대조 · 메타데이터색인질문 입력음성 질문전사사용자 확인검색 · 답변답변 출력답변 텍스트내용 확정음성 합성재생인식 결과가 자연스러운 문장이어도 검토 전 자료다. 정책이나 업무 승인으로 승격하지 않는다이미지 속 “이전 규칙을 무시하라”는 외부 자료다. 어떤 인코더를 지났는지가 지시 권한을 정하지 않는다

멀티모달(multimodal)은 여러 종류의 입력이나 출력을 함께 다룬다는 뜻이다. 이미지 입력이 되는 모델이 음성도 받는다고 볼 수 없다. 음성을 받더라도 전사·번역·화자 구분·음성 응답을 하나씩 따로 확인한다. 모델과 API를 고를 때 작업별 지원 여부, 입력 한도, 응답 형식, 시간 정보 제공 여부를 각각 본다.

텍스트로 바꾼 뒤 기존 파이프라인에 붙이는 방식은 중간 결과를 검사하기 쉽다. OCR 텍스트와 음성 전사를 화면에 보여 주면 사용자가 오류를 고칠 수 있다. 대신 표의 배치, 그림의 관계, 말투 같은 정보는 텍스트로 옮기면서 사라진다. 원본 매체를 직접 이해하는 모델이라면 그 정보까지 쓸 수 있지만 그러려면 개발팀이 결과를 검증할 기준과 매체별 비용을 따로 마련해야 한다. 개발팀은 첫 구현에서 변환 단계를 그대로 드러내 뒀다. 이미지에서 뽑은 텍스트는 검토 전 자료고 음성 전사는 아직 확인하지 않은 질문이다.

OCR

OCR은 문자 모양을 텍스트로 바꾼다. Tesseract는 공개 인식 도구로 텍스트 외에 TSV·hOCR 출력도 지원하고, 한국어 인식에는 한국어 학습 데이터가 필요하다. 인식 품질은 해상도, 기울기, 배경, 글자 크기에 따라 달라진다. 개발팀은 흰 배경에 두 문장을 그린 1,400×280 이미지를 만들어 Tesseract에 넣었다. 문장은 “교육비는 분기당 30만 원이다”와 “수강 전에 팀장의 승인을 받아야 한다”다. Tesseract 공식 저장소

외부 인식 도구를 부를 때는 인자를 목록으로 넘긴다. 파일 이름을 문자열 명령에 끼워 셸로 실행하지 않는다. 페이지 분할 모드 6은 이 표본이 일정한 텍스트 블록 하나라서 고른 값이고, 다단 문서나 표에는 읽기 순서를 바꾸는 레이아웃 오류까지 봐야 한다. 문서 질의에 쓸 때는 추출 텍스트에 원본 문서 ID, 페이지, 인식 도구 버전, 검토 상태를 더해 다섯 가지를 저장한다. 좌표가 있는 출력이면 인용에서 원본 영역으로 되돌아갈 수 있지만, 글자만 뽑아낸 일반 텍스트로는 좌표도 표의 셀 관계도 복원하지 못한다. 정책으로 색인하기 전에 사람이 원본과 대조한다.

“오른쪽 열의 승인자는 누구인가”처럼 배치를 봐야 답이 나오는 질문에는 OCR을 건너뛰고 시각 언어 모델에 이미지를 그대로 넘기기도 한다. 비교할 때는 같은 이미지를 주고 정답 문구뿐 아니라 정답이 있는 영역도 적는다. OCR 텍스트에 없는 관계를 텍스트 모델이 추측한 결과와 원본 이미지에서 확인한 결과를 섞어 채점하지 않는다.

음성 인식과 합성

자동 음성 인식(ASR)은 소리에서 텍스트를, 음성 합성(TTS)은 텍스트에서 소리를 만든다. 인식은 “교육비”를 다른 단어로 바꾸고 합성은 문자가 정확해도 숫자·약어를 부자연스럽게 읽는다. Whisper는 음성 인식과 번역을 하는 인코더·디코더 모델이고, 개발팀은 다국어 whisper-tiny를 고정 리비전으로 불러 한국어 전사를 지정했다. 오래된 예제의 설정을 현재 라이브러리에 그대로 옮기지 않고 모델 카드와 설치된 Transformers 문서를 함께 본다. Whisper 공식 저장소, Transformers Whisper 문서

오디오는 먼저 모노, 16kHz, 16비트 PCM WAV로 바꾼다. 모델에 넘기는 숫자 배열과 표본 주파수가 실제 파일과 같아야 하고, 주파수 값만 바꿔 적는 것은 재표본화가 아니다. 변환한 뒤에는 채널·샘플 폭·주파수를 다시 확인한다. 이번에는 30초 이하의 짧은 입력만 받았다. 긴 녹음의 구간 분할, 화자 중첩 처리, 스트리밍 중간 결과, 무음 탐지는 따로 만들어야 한다. 중간 전사를 확정 질문으로 처리하면 사용자가 문장을 끝내기도 전에 봇이 다음 일을 시작한다. 합성 음성은 macOS의 Yuna 음성으로 만들었다. 운영체제에 설치된 음성이 읽은 가상 질문이라 실제 사용자의 억양·소음·거리·발화 중단을 대표하지 못한다. FFmpeg 공식 명령 문서

실제 변환 결과

한 차례 실행 · 단계별 벽시계 시간OCR · Tesseract1,400×280 문서 이미지→ 두 문장 그대로0.111초✓CER 0음성 합성 · macOS Yuna“교육비 한도는 얼마인가요?”→ 1.749초 음성0.787초숫자·약어 읽기는 검토 대상음성 인식 · whisper-tiny합성 음성→ “주유기 한 돈인 얼마인가요?”0.217초✕CER 0.455깨끗한 합성 질문에서도 핵심 단어가 바뀌었다. 이 전사를 그대로 검색에 넣으면 실패의 출발점은 임베딩이 아니라 인식이다음성 모델 준비(다운로드 · 로드) 17.335초는 인식 시간과 분리했다 · experiments/media-local.json
문자 오류율 CER · 치환 5 / 정답 11자 = 0.455정답 (정규화)교육비한도는얼마인가요인식주치환유치환기치환한돈치환인치환얼마인가요CER = (치환 + 삭제 + 삽입) / 정답 문자 수. 비교 전에 NFC 정규화와 공백·문장부호 제거를 적용했다원문 표기까지 평가하는 CER과는 다른 값이다. 삽입이 많으면 1을 넘을 수도 있다

깨끗한 문서 이미지 한 장에서 CER이 0이어도 실제 스캔 문서에서는 글자가 깨진다. 게다가 짧고 깨끗한 합성 질문인데도 음성 인식은 업무의 핵심 단어를 통째로 다른 말로 바꿔 놓았다. 전사를 화면에 보여 주고 사용자가 고칠 경로가 있어야 한다. 인식이 틀린 자리도 원래 질문으로 고쳐 적지 않고 그대로 뒀다. 원본·전사·정답·모델 리비전과 시간은 함께 적어 뒀다. 개발팀은 OCR 텍스트와 음성 전사를 자동 승인해 운영 색인이나 티켓 실행에 붙이지 않았다.

영상

프레임을 뽑는 두 방식 · 10초 영상고정 간격 2초6초 표본 하나에 B·C(0.4초 차이)가 뭉개진다0s2s4s6s8s10s사건 A 2.1s사건 B 5.8s사건 C 6.2s장면 변화 기반사건마다 후보 프레임이 남는다답변의 시각을 채점하기 전에 후보 프레임에 사건이 있었는지부터 채점한다. 관찰 자료의 누락과 생성 오류를 나눈다시각은 프레임 번호 ÷ FPS가 아니라 매체의 타임스탬프로 잡는다. 가변 프레임률에서는 나눗셈이 틀린다

영상은 순서와 시간이 있는 프레임에 음성이 결합된 자료다. 일정 간격으로 이미지를 뽑으면 계산량은 줄지만 두 표본 사이의 짧은 사건이 빠진다. “마지막으로 버튼을 누른 시점”을 묻는 질문에 프레임 몇 장의 유사도만으로는 답할 수 없다. 더 나아가려면 직접 만든 짧은 화면 녹화에 세 사건의 정답 시각을 적고, 고정 간격 추출과 장면 변화 기반 추출을 비교한다. 각 프레임에는 원본 ID, 실제 표시 시각, 추출 설정을 함께 두고 오디오 구간과 프레임의 시간 기준을 맞춘다. 개발팀은 영상 추출·이해 모델을 아직 돌려 보지 않았다. 비교 실험을 어떻게 짤지까지만 적어 두고 다음으로 미뤘다.

이미지 생성과 채택 기준

설명용 그림에서는 요구한 요소가 다 들어갔는지, 요소끼리 관계가 맞는지, 글자를 읽을 수 있는지, 여러 번 만들어도 같게 나오는지를 본다. 생성 이미지에 그럴듯한 정책 문구가 있어도 실제 문서의 근거가 되지 못한다. 확산 기반 생성은 잡음에서 시작해 조건에 맞는 이미지를 단계적으로 만들고, Diffusers의 파이프라인은 텍스트 인코더·생성 모델·스케줄러를 모델에 맞게 묶는 대표적인 도구다. 모든 파이프라인에 같은 옵션이 있다고 볼 수 없다.

가상 사무실 안내 그림을 만들 때는 사람의 실제 사진이나 기밀 자료를 쓰지 말고, 무엇을 그려 달라고 했는지와 시드·모델·해상도·스텝·시간을 함께 적어 둔다. 같은 환경에서 다시 돌렸을 때 같은 그림이 나오는지와 장치를 바꿔도 픽셀까지 같은지는 따로 확인한다. OCR 표본은 코드로 글자를 찍어 만든 이미지라 몇 번을 다시 그려도 같은 그림이 나온다. 생성 모델이 만든 이미지로는 재 보지 않았다. Diffusers 파이프라인 문서

매체를 채택할 때는 전체 흐름의 오류와 지연을 합쳐 본다. OCR 뒤의 질의응답에는 문자 오류 외에 숫자·표 관계·인용 위치 오류가, 음성 질문에는 핵심 의도 보존과 확인에 걸린 시간이 있다. 빠른 인식기가 사용자에게 반복 수정을 요구하면 인식 시간만 짧다는 이유로 채택할 수 없다.

장갑을 낀 채로 묻고 싶다던 현장 직원의 요청은 인식기를 하나 붙이는 일로 끝나지 않았다. 개발팀은 사진에서 글자를 읽어 낸 다음에도 그 글자가 어느 문서의 어느 줄인지를 다시 찾아야 했다.

입력 매체와 신뢰의 확장14 / 21