### 목적: 웹 페이지에서 업로드한 사진을 분석하여 사진속 사람의 특징(머리색, 의복색 시각화 하기(아래)
### 실습 소스는 이전 포스트[파이썬으로 웹 스크레핑과 반응형 대시보드 앱 만들기(강의용)] https://kimilguk.tistory.com/872 의 소스에 이어서 페이지를 추가해 작업 하였다.
### 실습에 사용한 결과 : 위 기능과 비슷하게 구현하고 있다. 현재는 2개 이미지만 가져와서 검사해 보았다.(아래)
- 사용한 이미지는 픽사베이의 무료 이미지이다. : https://pixabay.com/ko/photos/%EC%83%81%EC%9C%84-%EC%97%B0%EC%84%B8%EA%B0%80-%EB%93%9C%EC%8B%A0-%EC%82%AC%EB%9E%8C%EB%93%A4-3336451/
- koyeb 플랫폼에서 실행 URL : https://interior-sondra-kimilguk-app-99ae6359.koyeb.app/
- VS Code 소스에서 반환받아서 출력하는 @콜백+함수 부분의 Output 과 리턴값이 화면처리의 핵심이다.(아래)
- 위에서 작업소스는 다음 깃 허브에 있다. : https://github.com/kimilguk/python-dash/tree/koyeb
### 국가공공기관에서 운영하는 AI 허브 사이트 사용
- 아래 AI 허브 사이트는 굳이 회원 가입할 필요가 없다. 이후 AI API-DATA 사이트에서 별도로 이메일과 암호를 등록해야 API S/W를 이용할 수 있다.
- 다음 AI HUB 사이트 상단 메뉴의 AI 개발지원 메뉴내 AI S/W 지원 메뉴 클릭: https://www.aihub.or.kr/ (아래)
- 위 링크로 따라 들어간 AI API-DATA 사이트에서 제공하는 API 키 발급 : https://aiopen.etri.re.kr/ (아래)
- 위 키 발급시 별도의 이메일과 암호를 등록한다. 아래 사이트는 별도의 로그인이 없이 등록한 이메일과 암호로 키를 확인가능하다. https://aiopen.etri.re.kr/keyCreation (AI API키 발급 신청 후 키 확인 아래)
- 위 링크로 따라 들어간 AI API-DATA 사이트에서 제공하는 API 개발가이드 사용 : https://aiopen.etri.re.kr/guide/pd (아래)
- 구현 예제 샘플 중 API1 사람속성 검출 Python 소스코드 (아래)
- AI API로 가져온 결과를 판다스 데이터프레임을 사용하는 방식과 고전적인 방식으로 데이터를 파싱하는 방식 2가지를 사용해 보았다.(아래)
#-*- coding:utf-8 -*-
import urllib3
import json
import base64
# API1 사람속성 검출URL(아래)
openApiURL = "http://aiopen.etri.re.kr:8000/HumanParsing"
# API2 객체검출URL(아래)
# openApiURL = "http://aiopen.etri.re.kr:8000/ObjectDetect"
accessKey = "여기에 api key 넣으시구요"
imageFilePath = "여기에 파일경로 넣으시구요.jpg"
type = "여기에 확장자 넣으시면 됩니다. "
#위 입력예시) ---------
# imageFilePath = "./boardwalk.jpg"
# type = "jpg"
#-------------
file = open(imageFilePath, "rb")
imageContents = base64.b64encode(file.read()).decode("utf8")
file.close()
requestJson = {
"argument": {
"type": type,
"file": imageContents
}
}
http = urllib3.PoolManager()
response = http.request(
"POST",
openApiURL,
headers={"Content-Type": "application/json; charset=UTF-8", "Authorization":accessKey},
body=json.dumps(requestJson)
)
print("[responseCode] " + str(response.status))
print("[responBody]")
print(response.data) # print를 통해 결과가 json 형태로 나오는걸 보실수 있습니다.
#여기까지가 공통 샘플 소스이다. 이후 아래 소스는 API1, API2 기능별로 선택해서 사용-
# API1. 여기서부터는 샘플 소스 이후 사람속성 검출 API 시각화 소스
# 참고, 자바스크립트의 json과 파이썬의 딕셔너리는 같은 데이터 형이다.(아래)
data = json.loads(response.data) # string 형태의 json이라서 json.loads를 통해 읽어서 딕셔너리로 반환한다.
data_list = data.get("return_object") #딕셔너리에서 특정 값을 가져와서 딕셔너리로 반환한다.
print(data_list)
print('사진에 있는 사람의 수와 복장 특징 목록')
# 데이터프레임 사용에 필요한 판다스 모듈 임포트
import pandas as pd
#####################################################################
# dsah_table 모듈사용 시(아래)
# 데이터 프레임 생성
df_person = pd.DataFrame(data_list) # 딕셔너리 데이터를 판다스 DataFrame으로 변환
df_person = df_person.transpose() # 딕셔너리 데이터의 행열 변환
# print(df_person.columns) # 컬럼출력
df_person = df_person[['hair color','coat color','pants color']]
df_person.columns = ['머리색상', '상의색상', '바지색상'] # 열 이름 변경
df_person = df_person.reset_index().rename(columns={'index':'사람객체명'}) # 인덱스 명 출력
print(df_person.head()) # 많은 데이터 중 상위 몇개만 표시
#######################################################################
#######################################################################
# 데이터프레임.to_html()을 사용하여 웹용으로 변경 사용 시(아래)
person_list = [] # 개체(json=dictionary) 배열변수 추가
for i in data_list: # 하나씩 가져다가 리스트로 출력하는 코드입니다.
person_list.extend([{'person':i,'hair color':data_list.get(i).get('hair color'),'coat color':data_list.get(i).get('coat color'),'pants color':data_list.get(i).get('pants color')}])
#print(i,' = hair color:',data_list.get(i).get('hair color'),' coat color:',data_list.get(i).get('coat color'),' pants color:',data_list.get(i).get('pants color'))
# print(person_list)
df_person_html = pd.DataFrame(person_list) # 딕셔너리 데이터를 판다스 DataFrame으로 변환
# print(df_person.columns)
df_person_html.columns = ['사람객체명', '머리색상', '상의색상', '바지색상'] # 열 이름 변경
print(df_person_html.head()) # 많은 데이터 중 상위 몇개만 표시
- 위 소스에서 무료 이미지로 사용할 사진을 assets폴더에 저장 시켜 놓았다.(아래 VS Code 왼쪽의 탐색기에서 확인)
- 위 터미널에서 API1 사람속성 검출 AI를 사용한 결과(아래 person_1, person_2 처럼 2명이 나온다.)
- 구현 예제 API 명세서(아래)
Ps. 기술참조 : https://m.blog.naver.com/doksg/222059041080
AI 소프트웨어 API 사용하여 이미지 인식 기술 구현하기2 (0) | 2024.06.02 |
---|---|
자율주행 AI 데이터라벨링을 학습해 보았습니다. (1) | 2024.01.27 |
코딩 테스트 풀이를 개발자(사람)과 ChatGPT 인공지능으로 비교해 보았습니다. (0) | 2023.02.04 |
IoT 정보를 머신러닝으로 데이터 분석_오렌지3와ThingPost (0) | 2021.11.30 |
IoT 정보를 머신러닝으로 데이터 분석_오랜지3비지도학습2 (0) | 2021.11.25 |
댓글 영역