일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코딩테스트
- 네이버
- 깃허브
- 백준
- 오블완
- 프로그래머스
- supabase
- 티스토리챌린지
- 릿코드
- 포트원
- 간편결제
- ETF
- OCR
- clova
- Node
- 카카오페이
- 웹훅
- it #응집도 #결합도 #소프트웨어
- OpenCV
- 정렬
- 데이터베이스 #백엔드 #데이터
- 결제취소
- Ai
- 토스페이
- 코딩
- sw
- 결제
- openai
- SQL
- certbot
- Today
- Total
싱싱미역상태
OCR 성능 향상을 위한 이미지 전처리 API 처리 시간 개선 여행 본문
문제
OCR 성능을 위해서 이미지를 전처리하는 API를 사용하는 것에 있어서 소요 시간이 많이 발생하고 있습니다.
따라서 추가적인 문제로 사용자들이 오래 기다리는 문제가 발생했습니다.
이미지 전처리, OCR, LLM을 많이 사용하고 있기 때문에 LLM 자체에서도 소요되는 시간이 상당히 많이 걸리고 있습니다.(LLM만 30 ~ 40초) 그리고 전처리와 OCR의 경우를 합치면 생각보다 10초에서 많은 경우는 15초에서 20초까지도 나왔던 적이 있었습니다.
그래서 LLM 자체에서는 프롬프트를 사용하고 이미지 또는 컨텍스트가 들어가서 조절할 수 없는 부분이라고 생각했고, 이미지 처리 시간을 줄여보기로 생각했습니다.
목표
현재 사진 2장을 기준으로 50번 테스트한 결과 평균적으로 2.5950초가 측정되었습니다. 사진 4장을 작업하는 경우, 전처리 API 한정 대략 5.1초 이상이 걸리는 것을 알 수 있습니다.
지금 당장은 해당 API 실행 시간을 절반으로 줄이는 것을 목표로 했습니다. 이유는 현재 작성된 코드를 보니 외부의 물리적 서버(SFTP)에 직접 접근을 2번을 열고 닫기 때문에 1번만 접근하는 것으로 해도 시간이 절반정도 줄어들 것이라고 예상했기 때문입니다.(한국인의 빨리빨리 문화)
해결과정
일단 외부 물리적 서버를 2번이 아닌 1번만 접근하는 것으로 변경을 하겠습니다. 회사 코드이기 때문에 따로 공개할 수는 없고, 전체적인 수도 코드로 작성을 해보겠습니다.
@app.post("/api/**/multi-process")
@measure_time
async def multi_**_process(file_paths: FilePath):
print("===== /api/**/multi-process 요청 =====")
# SFTP 연결 객체 생성
try:
for file_paths 돌기:
# 확장자 확인
# SFTP 서버에서 파일 가져오기 (한 번 연결을 유지한 상태로)
# 이미지 임시 저장
# 처리된 파일 SFTP에 업로드 (연결 유지)
finally:
# 작업이 끝난 후 SFTP 연결 닫기
return {
"status": 200,
"message": "OK",
"processed_files": 경로배열반환
}
시간 개선을 한 API를 50번 정도 테스트 한 결과 2개의 이미지 기준 평균 0.9723초라는 결과가 나왔습니다. 외부서버 접근을 2개에서 1번으로 줄였더니 기존 시간에서 62.53%의 실행 시간을 줄이게 됐습니다.
(추가, GPT 센세) 2번째 사진처럼 급격하게 실행시간이 줄어들은 경우는 해당 API를 사용하면서 프로그램 자체에서 자동으로 해당 API 호출에 관한 최적화를 진행하기 때문입니다.
- 캐싱 및 초기화 오버헤드 제거
- 첫 요청에서 데이터를 캐싱하거나 필요한 자원을 초기화(예: 데이터베이스 연결, 코드 컴파일)하는 데 시간이 걸리지만, 이후 요청에서는 이미 초기화된 자원을 재사용하므로 속도가 빨라집니다.
- 연결 재사용 (Connection Reuse)
- HTTP/HTTPS 요청에서 첫 연결 시 TCP/SSL 핸드셰이크 과정이 필요하지만, 이후 요청은 기존 연결을 유지(Keep-Alive)하거나 재사용하므로 처리 시간이 단축됩니다.
보완해야 할 부분
아직도 이미지 처리시간은 개인적으로 길다고 생각합니다. 우선 서버 접근하는 횟수를 줄였으니, 코드의 성능으로 처리하는 시간을 획기적으로 줄여봐야 할 것 같습니다.
'SW' 카테고리의 다른 글
supabase 가격 비교 (0) | 2025.03.20 |
---|---|
알고리즘 문제 목록 (0) | 2025.02.07 |
프로그래머스-H-Index (0) | 2024.12.01 |
프로그래머스SQL- 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2024.11.30 |
프로그래머스SQL-경기도에 위치한 식품창고 출력하기 (0) | 2024.11.30 |