오늘은 어제와 비슷하게 간단하게 모델테스트를 진행했다
yolo 학습모델로 50 에폭을 잡고 돌렸을때 하나씩 인식 못하는것에 비해

필터를 넣고 ocr을 인식하게 해주니까 전부 다 읽긴한다 근데 정확도가 살짝 떨어지는지 yolo 쪽에서 문제가 있는지는 모르겠는데 가끔씩 글자를 인식 못하는게 있어서 그부분을 조금 더 수정해야할거같다

graph TD User[팀원 User] -->|main.py 실행| Start(프로그램 시작);
subgraph "Local PC - Project Folder"
Start --> Init[경로 설정 및 데이터 변환];
Init --> Scan[models 폴더 스캔];
Scan -->|best_YYYYMMDD_HHMM.pt 검색| Sort{날짜순 정렬 및 최신 파일 확인};
%% 분기 1: 모델 자체가 없을 때
Sort -- "파일 없음 Null" --> TrainNew[메인 러닝 Main Learning];
TrainNew -->|yolov8n.pt 로드| T1[전체 데이터 학습 Epoch 50];
%% 분기 2: 최신 모델이 있을 때 -> 데이터 개수 확인
Sort -- "최신 파일 선택" --> CheckData{데이터 개수 변동 확인};
CheckData -- "데이터 증가" --> FineTune[파인 튜닝 Fine-tuning];
FineTune -->|선택된 최신 모델 로드| T2[추가 데이터 학습 Epoch 20];
CheckData -- "변동 없음" --> Skip[학습 생략 Skip];
%% 저장 단계 (핵심: 새 이름 생성)
T1 --> NameGen[새 이름 생성: best_오늘날짜_시간.pt];
T2 --> NameGen;
NameGen --> Save[새 파일로 저장 Accumulate];
%% 추론 단계로 합류
Save --> Ready[추론 준비 완료];
Skip -->|선택된 최신 모델 로드| Ready;
end
%% 실제 동작 (Inference)
subgraph "Inference and OCR Pipeline"
Ready --> Detect[YOLOv8 객체 탐지];
Detect -->|Box 좌표| Crop[이미지 자르기 ROI];
Crop -->|자른 이미지| OCR[OCR 글자 인식];
OCR --> Result[최종 결과: 알약 이름 + 성분];
end
1단계: 탐색 및 선택 (Initialization & Scan) 동작: 프로그램이 시작되면 models 폴더를 스캔합니다.
핵심 로직: best_*.pt 패턴을 가진 모든 파일을 찾은 뒤, 파일명에 적힌 날짜와 시간을 기준으로 정렬합니다. 가장 마지막(최신) 파일이 선택됩니다.
효과: 팀원들이 각자 만든 모델 파일이 뒤섞여 있어도, 시스템은 항상 가장 최근에 만들어진 '최고 존엄' 모델을 스스로 찾아냅니다.
2단계: 상황 판단 (Decision Making) 시스템은 현재 상태를 분석하여 다음 세 가지 경로 중 하나를 선택합니다.
메인 러닝 (Main Learning): 모델 파일이 아예 없을 때입니다. 기본 모델(yolov8n.pt)을 불러와 바닥부터 학습합니다. (기초 공사)
파인 튜닝 (Fine-tuning): 최신 모델은 있지만, 데이터가 지난번보다 늘어났을 때입니다. 최신 모델을 불러와 늘어난 데이터만큼만 추가로 학습합니다. (지식 업데이트)
학습 생략 (Skip): 최신 모델도 있고, 데이터 개수도 그대로일 때입니다. 불필요한 학습을 건너뛰고 즉시 사용 모드로 전환합니다. (시간 절약)
3단계: 누적 저장 (Accumulation) 기존 방식: best.pt 파일 하나에 계속 덮어쓰기를 했습니다. (과거 데이터 소실 위험)
현재 방식: 학습이 끝날 때마다 현재 시간을 이름에 붙여 새로운 파일로 저장합니다.
예: best_20240520_1400.pt
장점: 혹시 새로 학습한 모델 성능이 떨어지면, 해당 파일만 삭제하면 됩니다. 그러면 시스템은 자동으로 '그다음으로 최신인 파일'인 어제 버전을 로드하여 정상 작동합니다.