-
azure-01 cognitive service-computer vision클라우드/azure 2023. 5. 4. 19:57
1. cognitive service
Azure Cognitive Services는 개발자가 직접적인 AI 또는 데이터 과학 기술이나 지식 없이도 인지적 인텔리전스를 애플리케이션에 빌드하도록 지원하는 클라우드 기반 AI(인공 지능) 서비스이다.
2. computer vision api
여러 가지 사용가능한 api가 있으며 computer vision api과 ocr api를 사용해 본다.
Computer Vision 서비스는 이미지를 처리하고 정보를 반환하는 고급 인지 알고리즘에 대한 액세스를 제공한다.
ocr은 문자를 인식하는 서비스이다.
3. 이미지 불러오기
import requests from io import BytesIO # 이미지를 바이트로 변환 from PIL import Image #이미지를 출력
필요한 패키지를 불러온다.
requests.get('http://www.astronomer.rocks/news/photo/202001/88605_19430_120.jpg') <Response [200]>
이미지의 주소를 요청하고 200으로 정상적으로 응답하는 것을 확인한다.
image_url = 'http://www.astronomer.rocks/news/photo/202001/88605_19430_120.jpg' image = Image.open(BytesIO(requests.get(image_url).content)) response = requests.get(image_url) img = BytesIO(response.content) image = Image.open(img) image
이미지를 열어준다.
key = '' endpoint = '' analyze_endpoint = endpoint + 'analyze' detect_endpoint = endpoint + 'detect
4. image analyze
키와 엔드포인트를 azure에서 복사해 주고 analyze_endpoint와 detect_endpoint를 생성한다.
header = {'Ocp-Apim-Subscription-Key': key} params = {'visualFeatures':'Categories,Description,Color'} data = {'url':image_url} response = requests.post(analyze_endpoint, headers=header, params=params, json=data) result = response.json() result {'categories': [], 'color': {'dominantColorForeground': 'Black', 'dominantColorBackground': 'Grey', 'dominantColors': ['Grey', 'White', 'Black'], 'accentColor': '986E33', 'isBwImg': False, 'isBWImg': False}, 'description': {'tags': ['dog', 'outdoor', 'animal', 'sitting', 'brown', 'small', 'standing', 'front', 'cat', 'water', 'large', 'holding', 'playing'], 'captions': [{'text': 'a dog sitting on the ground', 'confidence': 0.853870802254097}]}, 'requestId': '6ce15df1-2297-4230-8112-16f6f238ab9b', 'metadata': {'height': 399, 'width': 600, 'format': 'Jpeg'}}
response에 analyze_endpoint, header, parmas, data를 넣고 보내면 사진을 분석한 결과를 json 형식으로 받아올 수 있다.
result['description']['captions'][0]['text'] a dog sitting on the ground
강아지의 동작을 분석할 수 있다.
5. image detect
headers = {'Ocp-Apim-Subscription-Key':key} params = {} data = {'url':image_url} from requests.api import head response = requests.post(detect_endpoint, headers=headers, params=params, json=data) result = response.json() result {'objects': [{'rectangle': {'x': 216, 'y': 45, 'w': 357, 'h': 353}, 'object': 'Labrador retriever', 'confidence': 0.522, 'parent': {'object': 'retriever', 'confidence': 0.824, 'parent': {'object': 'dog', 'confidence': 0.893, 'parent': {'object': 'mammal', 'confidence': 0.915, 'parent': {'object': 'animal', 'confidence': 0.915}}}}}, {'rectangle': {'x': 32, 'y': 152, 'w': 214, 'h': 246}, 'object': 'cat', 'confidence': 0.835, 'parent': {'object': 'mammal', 'confidence': 0.873, 'parent': {'object': 'animal', 'confidence': 0.873}}}], 'requestId': 'a3a375f2-aaa6-4485-96c2-827a9e099ea0', 'metadata': {'height': 399, 'width': 600, 'format': 'Jpeg'}}
response에 detect_endpoint, header, parmas, data를 넣고 보내면 사진의 모양, 크기 등의 여러 가지 요소를 감지한 결과 json 형식으로 받아올 수 있다.
from PIL import Image, ImageDraw, ImageFont #이미지 위에 그리기 draw = ImageDraw.Draw(image) def MakeBox(res): objects = res['objects'] for obj in objects: rect = obj['rectangle'] print(rect) x = rect['x'] y = rect['y'] w = rect['w'] h = rect['h'] draw.rectangle(((x,y),(x+w,y+h)), outline='red') objectName = obj['object'] draw.text((x,y),objectName,fill = 'red') MakeBox(result) {'x': 216, 'y': 45, 'w': 357, 'h': 353} {'x': 32, 'y': 152, 'w': 214, 'h': 246} image
이미지 위에 빨간 선을 가진 박스를 원하는 크기로 그려주고, 종의 이름을 글씨로 쓸 수 있다.
6. ocr
image_url = "https://www.unikorea.go.kr/unikorea/common/images/content/peace.png" image = Image.open(BytesIO(requests.get(image_url).content)) image
이미지를 불러온다.
ocr_endpoint = endpoint + 'ocr' headers = {'Ocp-Apim-Subscription-Key': key} params = {'language':'ko','detectOrientation':'true'} . data = {'url':image_url} response = requests.post(ocr_endpoint, headers=headers, params=params, json=data) result= response.json() result {'language': 'ko', 'textAngle': 0.0, 'orientation': 'Up', 'regions': [{'boundingBox': '45,125,95,36', 'lines': [{'boundingBox': '45,125,95,17', 'words': [{'boundingBox': '45,125,46,17', 'text': '평화와'}, {'boundingBox': '95,125,45,17', 'text': '번영의'}]}, {'boundingBox': '70,144,46,17', 'words': [{'boundingBox': '70,144,46,17', 'text': '한반도'}]}]}]}
ocr_endpoint, headers, parmas, json을 넣고 결과를 json으로 받아온다.
for reg in result['regions']: for line in reg['lines']: for word in line['words']: print(word['text']) 평화와 번영의 한반도
글자가 잘 인식된 것을 확인할 수 있다.
'클라우드 > azure' 카테고리의 다른 글
azure-05 워드 프레스 (0) 2023.05.04 azure-03 iaas, paas, saas, 가상화 (0) 2023.05.04 azure-13 storage 2 - file storage1 - 포털 (0) 2023.05.04 azure-11 storage 1 - blob storage 1 - 포털 (0) 2023.05.04