本人用的是python3.7 ,有道接口帮助文档用有 python2.0获取坐标的demo
主要是ocr获取到题目文字所在区域坐标,再截取。
我们公司也有类似有道这个接口的ocr但是那个不能发,所以只能借用有道的发个列子。算是记录下做过的事情。
案例完整代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @version : Python 3.7.3
# @Time : 2019/8/15 17:20
import uuid
import requests
import base64
import hashlib
import time
import json
from PIL import Image
YOUDAO_URL = 'https://openapi.youdao.com/cut_question'
APP_KEY = '有道id'
APP_SECRET = '密钥'
def truncate(q):
q = bytes.decode(q)
if q is None:
return None
size = len(q)
return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]
def encrypt(signStr):
hash_algorithm = hashlib.sha256()
hash_algorithm.update(signStr.encode('utf-8'))
return hash_algorithm.hexdigest()
def do_request(data):
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
return requests.post(YOUDAO_URL, data=data, headers=headers)
def connect(imgPath):
f = open(imgPath, 'rb') # 二进制方式打开图文件
q = base64.b64encode(f.read()) # 读取文件内容,转换为base64编码
f.close()
data = {}
data['imageType'] = '1'
data['q'] = q
data['docType'] = 'json'
data['signType'] = 'v3'
curtime = str(int(time.time()))
data['curtime'] = curtime
salt = str(uuid.uuid1())
signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['salt'] = salt
data['sign'] = sign
response = do_request(data)
result = json.loads(bytes.decode(response.content))
#print(result)
for i in range(0, len(result['Result']['regions'])):
imgsave = imgPath.replace(".jpg","") + "_%d.png"%i
coordinate = result['Result']['regions'][i]['boundingBox'].split(',')
coordinate_result = (int(coordinate[0]),int(coordinate[1]),int(coordinate[4]),int(coordinate[5]))
print(coordinate_result)
image = Image.open(imgPath)
region = image.crop(coordinate_result)
region.save(imgsave)
imgPath = r'F:\studytest\2.jpg'
connect(imgPath)
原图:
切分截取效果:
不发了,就这样。如有问题敬请指点。