ocr识别-总结python图片操作

本周使用了百度的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))

图片操作总结:

  1. PIL提供了通用的图像处理功能,以及大量的基本图像操作,如图像缩放、旋转、颜色转换等。
    基本图像操作和处理(python)

  2. 图片裁剪
    Python实现图片裁剪的两种方式——Pillow和OpenCV

  3. 图片保存本地
    python3中urllib.request模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。

	import urllib.request as request
	
    local_img_path = 'temp_img.jpg'
    request.urlretrieve(img_url, local_img_path)

你可能感兴趣的:(python,python)