Google Cloud Vision 및 Python을 사용한 강력한 이미지 분석
게시 됨: 2022-03-10최근에는 사용자의 개인 경비를 관리하는 웹 앱을 만들었습니다. 주요 기능은 쇼핑 영수증을 스캔하고 추가 처리를 위해 데이터를 추출하는 것입니다. Google Vision API는 사진에서 텍스트를 가져오는 훌륭한 도구로 판명되었습니다. 이 기사에서는 샘플 프로젝트에서 Python을 사용한 개발 프로세스를 안내합니다.
당신이 초보자라면 걱정하지 마십시오. 이 프로그래밍 언어에 대한 아주 기본적인 지식만 있으면 됩니다. 다른 기술은 필요하지 않습니다.
시작해 볼까요?
Google Cloud Vision에 대해 들어본 적이 없습니까?
개발자가 추출된 데이터를 통해 이미지의 내용을 분석할 수 있도록 하는 API입니다. 이를 위해 Google은 대규모 이미지 데이터 세트에서 훈련된 기계 학습 모델을 활용합니다. 이 모든 것은 단일 API 요청으로 사용할 수 있습니다. API 뒤에 있는 엔진은 이미지를 분류하고, 사물, 사람의 얼굴을 감지하고, 이미지 내에서 인쇄된 단어를 인식합니다.
예를 들어 호평을 받은 Giphy를 불러오겠습니다. 그들은 API를 채택하여 GIF에서 캡션 데이터를 추출하여 사용자 경험을 크게 개선했습니다. 또 다른 예는 Realtor.com으로, Vision API의 OCR을 사용하여 모바일 앱에서 촬영한 For Sale 표지판의 이미지에서 텍스트를 추출하여 부동산에 대한 자세한 정보를 제공합니다.
기계 학습 개요
기계 학습이란 무엇입니까? 이전에 많은 사람들이 들어봤을 질문에 대한 답부터 시작해 보겠습니다.
광범위한 아이디어는 주어진 데이터에서 패턴을 찾는 프로그래밍 가능한 모델을 개발하는 것입니다. 더 높은 품질의 데이터를 제공하고 사용하는 모델의 디자인이 좋을수록 더 스마트한 결과가 생성됩니다. '친숙한 기계 학습'(Google이 API 서비스를 통해 기계 학습이라고 부름)을 사용하면 인공 지능 덩어리를 애플리케이션에 쉽게 통합할 수 있습니다.
추천 자료 : 머신 러닝 시작하기
Google Cloud를 시작하는 방법
Google Cloud에 등록하는 것부터 시작하겠습니다. Google은 인증이 필요하지만 간단하고 어렵지 않습니다. Google Cloud Platform에서 직접 가져올 수 있는 API 키가 포함된 JSON 파일만 저장하면 됩니다.
파일을 다운로드하고 환경 변수에 경로를 추가합니다.
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json
또는 개발 단계에서 from_serivce_account_json()
메서드를 사용할 수 있습니다. 이 메서드는 이 기사에서 자세히 설명하겠습니다. 인증에 대해 자세히 알아보려면 Cloud의 공식 문서를 확인하세요.
Google은 API를 처리하기 위해 Python 패키지를 제공합니다. 최신 버전의 google-cloud-vision==0.33 을 앱에 추가해 보겠습니다. 코딩할 시간!
Google Cloud Vision을 Python과 결합하는 방법
먼저 라이브러리에서 클래스를 가져옵니다.
from google.cloud import vision from google.cloud.vision import types
그것이 처리되면 이제 클라이언트의 인스턴스가 필요합니다. 그렇게 하려면 텍스트 인식 기능을 사용할 것입니다.
client = vision.ImageAnnotatorClient()
자격 증명을 환경 변수에 저장하지 않으려면 이 단계에서 클라이언트에 직접 추가할 수 있습니다.
client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )
프로젝트 카탈로그 내의 '이미지' 폴더에 처리할 이미지를 저장한다고 가정하고 그 중 하나를 열어 보겠습니다.
image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()
다음 단계는 Vision 개체를 만드는 것입니다. 이 개체를 사용하면 텍스트 인식을 진행하라는 요청을 보낼 수 있습니다.
image = vision.types.Image(content=content) text_response = client.text_detection(image=image)
응답은 설명 키로 저장된 감지된 단어, 이미지에서의 위치 및 언어 예측으로 구성됩니다. 예를 들어 첫 번째 단어를 자세히 살펴보겠습니다.
[ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]
보시다시피, 텍스트만 필터링하려면 "모든 요소에 대한" 설명을 가져와야 합니다. 다행히도 Python의 강력한 목록 이해 기능이 도움이 됩니다.
texts = [text.description for text in text_response.text_annotations] ['SHOPPING STORE\nREG 12-21\n03:22 PM\nCLERK 2\n618\n1 MISC\n1 STUFF\n$0.49\n$7.99\n$8.48\n$0.74\nSUBTOTAL\nTAX\nTOTAL\nCASH\n6\n$9. 22\n$10.00\nCHANGE\n$0.78\nNO REFUNDS\nNO EXCHANGES\nNO RETURNS\n', 'SHOPPING', 'STORE', 'REG', '12-21', '03:22', 'PM', 'CLERK', '2', '618', '1', 'MISC', '1', 'STUFF', '$0.49', '$7.99', '$8.48', '$0.74', 'SUBTOTAL', 'TAX', 'TOTAL', 'CASH', '6', '$9.', '22', '$10.00', 'CHANGE', '$0.78', 'NO', 'REFUNDS', 'NO', 'EXCHANGES', 'NO', 'RETURNS']
주의 깊게 살펴보면 목록의 첫 번째 요소에는 문자열로 저장된 이미지에서 감지된 모든 텍스트가 포함되어 있고 나머지 요소는 분리된 단어임을 알 수 있습니다. 출력해 봅시다.
print(texts[0]) SHOPPING STORE REG 12-21 03:22 PM CLERK 2 618 1 MISC 1 STUFF $0.49 $7.99 $8.48 $0.74 SUBTOTAL TAX TOTAL CASH 6 $9. 22 $10.00 CHANGE $0.78 NO REFUNDS NO EXCHANGES NO RETURNS
꽤 정확하죠? 그리고 분명히 매우 유용하므로 더 플레이해 보겠습니다.
Google Cloud Vision에서 무엇을 얻을 수 있습니까?
위에서 언급했듯이 Google Cloud Vision은 텍스트 인식에 관한 것일 뿐만 아니라 얼굴, 랜드마크, 이미지 속성 및 웹 연결을 발견할 수 있도록 합니다. 이를 염두에 두고 이미지의 웹 연결에 대해 알려줄 수 있는 내용을 알아보겠습니다.
web_response = client.web_detection(image=image)
오케이 구글, 당신은 실제로 당신이받은 이미지에 표시되는 것을 알고 있습니까?
web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]
잘했어, 구글! 과연 영수증입니다. 하지만 조금 더 연습해 보겠습니다. 다른 것이 보이나요? 백분율로 표시되는 더 많은 예측은 어떻습니까?
predictions = [ (entity.description, '{:.2%}'.format(entity.score))) for entity in web_content.web_entities ] >>> [('Receipt', '70.26%'), ('Product design', '64.24%'), ('Money', '56.54%'), ('Shopping', '55.86%'), ('Design', '54.62%'), ('Brand', '54.01%'), ('Font', '53.20%'), ('Product', '51.55%'), ('Image', '38.82%')]
많은 귀중한 통찰력, 잘했습니다, 나의 전능한 친구! 이미지의 출처와 사본이 있는지 여부도 알 수 있습니까?
web_content.full_matching_images >>> [ url: "https://www.rcapitalassociates.com/wp-content/uploads/2018/03/receipts.jpg", url:"https://media.istockphoto.com/photos/shopping-receipt-picture-id901964616?k=6&m=901964616&s=612x612&w=0&h=RmFpYy9uDazil1H9aXkkrAOlCb0lQ-bHaFpdpl76o9A=", url: "https://www.pakstat.com.au/site/assets/files/1172/shutterstock_573065707.500x500.jpg" ]
나는 감동. 고마워, 구글! 하지만 하나로는 충분하지 않습니다. 비슷한 이미지의 세 가지 예를 들어 주시겠습니까?
web_content.visually_similar_images[:3] >>>[ url: "https://thumbs.dreamstime.com/z/shopping-receipt-paper-sales-isolated-white-background-85651861.jpg", url: "https://thumbs.dreamstime.com/b/grocery-receipt-23403878.jpg", url:"https://image.shutterstock.com/image-photo/closeup-grocery-shopping-receipt-260nw-95237158.jpg" ]
달콤한! 잘 했어.
Google Cloud Vision에 인공 지능이 실제로 있습니까?
아래 이미지에서 볼 수 있듯이 영수증 처리는 다소 감정적일 수 있습니다.
Vision API가 이 사진에 대해 무엇을 알려줄 수 있는지 살펴보겠습니다.
image_to_open = 'images/face.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read() image = vision.types.Image(content=content) face_response = client.face_detection(image=image) face_content = face_response.face_annotations face_content[0].detection_confidence >>> 0.5153166651725769
그리 나쁘지는 않지만 알고리즘은 사진에 얼굴이 있다고 50% 이상 확신합니다. 하지만 그 뒤에 숨겨진 감정에 대해 배울 수 있습니까?
face_content[0] >>> [ ... joy_likelihood: VERY_UNLIKELY sorrow_likelihood: VERY_UNLIKELY anger_likelihood: UNLIKELY surprise_likelihood: POSSIBLE under_exposed_likelihood: VERY_UNLIKELY blurred_likelihood: VERY_UNLIKELY headwear_likelihood: VERY_UNLIKELY ... ]
놀랍게도 간단한 명령으로 몇 가지 기본적인 감정과 모자나 사진 속성의 가능성을 확인할 수 있습니다.
얼굴 감지와 관련하여 발생할 수 있는 몇 가지 잠재적인 문제에 주의를 기울여야 합니다. 사진을 기계에 넘겨주고 Google의 API가 거대한 데이터 세트에 대해 훈련된 모델을 활용하더라도 예상치 못한 오해의 소지가 있는 결과를 반환할 수 있음을 기억해야 합니다. 온라인에서 이미지 분석과 관련하여 인공 지능이 얼마나 쉽게 속임을 보여주는 사진을 찾을 수 있습니다. 그들 중 일부는 우스꽝스럽게 보일 수 있지만 특히 실수가 사람의 얼굴과 관련된 경우 무고한 실수와 공격적인 실수 사이에는 미세한 선이 있습니다.
의심의 여지 없이 Google Cloud Vision은 강력한 도구입니다. 게다가 작업하는 재미도 쏠쏠하다. API의 REST 아키텍처와 널리 사용 가능한 Python 패키지를 사용하면 Python 개발의 고급 수준에 관계없이 모든 사람이 API에 더욱 쉽게 액세스할 수 있습니다. 앱의 기능을 활용하여 앱을 얼마나 크게 개선할 수 있는지 상상해 보세요!
추천 자료 : 디자이너를 위한 머신 러닝 적용
Google Cloud Vision에 대한 지식을 넓히는 방법
Google Cloud Vision 서비스를 적용할 수 있는 가능성의 범위는 사실상 무궁무진합니다. Python 라이브러리를 사용하면 웹 응용 프로그램이든 과학 프로젝트이든 언어를 기반으로 하는 모든 프로젝트에서 사용할 수 있습니다. 확실히 머신 러닝 기술에 대한 더 깊은 관심을 불러일으키는 데 도움이 될 수 있습니다.
Google 문서는 Vision API 기능을 실제로 적용하는 방법에 대한 몇 가지 훌륭한 아이디어를 제공할 뿐만 아니라 기계 학습에 대해 더 많이 배울 수 있는 가능성을 제공합니다. 특히 고급 이미지 검색 앱을 구축하는 방법에 대한 가이드를 확인하는 것이 좋습니다.
이 기사에서 본 것은 마술과 같다고 말할 수 있습니다. 결국 누가 간단하고 쉽게 액세스할 수 있는 API가 강력하고 과학적인 도구에 의해 뒷받침된다고 생각했을까요? 이제 몇 줄의 코드를 작성하고 상상력을 발휘하여 이미지 분석의 무한한 잠재력을 경험하기만 하면 됩니다.