[Azure] Python으로 Custom Vision Service 두드리기
9683 단어 CognitiveServicesAzurePython
입문 Custom Vision Service
는 Microsoft Azure 제품 중 하나로 이미지 인식 서비스를 제공합니다.
이러한 느낌은 이미지의 종류를 나타내는 라벨과 이와 관련된 이미지를 몇 장 업로드하여 학습시키고, 어떤 이미지가 어느 라벨과 얼마나 가까운지 알려주는 서비스이다.
위의 예에서 바이올린, 오보에, 관현악을 배우는 토대에서 구도가 조금 다른 바이올린 사진을 올린 결과 99.9%의 확률이 바이올린 사진이었다.
이번에는 Python에서 이 서비스의 API를 실행하고 싶습니다.
전체 프로세스
이 서비스를 이용하는 대체적인 절차로
이 서비스를 이용하는 대체적인 절차로
그 중에서 브라우저에서 1, 2, 3을 실행하는 방법에 대해 아래의 보도는 매우 참고 가치가 있으니 저쪽을 참조하십시오.
사용자 정의 Vision Service-Qiita 사용 시도
이 글은 파이썬에서 어떻게 세 부분을 집행하는지 소개한다.
본론
말은 그렇지만 기본적으로 참고 자료 작성 절차에 따라 집행될 뿐이다.
Overview - Custom Vision Service
이 페이지의 왼쪽 메뉴 "참조"> "사용자 정의 Vision Prediction API 참조"를 열면 테스트 콘솔과 각 프로그래밍 언어의 예시 코드가 포함된 페이지와 API 규범이 표시됩니다.
이번에는 파이썬을 선택하겠습니다.
표시된 코드의 윗부분은 2입니다.X의 코드, 하반부는 3.x의 코드.
자신의 환경에 맞는 것을 복사하여python 파일을 만듭니다.(이번엔 3.x로 진행)
customvisionapi.pyimport io, http.client, urllib.request, urllib.parse, urllib.error, base64
headers = {
# Request headers
'Content-Type': 'multipart/form-data',
'Prediction-key': 'xxxxxxxxxxxxxxxxxxxxxxxx',
}
params = urllib.parse.urlencode({
# Request parameters
'iterationId': 'xxxxxxxxxxxxxxxxxxxxxxxx',
})
try:
conn = http.client.HTTPSConnection('southcentralus.api.cognitive.microsoft.com')
f = open("violin_a.jpg", "rb", buffering=0)
conn.request("POST", "/customvision/v1.0/Prediction/xxxxxxxxxxxxxxxxxxxxxxxx/image?%s" % params, f.readall(), headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
# print("[Errno {0}] {1}".format(e.errno, e.strerror))
print(e)
여기에서 xxxxxxxxxxxxxxxxxxxxxxxx
에 기재된 각 매개 변수는 다음과 같이 확인할 수 있습니다.
import io, http.client, urllib.request, urllib.parse, urllib.error, base64
headers = {
# Request headers
'Content-Type': 'multipart/form-data',
'Prediction-key': 'xxxxxxxxxxxxxxxxxxxxxxxx',
}
params = urllib.parse.urlencode({
# Request parameters
'iterationId': 'xxxxxxxxxxxxxxxxxxxxxxxx',
})
try:
conn = http.client.HTTPSConnection('southcentralus.api.cognitive.microsoft.com')
f = open("violin_a.jpg", "rb", buffering=0)
conn.request("POST", "/customvision/v1.0/Prediction/xxxxxxxxxxxxxxxxxxxxxxxx/image?%s" % params, f.readall(), headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
# print("[Errno {0}] {1}".format(e.errno, e.strerror))
print(e)
Prediction-key
iterationId
ProjectID
각각의 값을 설정하면 비교용 파일을 Python 파일과 같은 디렉터리에 놓고 실행합니다.
$ python customvisionapi.py
b'{"Id":"bxxxxxxxxxxxxxxxxxxxxxxxx","Project":"xxxxxxxxxxxxxxxxxxxxxxxx","Iteration":"xxxxxxxxxxxxxxxxxxxxxxxx","Created":"2017-06-06T13:59:23.5590916Z","Predictions":[{"TagId":"8fe34be4-eeff-495b-a83f-2a74bd25f035","Tag":"instrument","Probability":0.9999934},{"TagId":"bd2281d4-e4ff-48f1-a9ab-d525277479f9","Tag":"violin","Probability":0.9987756},{"TagId":"f33cdfdd-7eb2-47a2-8a30-2162a8f9e7fa","Tag":"oboe","Probability":3.22442238E-22},{"TagId":"b1490919-c0ab-4771-9564-13752bcfb96c","Tag":"tuba","Probability":7.720858E-24}]}'
결과가 나왔습니다.이대로 가면 이해하기 어렵지만 라벨마다
Probability
데이터를 반환하고, Violin
라벨의 Probability
은 0.9999934
높은 수치다.이렇게 하면 프로그램을 통해 이미지 식별을 할 수 있다!
IoT 장치가 내장되어
Django
등 웹 응용 프로그램과 결합하면 꿈이 커진다.Bad Request Image Format 나와!
그렇다면 위의 절차는 이미 끝났습니다. 제가 이것을 시도할 때 BadRequestImageFormat
결과를 얻지 못하는 현상이 생겨서 1, 2시간 정도 고민했기 때문에 해결 방법을 적어 두었습니다(원인은 잘 모르겠습니다,,,,)$ python customvisionapi.py
b'{"Code":"BadRequestImageFormat","Message":""}'
그나저나 구글 선생님께 직접 물어봐도 아무 말도 안 돼요.
따라서 다음은 해결 방법이다.
아까의 예시 코드였지만 실제로는 문서에 이미지 파일을 요청 주체의 부분에 붙이는 코드{body}
만 써서 생략했습니다.conn.request("POST", "/customvision/v1.0/Prediction/{projectId}/image?%s" % params, "{body}", headers)
처음에 저희가 이 부분을imagefile = open("./violin_a.jpg", "rb")
conn.request("POST", "/customvision/v1.0/Prediction/{projectId}/image?%s" % params, imagefile, headers)
이렇게 open()
방법으로 해봤는데 도저히 안 돼요.
따라서 io 모듈 참조를 보면서 실험을 반복하는 과정에서 다음과 같은 내용을 주의함으로써 오류 없이 API를 두드릴 수 있다.
$ python customvisionapi.py
b'{"Code":"BadRequestImageFormat","Message":""}'
conn.request("POST", "/customvision/v1.0/Prediction/{projectId}/image?%s" % params, "{body}", headers)
imagefile = open("./violin_a.jpg", "rb")
conn.request("POST", "/customvision/v1.0/Prediction/{projectId}/image?%s" % params, imagefile, headers)
open()
의 세 번째 매개 변수에 추가buffering=0
readall()
방법의 반환값을 요청 주체에 전달png
이 아니라 이미지 사용(!)PNG 이미지에서 제대로 동작하지 않은 것은 동작 확인에 사용되는 PNG 파일 자체의 문제입니다.
같은 원본 코드를 확인했기 때문에 PNG 이미지도 문제없이 결과를 얻을 수 있는 일, 수정.
(/수정)
어떤 뜻인지 모르지만 어쨌든 이렇게 움직였으니 일단 기재해 두자.
(또한 Python2.x의 경우 세 번째 jpg를 제외하고는 모두 이동하고 있습니다. 무슨 뜻입니까?)
결과적으로 실행된 프로그램은 본고에 기재된 것과 같다.
총결산
여기서 마치겠습니다.
Azure의 각 서비스는 아직 정보가 적지만 활용할 수 있는 API를 많이 제공했다는 인상을 준다.2만 엔의 공짜 액자도 있기 때문에 앞으로도 다양한 방법을 시도해 보고 싶다.
Reference
이 문제에 관하여([Azure] Python으로 Custom Vision Service 두드리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chooyan_eng/items/af4e4c422b37eb718a81
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Azure] Python으로 Custom Vision Service 두드리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chooyan_eng/items/af4e4c422b37eb718a81텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)