文字自动识别在我们平时生活中还是可以见到一些,比如简单的验证码识别,不少服务商也提供了这种识别服务, 本文以百度的OCR服务为例,简单的介绍了下其使用方法。

百度OCR文字识别

  • 服务商: APIStore
  • 所属分类: 工具
  • 更新时间: 2015-06-08
  • apikey: 42d199bc0a50cd8e109ff880ecc444fe
  • 服务简介: 文字识别是百度自然场景OCR服务,依托百度业界领先的OCR算法,提供了整图文字检测、识别、整图文字识别、整图文字行定位和单字图像识别等功能。服务尚在试运行阶段,暂时未全面放开,有大规模商用需求的请联系APIStore官方,邮箱apistore@baidu.com。

API

  • 接口地址:http://apis.baidu.com/apistore/idlocr/ocr
  • 请求方法:POST
  • 请求参数:
参数名 类型 必填 参数位置 描述 默认值
fromdevice string bodyParam 来源,例如:android、iPhone、pc等 pc
clientip string bodyParam 客户端出口IP 10.10.10.0
detecttype string bodyParam OCR接口类型,“LocateRecognize”;“Recognize”;“Locate”;“SingleCharRecognize”。LocateRecognize:整图文字检测、识别,以行为单位;Locate:整图文字行定位;Recognize:整图文字识别;SingleCharRecognize:单字图像识别 LocateRecognize
languagetype string bodyParam 要检测的文字类型:目前支持 1. CHN_ENG(中英) 2. ENG 3.JAP(日文) 4.KOR(韩文) ,不填写这个字段默认为CHN_ENG CHN_ENG
imagetype string bodyParam 图片资源类型, 1.表示经过BASE64编码后的字串,然后需要经过urlencode处理(特别重要);2.图片原文件 1
image string bodyParam 图片资源,目前仅支持jpg格式,原始图片size需小于300k 略(图片8.jpg的base64码)
apikey string header API密钥 您自己的apikey

实例

curl 示例

curl 'http://apis.baidu.com/apistore/idlocr/ocr' --data 'fromdevice=pc&clientip=10.10.10.0&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image=/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDABMNDxEPDBMREBEWFRMXHTAfHRsbHTsqLSMwRj5KSUU+RENNV29eTVJpU0NEYYRiaXN3fX59S12Jkoh5kW96fXj/2wBDARUWFh0ZHTkfHzl4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHj/wAARCAAfACEDAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQDBQb/xAAjEAACAgICAgEFAAAAAAAAAAABAgADBBESIRMxBSIyQXGB/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APawEBAQEBAgy8i8ZTVV3UY6V1eU2XoWDDZB19S646Gz39w9fkKsW1r8Wm2yo1PYis1be0JG9H9QNYCAgc35Cl3yuVuJZl0cB41rZQa32dt2y6OuOiOxo61vsLcVblxaVyXD3hFFjL6La7I/sDWAgICAgICB/9k=' -H 'apikey:42d199bc0a50cd8e109ff880ecc444fe'

python 示例

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import sys, urllib, urllib2, json

    url = 'http://apis.baidu.com/apistore/idlocr/ocr'

    data = {}
    data['fromdevice'] = "pc"
    data['clientip'] = "10.10.10.0"
    data['detecttype'] = "LocateRecognize"
    data['languagetype'] = "CHN_ENG"
    data['imagetype'] = "1"
    data['image'] = "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDABMNDxEPDBMREBEWFRMXHTAfHRsbHTsqLSMwRj5KSUU+RENNV29eTVJpU0NEYYRiaXN3fX59S12Jkoh5kW96fXj/2wBDARUWFh0ZHTkfHzl4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHj/wAARCAAfACEDAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQDBQb/xAAjEAACAgICAgEFAAAAAAAAAAABAgADBBESIRMxBSIyQXGB/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APawEBAQEBAgy8i8ZTVV3UY6V1eU2XoWDDZB19S646Gz39w9fkKsW1r8Wm2yo1PYis1be0JG9H9QNYCAgc35Cl3yuVuJZl0cB41rZQa32dt2y6OuOiOxo61vsLcVblxaVyXD3hFFjL6La7I/sDWAgICAgICB/9k="
    decoded_data = urllib.urlencode(data)
    req = urllib2.Request(url, data = decoded_data)

    req.add_header("Content-Type", "application/x-www-form-urlencoded")
    req.add_header("apikey", "42d199bc0a50cd8e109ff880ecc444fe")

    resp = urllib2.urlopen(req)
    content = resp.read()
    if(content):
        print(content)

结果:

{"errNum":"0","errMsg":"success","querySign":"4133219207,2531900678","retData":[{"rect":{"left":"0","top":"0","width":"33","height":"31"},"word":"  8"}]}

如果想使用自己的文件,就要注意对文件内容进行编码,同时要去除其中的\n,否则会出现请求参数非法的错误。 具体处理文件的如下:

image_data = open('IMG.jpg', 'rb').read()
data['image'] = image_data.encode('base64').replace('\n', '')

IMG.jpg 替换成需要的文件名就可以了。

如图片:

random.jpg

返回结果:

{u'errNum': u'0', u'retData': [{u'word': u'91691', u'rect': {u'width': u'65', u'top': u'2', u'height': u'15', u'left': u'3'}}], u'querySign': u'1748889226,621381071', u'errMsg': u'success'}

识别出了内容为91691