本周使用了百度的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 <&#61; mwidth and h <&#61; mheight:
print(filename, &#39;is OK.&#39;)
return
if (1.0 * w / mwidth) > (1.0 * h / mheight):
scale &#61; 1.0 * w / mwidth
new_im &#61; image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)
else:
scale &#61; 1.0 * h / mheight
new_im &#61; image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)
new_im.save(filename)
new_im.close()
im &#61; Image.open(local_img_path)
width, length &#61; im.size[0], im.size[1]
if width > 4096 or length > 4096:
print(&#39;img长宽&#39;, width ,length)
process_image(local_img_path)
2.图片 base64编码后小于4M
def get_file_content(file_path):
&#39;&#39;&#39;
读取文件内容,file_path可能为图片地址
:param file_path:
:return:
&#39;&#39;&#39;
with open(file_path, &#39;rb&#39;) as fp:
return fp.read()
image &#61; get_file_content(local_img_path)
data &#61; base64.b64encode(image)
img_limit &#61; 4 * 1024 * 1024
if len(data) > img_limit:
print(&#39;之前base64字节长度&#39;, len(data), "> 4M ")
process_image(local_img_path,3000,3000)
image &#61; get_file_content(local_img_path)
data &#61; base64.b64encode(image)
print(&#39;之后base64字节长度&#39;,len(data))
图片操作总结&#xff1a;
PIL提供了通用的图像处理功能&#xff0c;以及大量的基本图像操作&#xff0c;如图像缩放、旋转、颜色转换等。
基本图像操作和处理(python)
图片保存本地
python3中urllib.request模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。
import urllib.request as request
local_img_path &#61; &#39;temp_img.jpg&#39;
request.urlretrieve(img_url, local_img_path)