ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구글 Cloud Vision 제품 검색 API 사용을 이용한 안경검색
    카테고리 없음 2020. 4. 30. 13:52

    현재 인턴에 참여하던중, 제품검색 API사용에 대한 업무가 주어져, 처음으로 외부 API를 사용하여 제품 유사도 값을 실험해보는 시간을 가졌다. 

    자사에서는 OCR(이미지의 텍스트 감지)기술을 개발하고 있으나, 텍스트 감지가 GF(Glass Finder) 기능을 제대로 구현하지 않을 때를 대비하여, 구글 Cloud Vision 제품검색 API를 사용해보고자 했다. 

     

    목표: 구글 Cloud API에서 제공하는 ‘제품 검색 기능’ 구현

    목차: 구글 Cloud 제품 검색 API 활용 3단계

             CH1. 구글 Cloud API 설정

             CH2. 데이터 세트 준비(입력데이터-구글 스토리지URL / 실험데이터-로컬URL)

             CH3. 제품 검색 API 사용

     

    Cloud Vision API 제품검색  

    사용자가 자신의 이미지로 제품 세트를 쿼리하면, 사용자의 쿼리에 있는 제품을 업체의 제품 세트에 있는 이미지와 비교한 다음 시각적 및 의미론적으로 유사한 결과의 순위 목록을 반환합니다.

    => 사용자의 이미지를 업체의 이미지와 비교하여, 유사한 이미지를 추출

     

     

     

     

    CH1. 구글 Cloud Vision API 환경 설정


    기본 세팅: Vision API 설정

    처음 할때, 굉장히 까다로울 수 있으나, 구글 가이드라인을 그대로 꼼꼼히 따라 가야한다.      

    1) 구글 Cloud 아이디생성 -> 결제(1년 무료) -> 서비스 계정 만들기 -> j.son 파일(고유한 식별자PW 값이라 보관 주의) 

    2) 윈도우 기반 환경설정) 하단 Window 우클릭후, '시스템'클릭 -> 시스템 정보 -> 고급 시스템 설정

                     -> 환경변수 -> GOOGLE_APPLICATION_CREDENTIALS 환경변수 만들고 j.son파일 가리키도록 설정 (참고)

    3) Google SDK 설치

    4) VISION API 라이브러리 설치  

     

    아래, 'the_bestJazz-Clubs_in_newYorkCit'파일 대신 이미지를 하나 지정하여, 코드를 돌려봤을때, 분석결과가 나오면, 구글 VISION API설정이 정상적으로 마무리된 것이다.  

    API 연결 확인 코드

     

     

     

    CH2. 데이터 세트 준비


    주의) 구글 API를 활용하기 위해서는 위의 VISION API 설정과정 선행 

     

    설정 작업이 마무리되면, 데이터를 준비해야한다. 실험차원에서 준비한 데이터는 안경 10종과 선글라스 10종에 대한 상세컷 각 4장(정면, 좌우, 측면)을 준비하였고 제품 이미지와 제품 모델명을 담은 제품 리스트 파일을 준비했다. 

    하나의 제품 세트를 만들고 하나하나 제품을 업로드 할 수 있지만, CSV파일 형태로 데이터를 한번에 일괄저장할 수 있다. CSV파일에 Google Cloud Storage URI를 지정하여, 특정 이미지와 유사한 제품을 찾을 수 있도록 만들 것이다. 

    CSV파일은 구글에서 지정한 몇가지 요소에 대한 정보를 가지고 있어야한다. image_url(클라우드 내 이미지 경로 ), product_id(제품식별자)가 주 요소이다.

     

    CSV파일을 만들 때, 사진 수가 많아지면, 이미지에 대한 경로를 일일이 확인하고 정보값을 집어 넣는 것이 번거롭기 때문에, 아래와 같은 코드 구성을 통해, CSV 메타 데이터를 형성할 수 있다. 

    CSV파일에 들어가야하는 핵심요소가 image_url에 대한 정보이다. 이때 gcs_url 정보는 gs://[버킷이름]/[이미지이름]으로 주소값을 가지기 때문에, 이미지파일 이름을 다음과 같이 변경하여 주소를 만들어준다. 

    또한, 이미지가 제품 파일별로 분리되어 있어, jpg파일을 담은 모든 파일 경로를 가져왔고 제품의 모델명의 경우, 제품리스트 파일에서 제품 모델을 가져온뒤, 이미지 이름에서 모델명이 발견될 경우, 해당 record의 product_id를 모델명으로 지정하는 방식으로 만들었다. 

    다음 label에 대한 정보이다. 제품 검색 API를 사용할때, 입력 매개변수중 하나가 filter인데, filter를 통해 한정된 제품 중에서만 유사도를 확인할 수 있다. 따라서, 안경과 선글라스를 구분해서 catergory에 대한 정보를 담았다. 확장해 나가면, 체인점별 제품리스트, 매대별 제품리스트로 한정지음으로써 유사 제품 검색도를 높일 수 있다.

    또한 구글에서는 bounding-poly라는 제품 경계상자에 대한 정보를 담을 수 있다. 경계상자를 치게 되면, 두 제품이 동시에 찍힌 사진에서 하나의 제품만 바라볼 수 있게 만듬으로써 모델의 정확도를 높일 수 있다. Face Detector가 얼굴에 대한 경계상자를 만들어준다면, 해당 기능은 특정 제품에 경계상자 정보를 제공할 수 있다.

    현재 좌측이미지는 이번 모델에 사용하는 이미지 데이터이다. 이미지의 경우, 라운즈 홈페이지 상세 컷이미지를 가져왔다. 해당 데이터의 경우, 흰 배경에서 단일 제품에 대한 사진이기 때문에, 경계상자를 두지 않고 기본값 처리에 해당하는 쉼표( , ) 로 작성해두었다.

    구글에서도 모델의 정확도를 높이기위해, 단일 제품을 흰 화면에서 여러 방향으로 사진을 제공하는 것을 권장하고 있다.  아래는 완성한 데이터이다.

    참조: API CSV 메타 데이터 설명

     

    아래는 구글 스토리지에 올라간  CSV 테이블의 데이터 명세서이다. 이처럼 구글 클라우드 버킷에 저장한 이미지에 대한 정보를 CSV에 저장해놓고 image-url을 통해, 주소 정보를 담아줘야한다. 

     

    구글 클라우드>스토리지>’hwao’ bucket

    완성한 CSV파일과 제품에 대한 이미지를 구글 스토리지 버킷에 저장하면 준비 작업은 끝이다. 

     

     

     

    CH3. 제품 검색 실행 


    여기부터는 구글에서 제공한 코드를 그대로 사용하면 된다. 코드를 순서대로 첨부한다.

    제품+제품 세트 생성 > 제품 등록 확인 > 제품 유사도 검사  

     

    구글 스토리지 탐색
    제품 및 세트 생성 
    제품 등록 확인
    제품 확인

     

    제품 유사도 코드 

    화자의 경우, 가장 정확하게 나온 모델의 이름과 이미지 경로만 궁금해서 아래와 같이 dictionary로 key값을 요청했다.

     

    구글 이미지 검색에서 안경 모델에 대한 모델 사진이 많지 않아, 3종류 모델에 대한 실험을 진행했다.

     

    정확도의 경우 40-50%정도 확인되며, 61% 유사도 점수를 가진 사진의 경우, 입력데이터와 같이 안경에 모델 사진이 적혀있어 더 정확한 점수를 반환한 것으로 확인된다.

    하지만, BOSS1067모델의 경우, VPR54T모델로 잘못 추측했다. 현재, 구글에서 안경에 대한 카테고리가 주어지지 않았고 일반 제품에 대해서 통상적으로 사용되는 것이기 때문에, 완벽하게 찾는데는 약간 무리가 있지만, 적은 데이터만으로도 안경에 대한 유사도를 체크할 수 있다는 점에서 상당히 효과적이다. 안경이 아닌 특징이 명확한 의류나 기타 제품들에 대해서는 훨씬 높은 정확도를 보여줄 것이다. 

    구글에서 소개하듯 모델을 고도화시킨다면, 소매점과 같이 제한된 공간에서 이미지 데이터로 제품 모델을 찾을때, 효과적으로 작동할 것으로 보여진다. 

    댓글

Life goes on.