GCP Cloud Vision API로 텍스트 추출(Python3.6)
10955 단어 파이썬OpenCVgcpComputerVisionOCR
소개
GCP Cloud Vision API로 이미지에서 텍스트 추출을 시도했습니다.
개발 환경
소개
이미지에서 텍스트 감지 를 참고로 합니다.
1. Cloud Console에서 프로젝트를 만듭니다.
2. 결제가 사용 설정되어 있는지 확인합니다.
3. Vision API를 사용하도록 설정합니다.
4. 인증을 설정하고 JSON 파일이 PC에 다운로드됩니다.
5. 환경 변수 GOOGLE_APPLICATION_CREDENTIALS 에 JSON 파일의 경로를 설정합니다.
6. anaconda prompt를 열고 Python 3.6 환경을 만듭니다.
$ conda create -n py36 python=3.6
$ conda activate py36
7. 라이브러리 설치
$ pip install numpy
$ pip install pillow
$ pip install opencv-python
$ pip install --upgrade google-cloud-vision
8. 아래 코드를 실행해 봅시다.
from google.cloud import vision
import io
import os
import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image
def detect_text(image):
"""Detects text in the file."""
client = vision.ImageAnnotatorClient()
content = cv2.imencode(".png", image)[1].tostring()
tmp = vision.Image(content=content)
response = client.text_detection(image=tmp)
texts = response.text_annotations
if response.error.message:
raise Exception(
'{}\nFor more info on error messages, check: '
'https://cloud.google.com/apis/design/errors'.format(
response.error.message))
return texts
filename = "338px-Atomist_quote_from_Democritus.png"
root, ext = os.path.splitext(filename)
image = cv2.imread(filename, cv2.IMREAD_COLOR)
texts = detect_text(image)
fontpath ='C:\Windows\Fonts\meiryo.ttc'
font = ImageFont.truetype(fontpath, 10)
image_pil = Image.fromarray(image)
for text in texts:
print(text.description)
vertices = [(vertex.x, vertex.y) for vertex in text.bounding_poly.vertices]
# cv2.putText(image, text.description, vertices[0], cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255), 1, cv2.LINE_AA)
# cv2.rectangle(image, vertices[0], vertices[2], (0, 255, 0))
draw = ImageDraw.Draw(image_pil)
w, h = draw.textsize(text.description, font = font)
draw.text((vertices[0][0], vertices[0][1]-h), text.description, font=font, fill=(255, 255, 255, 0))
# draw.text(vertices[0], text.description, font=font, fill=(255, 255, 255, 0))
draw.rectangle((vertices[0], vertices[2]), outline=(0, 255, 0))
image = np.array(image_pil)
cv2.imshow("image", image)
cv2.imwrite(root+"_ocr"+ext, image)
cv2.waitKey(0)
입력
PIL
PIL(OpenCV풍)
OpenCV
OpenCV라면 전각 영어(일본어)가 문자화되기 때문에 PIL을 이용해 텍스트 표시했습니다.
수고하셨습니다.
Reference
이 문제에 관하여(GCP Cloud Vision API로 텍스트 추출(Python3.6)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SatoshiGachiFujimoto/items/2ff2777ccdbc74c1c5bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ conda create -n py36 python=3.6
$ conda activate py36
$ pip install numpy
$ pip install pillow
$ pip install opencv-python
$ pip install --upgrade google-cloud-vision
from google.cloud import vision
import io
import os
import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image
def detect_text(image):
"""Detects text in the file."""
client = vision.ImageAnnotatorClient()
content = cv2.imencode(".png", image)[1].tostring()
tmp = vision.Image(content=content)
response = client.text_detection(image=tmp)
texts = response.text_annotations
if response.error.message:
raise Exception(
'{}\nFor more info on error messages, check: '
'https://cloud.google.com/apis/design/errors'.format(
response.error.message))
return texts
filename = "338px-Atomist_quote_from_Democritus.png"
root, ext = os.path.splitext(filename)
image = cv2.imread(filename, cv2.IMREAD_COLOR)
texts = detect_text(image)
fontpath ='C:\Windows\Fonts\meiryo.ttc'
font = ImageFont.truetype(fontpath, 10)
image_pil = Image.fromarray(image)
for text in texts:
print(text.description)
vertices = [(vertex.x, vertex.y) for vertex in text.bounding_poly.vertices]
# cv2.putText(image, text.description, vertices[0], cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255), 1, cv2.LINE_AA)
# cv2.rectangle(image, vertices[0], vertices[2], (0, 255, 0))
draw = ImageDraw.Draw(image_pil)
w, h = draw.textsize(text.description, font = font)
draw.text((vertices[0][0], vertices[0][1]-h), text.description, font=font, fill=(255, 255, 255, 0))
# draw.text(vertices[0], text.description, font=font, fill=(255, 255, 255, 0))
draw.rectangle((vertices[0], vertices[2]), outline=(0, 255, 0))
image = np.array(image_pil)
cv2.imshow("image", image)
cv2.imwrite(root+"_ocr"+ext, image)
cv2.waitKey(0)
Reference
이 문제에 관하여(GCP Cloud Vision API로 텍스트 추출(Python3.6)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SatoshiGachiFujimoto/items/2ff2777ccdbc74c1c5bb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)