本周使用了百度的OCR图片识别服务,遇到了一些问题,这里总结一下。
其中api中说明识别限制:
1.图片 分辨率不高于4096*4096
2.图片 base64编码后小于4M
超过后,需要重新上传
针对这两个要求做一下图片处理,主要使用python的PIL包
思路主要是:超过限制的就缩小图片分辨率
1.图片 分辨率不高于4096*4096
from PIL import Image
#等比例缩小
def process_image(filename, mwidth=4000, mheight=4000):
image = Image.open(filename)
w, h = image.size
if w <= mwidth and h <= mheight:
print(filename, 'is OK.')
return
if (1.0 * w / mwidth) > (1.0 * h / mheight):
scale = 1.0 * w / mwidth
new_im = image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)
else:
scale = 1.0 * h / mheight
new_im = image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)
new_im.save(filename)
new_im.close()
im = Image.open(local_img_path)
width, length = im.size[0], im.size[1]
if width > 4096 or length > 4096:
print('img长宽', width ,length)
process_image(local_img_path)
2.图片 base64编码后小于4M
def get_file_content(file_path):
'''
读取文件内容,file_path可能为图片地址
:param file_path:
:return:
'''
with open(file_path, 'rb') as fp:
return fp.read()
image = get_file_content(local_img_path)
data = base64.b64encode(image)
img_limit = 4 * 1024 * 1024
if len(data) > img_limit:
print('之前base64字节长度', len(data), "> 4M ")
process_image(local_img_path,3000,3000)
image = get_file_content(local_img_path)
data = base64.b64encode(image)
print('之后base64字节长度',len(data))
图片操作总结:
-
PIL提供了通用的图像处理功能,以及大量的基本图像操作,如图像缩放、旋转、颜色转换等。
基本图像操作和处理(python) -
图片保存本地
python3中urllib.request模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。
import urllib.request as request
local_img_path = 'temp_img.jpg'
request.urlretrieve(img_url, local_img_path)