본문 바로가기

Project/졸업프로젝트

잠자고 있는 외화를 깨우다, P2P 환전 플랫폼 '커렉스'

 

안녕하세요! 오늘 소개할 프로젝트는 제 이화여자대학교 캡스톤 졸업프로젝트인 P2P 환전 플랫폼

 ‘커렉스(Currex)’

입니다. 

 


프로젝트를 시작하게 된 계기

해외여행이나 출장을 다녀오면 항상 애매하게 남아있는 동전과 지폐, 다들 경험해보셨을 거예요. 처음엔 이걸 다시 환전해야지 생각하지만, 환전소를 찾는 것도 번거롭고, 특히 외국 동전은 국내에서 환전해주는 곳이 거의 없다 보니 자연스레 서랍 속에 묵혀두게 되죠.

 

저희도 이러한 경험이 많아 설문조사를 진행해봤습니다. 설문 결과, 응답자의 절반 이상이 해외에서 남은 외화를 환전하지 않는다고 답했으며, 특히 동전은 처리할 방법이 없어서 집에 쌓아둔다는 답변이 대부분이었어요. 실제로 서울관광재단의 자료에 따르면, 국내 가정에 잠들어 있는 외화 동전만 무려 4,775억 원에 달한다고 합니다.

 

이런 문제를 해결하고 싶었습니다. 환전소를 직접 방문하지 않아도 집에서 간편하게 화폐를 처리할 수 있는 방법은 없을까? 저희는 이러한 아이디어에서 시작해 '커렉스'를 구상하게 되었습니다.

 


‘커렉스’란?

‘커렉스’는 통화를 뜻하는 Currency와 환전을 뜻하는 Exchange를 합친 이름으로, 카메라 인식 기술과 거리 기반 매칭을 활용해 집에서 잠자고 있는 외화를 간편하게 환전할 수 있는 P2P 환전 플랫폼입니다.

주요 기능은 크게 두 가지입니다.

1️⃣ 카메라 인식 및 실시간 환율 제공

  • 사용자가 스마트폰 카메라로 화폐를 촬영하면, AI가 자동으로 어느 나라 화폐인지 인식하고 실시간 환율을 기반으로 원화 가치를 보여줍니다.

2️⃣ 근거리 기반 P2P 환전 매칭

  • 판매자는 보유한 외화의 종류와 금액, 거래 희망 장소를 입력해 판매를 등록합니다.
  • 구매자는 필요한 외화의 국가와 금액을 입력하면, AI가 근거리 판매자를 추천합니다.
  • 채팅을 통해 서로 소통하며 거래를 진행할 수 있어, 간편하고 안전한 환전이 가능합니다.

왜 필요한 서비스인가?

  1. 외국 동전 환전의 어려움
    • 국내 환전소에서는 외국 동전을 거의 취급하지 않습니다.
    • 설령 환전이 가능해도, 수수료가 높고 액면가의 절반 정도만 돌려받을 수 있는 경우가 많습니다.
  2. 잔돈 처리의 번거로움
    • 출장을 다녀온 직장인, 여행에서 돌아온 일반인 모두 소액의 외화를 처리하기 어려워 집에 쌓아두는 경우가 많습니다.
  3. 소액 외화의 가치 극대화
    • '커렉스'는 집에서 잠자고 있는 외화를 실시간 환율로 원화로 바꿔주거나, 필요한 사람과 거래할 수 있는 방법을 제공합니다.

저희 '커렉스'는 이렇게 시작된 아이디어로부터 발전해왔습니다.

이제 카메라 인식과 실시간 환율 계산 시연을 통해, 실제로 이 기술이 어떻게 구현되는지 일부를 보여드리겠습니다.

카메라만 비추면  외화를 간편하게 계산할 수 있는, '커렉스'와 함께하세요! 😊 😊 😊 😊 😊 😊

 

 


 

UI 카메라 인식 화면 디자인

 

해결해야 할 문제와 사고 과정

"어떻게 하면 동전의 국가와 금액을 정확하게 탐지하고, 실시간 환율 정보를 사용자에게 제공할 수 있을까?"

사고 과정에서 세가지로 나누어서 기술 구현을 시작했습니다. 
  1. 동전 국가 탐지: Kaggle의 MobileNetV2 모델을 활용하여 동전이 어느 나라의 것인지 탐지
  2. 금액 탐지: Google Cloud Vision API를 활용하여 숫자 텍스트를 추출
  3. 실시간 환율 계산: Open Exchange Rates API를 통해 실시간 환율을 가져와 원화로 변환.

 


 

1. 국가를 판별하는 동전 인식 모델을 찾아라

먼저 동전을 인식하는 AI 모델을 찾기 위해 Kaggle과 깃허브 등 타사이트들을 뒤졌습니다. 다행히도, MobileNetV2 기반의 동전 인식 모델을 발견했는데, 이 모델은 동전의 국가를 판별하는 데 최적화되어 있었습니다.

 

MobileNet V2 : Coin Currency Identification

 

MobileNet V2 : Coin Currency Identification

Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources

www.kaggle.com

 

하지만 이 모델로는 동전의 금액을 탐지할 수 없었기에, "그럼 금액은 따로 처리해보자"는 결론에 도달했습니다.

비교적 쉬운 텍스트 인식 기술을 활용하면 숫자(금액)를 추출할 수 있겠다고 판단했고, Google Cloud Vision API를 이용해 이를 해결하고자 했습니다.

 

2. 환경 설정: 필요한 도구 설치

본격적으로 작업에 들어가기 위해 환경을 설정했습니다. Kaggle API를 통해 모델 데이터를 가져오고, Google Cloud Vision API를 활용하기 위해 라이브러리를 설치했습니다.

 

# 필요한 라이브러리 설치
!pip install lobe[all]
!pip install google-cloud-vision opencv-python

# Kaggle API 설정
from google.colab import files
import os

if not os.path.exists("~/.kaggle"):
    uploaded = files.upload()  # kaggle.json 업로드
    kaggle_json_path = "kaggle.json"
    if kaggle_json_path in uploaded:
        os.makedirs("~/.kaggle", exist_ok=True)
        !cp kaggle.json ~/.kaggle/
        !chmod 600 ~/.kaggle/kaggle.json
        print("Kaggle API 설정 완료!")
    else:
        print("kaggle.json 파일을 업로드하세요.")

 

 

3. Kaggle 모델 로드 및 국가 인식

Kaggle에서 다운로드한 MobileNetV2 기반 모델은 동전의 이미지에서 화폐의 국가를 판별합니다. 이를 로드하기 위해 Lobe 라이브러리를 사용했습니다. 

 

from lobe import ImageModel

# Kaggle 모델 다운로드 및 로드
model_path = "/content/coin_dataset/trainTensorFlow/trainTensorFlow/"
if os.path.exists(model_path):
    model = ImageModel.load(model_path)
    print("모델 로드 완료!")
else:
    print(f"모델 경로가 존재하지 않습니다: {model_path}")

 

모델이 로드되면 업로드된 동전 이미지가 일본 엔화인지, 중국 위안화인지, 미국 달러인지 등을 탐지할 수 있습니다.

 

 

4. 금액 탐지: Google Vision API로 텍스트 추출

동전의 나라를 모델로 탐지했다면 금액을 탐지하는 것은 비교적 쉬운 작업입니다.

사실 지폐 탐지는 이미지에서 텍스트를 추출하는 기술만으로도 나라와 금액을 모두 인식할 수 있습니다. 하지만 동전은 상황이 다릅니다. 지폐는 직사각형 형태로 규격화되어 있어 이미지 내 특정 영역에 텍스트가 일관되게 위치하는 반면, 동전은 크기, 디자인, 텍스트의 위치와 형태가 국가별로 크게 다르기 때문입니다.

예를 들어, 동전의 금액이 숫자로 적혀 있다 하더라도 그림이 너무 난해하여 탐지가 어렵거나 배경과 구분이 어려울 수 있습니다. 

 

from google.cloud import vision
import re

# Vision API 클라이언트 생성
client = vision.ImageAnnotatorClient()

# 이미지에서 텍스트 탐지
with open(uploaded_file_path, 'rb') as image_file:
    content = image_file.read()
    image = vision.Image(content=content)

response = client.text_detection(image=image)
texts = response.text_annotations

# 숫자 필터링
numbers = [text.description for text in texts if re.fullmatch(r"\d+", text.description)]
print("추출된 숫자:", numbers)

 

 

5. 실시간 환율 변환: Open Exchange Rates API 활용

화폐의 가치를 사용자에게 전달하기 위해 실시간 환율 정보를 가져왔습니다. Open Exchange Rates API를 활용해 해당 국가 화폐를 원화로 변환했죠.

 

import requests

# Open Exchange Rates API 정보
app_id = "148f4e30628b419b9a6e30ea560c87b1"
base_url = f"https://openexchangerates.org/api/latest.json?app_id={app_id}"

# API 호출
response = requests.get(base_url)

# 환율 정보 매핑
exchange_rates = {}
if response.status_code == 200:
    data = response.json()
    usd_to_krw = data['rates']['KRW']

    for currency_code, currency in currency_mapping.items():
        if currency['code'] in data['rates']:
            exchange_rates[currency['code']] = usd_to_krw / data['rates'][currency['code']]
else:
    print("환율 정보를 가져오지 못했습니다.")

 

이 코드를 통해 각 국가 화폐의 금액을 원화로 변환할 수 있습니다.

 

6. 최종 결과: 국가, 금액, 원화 가치 출력

마지막으로 모든 정보를 종합하여 사용자가 입력한 동전 이미지에 대해 국가, 금액, 그리고 원화 환산 가치를 출력했습니다.

 

if prediction_result and prediction_result.prediction in currency_mapping:
    currency_info = currency_mapping[prediction_result.prediction]
    print("\n===== 결과 =====")
    print(f"화폐의 국가: {currency_info['country']}")
    print(f"화폐 이름: {currency_info['name']}")
    if numbers:
        amount = int(numbers[0])
        print(f"금액: {amount} {currency_info['name']}")

        if currency_info['code'] in exchange_rates:
            krw_value = amount * exchange_rates[currency_info['code']]
            print(f"현재 원화 가치: {krw_value:.2f}원")
        else:
            print("환율 정보를 가져올 수 없습니다.")

 

 

 

 

 

카메라로 찍은 외화

 

코랩에 출력되는 화면

 


 

전체 코드를 확인하실 수 있도록 Google Colab 파일을 첨부하였습니다. 파일에는 프로젝트의 모든 코드와 실행 과정이 포함되어 있으니 참고 부탁드립니다.

찐최종_졸프동전환전.ipynb
0.31MB

 

 


 

한 학기 졸업프로젝트의 절반을 마치며...

 

주제 선정부터 기획, 디자인, 기술 시연, 발표까지 한 학기 동안 정말 많은 것을 해내며 힘든 순간도 있었지만, 팀원들과 함께 웃으며 열심히 성장할 수 있었던 시간이었습니다. 다음 학기에는 본격적으로 실제 개발에 돌입하게 되는데, 이번 경험을 바탕으로 한 단계 더 성장할 수 있기를 기대합니다.

 

이번 기술 시연에서는 이미 존재하는 기술들을 어떻게 효율적으로 조합할 수 있을지 깊이 고민해보는 과정이었습니다. Kaggle에서 찾은 MobileNetV2 모델, Google Cloud Vision API, 그리고 Open Exchange Rates API를 활용해 동전의 국가와 금액을 탐지하고, 실시간 환율을 적용해 원화 가치를 제공하는 시스템을 완성할 수 있었습니다.

여러분도 직접 동전 인식 시스템을 만들어보고 싶다면, 이 튜토리얼을 참고해 도전해보세요! 🎉

 

감사합니다.