1. 유즈케이스 다이어그램
https://app.diagrams.net/#Hrimgosu%2Fproject%2Fmaster%2Fdocument%2FER%20DIAGRAM.drawio
2. 도로명 주소 -> (x,y) 좌표 변환
- 처음엔 https://www.vworld.kr/dev/v4dv_geocoderguide2_s001.do 에서 geocoderapi를 이용하려고 했으나, 지번 주소는 (x,y)좌표로 변환 가능하나 도로명 주소는 제대로 안바뀌는 문제 발생
- 네이버 geocoder api 이용, 도로명 주소도 제대로 x,y좌료로 변환 가능 (10m 오차이내)
- python pandas, csv 라이브러리를 이용해 csv에 있는 주소 정보를 x,y좌표로 변환하여 저장
import pandas as pd
import numpy as np
import requests
import json
# Load the JSON file
with open('C:/keys.json', 'r') as f:
data = json.load(f)
# Extract the needed values
naverMapID = None
naverMapPassword = None
keys = data.get('keys')
for key in keys:
if 'naverMapID' in key:
naverMapID = key['naverMapID']
if 'naverMapPassword' in key:
naverMapPassword = key['naverMapPassword']
def get_coordinates(address):
url = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode"
headers = {
"X-NCP-APIGW-API-KEY-ID": naverMapID,
"X-NCP-APIGW-API-KEY": naverMapPassword
}
params = {"query": address}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
items = response.json()["addresses"]
if items:
x = items[0]["x"]
y = items[0]["y"]
return x, y
else:
return None, None
else:
raise Exception(f"Error occurred: {response.status_code}")
def add_coordinates_and_save(input_csv, output_csv):
# Load the CSV file
data = pd.read_csv(input_csv)
# Get coordinates for each address
coordinates = data['주소'].apply(get_coordinates)
data['y좌표'], data['x좌표'] = zip(*coordinates)
# Save the modified dataframe to a new CSV file
data.to_csv(output_csv, index=False)
print(f"Saved data to {output_csv}")
# Test the function
add_coordinates_and_save('./test02map/test.csv', './test02map/testresult.csv')
3. "지도"에 들어가는 기술
- https://apis.map.kakao.com/web/ 카카오 map api를 이용해 마커 hover와 click 조건 추가
- 현재 "접속"한 사용자의 위치정보 표시 : geolocation api 사용
<script src="//dapi.kakao.com/v2/maps/sdk.js?appkey=79769e254f2328cac41473351ff2b861"></script>
<script>
navigator.geolocation.getCurrentPosition(function(position) {
console.log("Latitude is :", position.coords.latitude);
console.log("Longitude is :", position.coords.longitude); }
</script>
4. ocr 기능 구현
- 원래 api 호출 비용이 없는 node.js의 Tesseract 라이브러리를 이용하려고 했으나, 찌그러진 글씨 및 한글 인식 성능이 안 좋아서 포기함.
- 네이버 clova ocr api를 이용하면 1회 호출 당 3원의 비용이 들지만, 찌그러진 글자 및 한글에 대한 정확한 api 호출이 가능.
다음은 영수증 이미지에 글씨 추출 결과이다.
다음 영수증에 대한 네이버 OCR API의 호출 결과는?
HTTP/1.1 200 OK
세계 1등 편의점 (주)코리아세븐 www7 eleven kr 세븐일레븐 문정수정점#18308 (02-400-6307) 2158544631 송파구 동남로 8길 12 (문정동) 현금(자진발급) 그 객 용 [판 매] 2020-06-09 (화) 20: 59: 47 상품명 수량 금 액 라라스윗)바닐라피인트474 행사 8809599360081 1 6,900 라라스윗)초코피인트474ml 행사 8809599360104 1 6,900 비닐봉투 보증금 20원 *1171798100209 1 20 과세물품가액 12,545 부 가 세 1,255 봉투보증금액 20 합계 ₩13,820 20
- gpt 3.5 turbo api 활용, 각 값을 주소, 총금액, 상호명에 맞춰 DB에 집어넣는 알고리즘 구현
prompt = ocrdao.callOcrApi();
prompt += "'주소 : ?"
+ "총금액 : ?"
+ "상호명 : ?'"
+ "물음표에 각각 값을 넣어 줘"
+ "그 외 다른 어떤 말도 덧붙이지마.";
gpt3DAO gptdao = new gpt3DAO(API_KEY, prompt);
- 문자열을 추출해 TB_OCR에 정보 담기
다음과 같이 테이블에 잘 들어가는 것을 볼 수 있다.
5. 리뷰페이지, 컬럼페이지 최적화 작업 (5.64초 -> 0.34초)
- for문에 의해 db가 연결 접속이 반복적으로 해제되는 문제로, 글 보여주는 게 다소 시간이 걸렸다.(5.64초)
- db 연결과 끊기를 반복문에서 빼내 성능 향상을 이루었다.(0.34초)
'수업정리' 카테고리의 다른 글
오라클 DB 외부 연결 (0) | 2023.08.01 |
---|