Closed chanmuzi closed 1 year ago
# 데이터 불러오기
import pandas as pd
import json
import os
from pprint import pprint
df = pd.read_csv('result_category.csv',encoding='UTF-8')
with open('/opt/ml/data/test/test_v1.0.json') as f:
tests = json.load(f)
tests = tests['data']
# 정답이 ocr result에 포함되어 있으면 'yes', 그렇지 않으면 'no'를 inanswer라는 list에 담기
inanswer = []
for i in range(len(df)):
qid = df.loc[i,'question_id'] # 각 행별로 처리
answer = df.loc[i,'answer'][1:-1].split(', ') # 작은 따옴표를 제외하고 정답만 뽑아 오기
for j in range(len(tests)): # test의 모든 결과를 확인
if tests[j]['questionId'] == qid: # question ID를 찾으면 break
test = tests[j]
break
ocr_path = 'data/test/ocr_results/' + test['image'][10:-3] + 'json' # OCR result 부러오기
with open(ocr_path) as f:
ocr_result = json.load(f)
ocr_result = ocr_result['recognitionResults'][0]['lines']
flag = False # flag가 False이면 들어 있지 않은 경우, True이면 들어 있는 경우
for ans in answer: # 정답 리스트의 각 정답에 대해 확인
for ocr in ocr_result:
if ans == ocr['text']: # 정답이 존재하는 경우 flag=True 후 break
flag = True
break
if flag == True:
inanswer.append('yes')
else: inanswer.append('no')
print(len(inanswer))
# inanswer를 concat하여 csv파일로 저장
inanswer = pd.Series(inanswer,name='inanswer') # series로 생성
df = pd.concat([df,inanswer],axis=1,ignore_index=True) # 그리고 concat
df = df.rename(columns={0:'question_id',1:'score',2:'question',3:'prediction',4:'answer',5:'category',7:'inanswer'}) # column명 변경
df.to_csv('result_category_inanswer.csv',index=False) # csv로 저장
위와 같은 방식으로 csv파일이 생성된 것을 확인할 수 있다. 이를 토대로 결과 분석을 진행할 예정이다.
배경
문제점
사례 1 (snbx0223_14.png)
question : What is the name of the company?
answers : [ITC Limited] -> 이것이 OCR result에 포함되어 있지 않음
prediction : itc -> 이것은 OCR result에 포함되어 있음
사례 2 (hyhk0037_6.png)
question : Name of the logo in the heading
answers : [B&W] -> OCR result에 포함되어 있지 않음
prediction : kool 100 -> OCR result에 포함되어 있음
접근 방법