[검증] Google Cloud Vision API를 통한 빠른 텍스트 인식(OCR)
11946 단어 PythonOCRGoogleCloudVisionAPI
개시하다
Google Cloud Vision API의 OCR(텍스트 인식)을 사용하면 사진의 파일 크기를 줄여 처리량을 개선할 수 있습니다.
모범 사례 | Cloud Vision API | Google Cloud에는 문자인식 추천 이미지 사이즈가 1024x768로 기재돼 있지만 아이폰 카메라로 찍은 이미지는 추천 사이즈보다 크다.나는 이미지 크기를 줄이는 것이 얼마나 많은 수송량을 개선할 수 있는지에 매우 신경을 쓴다.
이에 따라 아이폰으로 촬영한 원형 이미지를 OCR로 확인하고 추천 사이즈로 조정해 OCR을 할 경우 응답 시간이 얼마나 단축되는지 문자인식 정밀도는 바뀌지 않는다.
컨디션
Python 3.7.2
촬영: 아이폰8
유효성 검사를 위한 이미지
검증에 사용된 것은 아이폰8로 촬영된 2018-2019 YONEX 스키의 카탈로그 이미지다.
출전: JSBA YERBOOK 2019http://www.srpi.co.jp/jsbayearbook2019/html5.html#page=1
검증 프로그램
권장 크기로 OCR을 수행하는 프로그램입니다.OCR의 출력 결과와 경과 시간을 표시합니다.#coding:utf-8
import base64
import json
from requests import Request, Session
from io import BytesIO
from PIL import Image
import time
#PILで開いた画像をbase64形式に変換
def pil_image_to_base64(pil_image):
buffered = BytesIO()
pil_image.save(buffered, format="PNG")
str_encode_file = base64.b64encode(buffered.getvalue()).decode("utf-8")
return str_encode_file
#PILで開いた画像をCloud Vision APIに投げる
def recognize_image(pil_image):
str_encode_file = pil_image_to_base64(pil_image)
str_url = "https://vision.googleapis.com/v1/images:annotate?key="
str_api_key = "Key"
str_headers = {'Content-Type': 'application/json'}
str_json_data = {
'requests': [
{
'image': {
'content': str_encode_file
},
'features': [
{
'type': "TEXT_DETECTION",
'maxResults': 10
}
]
}
]
}
obj_session = Session()
obj_request = Request("POST",
str_url + str_api_key,
data=json.dumps(str_json_data),
headers=str_headers
)
obj_prepped = obj_session.prepare_request(obj_request)
obj_response = obj_session.send(obj_prepped,
verify=True,
timeout=60
)
if obj_response.status_code == 200:
text = get_fullTextAnnotation(obj_response.text)
return text
else:
return "error"
#返ってきたjsonデータの"fullTextAnnotation"部分のテキストを抽出
def get_fullTextAnnotation(json_data):
text_dict = json.loads(json_data)
try:
text = text_dict["responses"][0]["fullTextAnnotation"]["text"]
return text
except:
print(None)
return None
if __name__ == '__main__':
start = time.time()
img_path = "./test.png"
img = Image.open(img_path)
width, height = img.size
#推奨画像サイズにリサイズ
coefficient = 1024 / width
img_resize = img.resize((int(img.width*coefficient), int(img.height*coefficient)))
print(recognize_image(img_resize))
elapsed_time = time.time() - start
print(elapsed_time)
결실
응답 시간
원본 이미지 (4032 x 3024)
권장 사이즈(1024x780)
첫 번째:12.20초
첫 번째: 3.65초
2회:12.48초
2회: 4.07초
3차:10.74초
3차:3.57초
4차:11.23초
4차:3.48초
5회:10.24초
5회:3.20초
문자 식별 정밀도
결과는 다음과 같다.문자를 잘 식별할 수 있다.
'세상에서 처음
온몸의 탄소."
라는 슬로건, 1995년 스키 가입
YONEX.니가타의 자사 공장에 생산 거점을 두고 물품 제작에 열심인 숙련 기술
소비자의 철저한 제조, 품질 관리를 바탕으로 완벽한 섬세한 소재를 설계하다
'라고 말한다. 자유롭게 제어할 수 있다.MADEIN JAPAN에 얽매여 품질이 독특하고 모방적이다
이룰 수 없는 혁신적인 스키를 만들어냈고, 최고급 기수들이 이를 증명했다.
REV®
SMOOTH
¥98,000
★사이즈:150,
153, 156, 159
존 네크스 역사상 가장 가볍다
양의 흔들림
자랑스러운 새로운 구조
Toppert 3.0"
베이스, 배척력과
충격성을 잘 흡수하다
'나미 양도 DR'
채용고기압과
고회전 조절
정상 경기
모델 모델
¥88,000
★사이즈:
142,146, 150,
154, 158
신구조
라이브러리 3.0을 기반으로 합니다.
강도·유연성
충격성을 잘 흡수하다
"나미 사이즈 XT"
공원.
채용
답장
다양한 장면에서.
역할을 발휘한 존 네크스
모두
구름의 모형.
총결산
추천 사이즈로 줄여도 문자인식 정밀도는 변하지 않고 응답 시간은 약 8초 단축됐다.
구글 클라우드 비전 API는 문자를 빠르고 정밀하게 식별할 수 있다.
참고로 추천 사이즈로 줄일 때 응답 시간이 짧지 않고 문자인식 정밀도가 낮아집니다.
참고 문헌
Pyton에서 Google Cloud Vision API를 사용해 보았습니다.
아이폰의 카메라 규격(사진 사이즈, 해상도, 픽셀 수) 집합
Reference
이 문제에 관하여([검증] Google Cloud Vision API를 통한 빠른 텍스트 인식(OCR)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/se_fy/items/963b295bbd13101c044b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Python 3.7.2
촬영: 아이폰8
유효성 검사를 위한 이미지
검증에 사용된 것은 아이폰8로 촬영된 2018-2019 YONEX 스키의 카탈로그 이미지다.
출전: JSBA YERBOOK 2019http://www.srpi.co.jp/jsbayearbook2019/html5.html#page=1
검증 프로그램
권장 크기로 OCR을 수행하는 프로그램입니다.OCR의 출력 결과와 경과 시간을 표시합니다.#coding:utf-8
import base64
import json
from requests import Request, Session
from io import BytesIO
from PIL import Image
import time
#PILで開いた画像をbase64形式に変換
def pil_image_to_base64(pil_image):
buffered = BytesIO()
pil_image.save(buffered, format="PNG")
str_encode_file = base64.b64encode(buffered.getvalue()).decode("utf-8")
return str_encode_file
#PILで開いた画像をCloud Vision APIに投げる
def recognize_image(pil_image):
str_encode_file = pil_image_to_base64(pil_image)
str_url = "https://vision.googleapis.com/v1/images:annotate?key="
str_api_key = "Key"
str_headers = {'Content-Type': 'application/json'}
str_json_data = {
'requests': [
{
'image': {
'content': str_encode_file
},
'features': [
{
'type': "TEXT_DETECTION",
'maxResults': 10
}
]
}
]
}
obj_session = Session()
obj_request = Request("POST",
str_url + str_api_key,
data=json.dumps(str_json_data),
headers=str_headers
)
obj_prepped = obj_session.prepare_request(obj_request)
obj_response = obj_session.send(obj_prepped,
verify=True,
timeout=60
)
if obj_response.status_code == 200:
text = get_fullTextAnnotation(obj_response.text)
return text
else:
return "error"
#返ってきたjsonデータの"fullTextAnnotation"部分のテキストを抽出
def get_fullTextAnnotation(json_data):
text_dict = json.loads(json_data)
try:
text = text_dict["responses"][0]["fullTextAnnotation"]["text"]
return text
except:
print(None)
return None
if __name__ == '__main__':
start = time.time()
img_path = "./test.png"
img = Image.open(img_path)
width, height = img.size
#推奨画像サイズにリサイズ
coefficient = 1024 / width
img_resize = img.resize((int(img.width*coefficient), int(img.height*coefficient)))
print(recognize_image(img_resize))
elapsed_time = time.time() - start
print(elapsed_time)
결실
응답 시간
원본 이미지 (4032 x 3024)
권장 사이즈(1024x780)
첫 번째:12.20초
첫 번째: 3.65초
2회:12.48초
2회: 4.07초
3차:10.74초
3차:3.57초
4차:11.23초
4차:3.48초
5회:10.24초
5회:3.20초
문자 식별 정밀도
결과는 다음과 같다.문자를 잘 식별할 수 있다.
'세상에서 처음
온몸의 탄소."
라는 슬로건, 1995년 스키 가입
YONEX.니가타의 자사 공장에 생산 거점을 두고 물품 제작에 열심인 숙련 기술
소비자의 철저한 제조, 품질 관리를 바탕으로 완벽한 섬세한 소재를 설계하다
'라고 말한다. 자유롭게 제어할 수 있다.MADEIN JAPAN에 얽매여 품질이 독특하고 모방적이다
이룰 수 없는 혁신적인 스키를 만들어냈고, 최고급 기수들이 이를 증명했다.
REV®
SMOOTH
¥98,000
★사이즈:150,
153, 156, 159
존 네크스 역사상 가장 가볍다
양의 흔들림
자랑스러운 새로운 구조
Toppert 3.0"
베이스, 배척력과
충격성을 잘 흡수하다
'나미 양도 DR'
채용고기압과
고회전 조절
정상 경기
모델 모델
¥88,000
★사이즈:
142,146, 150,
154, 158
신구조
라이브러리 3.0을 기반으로 합니다.
강도·유연성
충격성을 잘 흡수하다
"나미 사이즈 XT"
공원.
채용
답장
다양한 장면에서.
역할을 발휘한 존 네크스
모두
구름의 모형.
총결산
추천 사이즈로 줄여도 문자인식 정밀도는 변하지 않고 응답 시간은 약 8초 단축됐다.
구글 클라우드 비전 API는 문자를 빠르고 정밀하게 식별할 수 있다.
참고로 추천 사이즈로 줄일 때 응답 시간이 짧지 않고 문자인식 정밀도가 낮아집니다.
참고 문헌
Pyton에서 Google Cloud Vision API를 사용해 보았습니다.
아이폰의 카메라 규격(사진 사이즈, 해상도, 픽셀 수) 집합
Reference
이 문제에 관하여([검증] Google Cloud Vision API를 통한 빠른 텍스트 인식(OCR)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/se_fy/items/963b295bbd13101c044b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
권장 크기로 OCR을 수행하는 프로그램입니다.OCR의 출력 결과와 경과 시간을 표시합니다.
#coding:utf-8
import base64
import json
from requests import Request, Session
from io import BytesIO
from PIL import Image
import time
#PILで開いた画像をbase64形式に変換
def pil_image_to_base64(pil_image):
buffered = BytesIO()
pil_image.save(buffered, format="PNG")
str_encode_file = base64.b64encode(buffered.getvalue()).decode("utf-8")
return str_encode_file
#PILで開いた画像をCloud Vision APIに投げる
def recognize_image(pil_image):
str_encode_file = pil_image_to_base64(pil_image)
str_url = "https://vision.googleapis.com/v1/images:annotate?key="
str_api_key = "Key"
str_headers = {'Content-Type': 'application/json'}
str_json_data = {
'requests': [
{
'image': {
'content': str_encode_file
},
'features': [
{
'type': "TEXT_DETECTION",
'maxResults': 10
}
]
}
]
}
obj_session = Session()
obj_request = Request("POST",
str_url + str_api_key,
data=json.dumps(str_json_data),
headers=str_headers
)
obj_prepped = obj_session.prepare_request(obj_request)
obj_response = obj_session.send(obj_prepped,
verify=True,
timeout=60
)
if obj_response.status_code == 200:
text = get_fullTextAnnotation(obj_response.text)
return text
else:
return "error"
#返ってきたjsonデータの"fullTextAnnotation"部分のテキストを抽出
def get_fullTextAnnotation(json_data):
text_dict = json.loads(json_data)
try:
text = text_dict["responses"][0]["fullTextAnnotation"]["text"]
return text
except:
print(None)
return None
if __name__ == '__main__':
start = time.time()
img_path = "./test.png"
img = Image.open(img_path)
width, height = img.size
#推奨画像サイズにリサイズ
coefficient = 1024 / width
img_resize = img.resize((int(img.width*coefficient), int(img.height*coefficient)))
print(recognize_image(img_resize))
elapsed_time = time.time() - start
print(elapsed_time)
결실
응답 시간
원본 이미지 (4032 x 3024)
권장 사이즈(1024x780)
첫 번째:12.20초
첫 번째: 3.65초
2회:12.48초
2회: 4.07초
3차:10.74초
3차:3.57초
4차:11.23초
4차:3.48초
5회:10.24초
5회:3.20초
문자 식별 정밀도
결과는 다음과 같다.문자를 잘 식별할 수 있다.
'세상에서 처음
온몸의 탄소."
라는 슬로건, 1995년 스키 가입
YONEX.니가타의 자사 공장에 생산 거점을 두고 물품 제작에 열심인 숙련 기술
소비자의 철저한 제조, 품질 관리를 바탕으로 완벽한 섬세한 소재를 설계하다
'라고 말한다. 자유롭게 제어할 수 있다.MADEIN JAPAN에 얽매여 품질이 독특하고 모방적이다
이룰 수 없는 혁신적인 스키를 만들어냈고, 최고급 기수들이 이를 증명했다.
REV®
SMOOTH
¥98,000
★사이즈:150,
153, 156, 159
존 네크스 역사상 가장 가볍다
양의 흔들림
자랑스러운 새로운 구조
Toppert 3.0"
베이스, 배척력과
충격성을 잘 흡수하다
'나미 양도 DR'
채용고기압과
고회전 조절
정상 경기
모델 모델
¥88,000
★사이즈:
142,146, 150,
154, 158
신구조
라이브러리 3.0을 기반으로 합니다.
강도·유연성
충격성을 잘 흡수하다
"나미 사이즈 XT"
공원.
채용
답장
다양한 장면에서.
역할을 발휘한 존 네크스
모두
구름의 모형.
총결산
추천 사이즈로 줄여도 문자인식 정밀도는 변하지 않고 응답 시간은 약 8초 단축됐다.
구글 클라우드 비전 API는 문자를 빠르고 정밀하게 식별할 수 있다.
참고로 추천 사이즈로 줄일 때 응답 시간이 짧지 않고 문자인식 정밀도가 낮아집니다.
참고 문헌
Pyton에서 Google Cloud Vision API를 사용해 보았습니다.
아이폰의 카메라 규격(사진 사이즈, 해상도, 픽셀 수) 집합
Reference
이 문제에 관하여([검증] Google Cloud Vision API를 통한 빠른 텍스트 인식(OCR)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/se_fy/items/963b295bbd13101c044b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
추천 사이즈로 줄여도 문자인식 정밀도는 변하지 않고 응답 시간은 약 8초 단축됐다.
구글 클라우드 비전 API는 문자를 빠르고 정밀하게 식별할 수 있다.
참고로 추천 사이즈로 줄일 때 응답 시간이 짧지 않고 문자인식 정밀도가 낮아집니다.
참고 문헌
Pyton에서 Google Cloud Vision API를 사용해 보았습니다.
아이폰의 카메라 규격(사진 사이즈, 해상도, 픽셀 수) 집합
Reference
이 문제에 관하여([검증] Google Cloud Vision API를 통한 빠른 텍스트 인식(OCR)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/se_fy/items/963b295bbd13101c044b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([검증] Google Cloud Vision API를 통한 빠른 텍스트 인식(OCR)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/se_fy/items/963b295bbd13101c044b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)