Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解

  

一、前言

随着AI技术的发展,文字识别技术也得到了广泛的应用,OCR(Text Optical Character Recognition)就是其中之一。腾讯OCR是腾讯云提供的一种文字识别服务,可以将图片中的文字识别出来。本文将介绍如何使用Python3进行腾讯OCR文字识别。

二、前提条件

在本教程中,我们需要以下几个前提条件:

  1. 已注册腾讯云账号(若没有,请前往腾讯云官网进行注册)
  2. 已创建腾讯OCR API密钥(请前往腾讯云控制台创建)
  3. 已安装Python3和相关依赖库(如requests、base64等)

三、Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解

  1. 导入依赖包

在使用Python3进行腾讯OCR文字识别前,需要先导入相关依赖库,具体如下:

import requests
import base64
import json

其中,requests库用于进行HTTP请求,base64库用于进行图片编码和解码,json库用于处理JSON数据。

  1. 准备图片

在进行文字识别前,我们需要准备一张图片,将图片保存到本地,并记录图片路径。在本例中,我们以一张名为“test.png”的图片为例。

  1. 读取图片并进行编码

将图片读取后,需要对图片进行编码,以便进行后续处理。在本例中,我们将图片进行base64编码。具体代码如下:

with open('test.png', 'rb') as f:
    img = base64.b64encode(f.read())

其中,使用了Python的with语法,以确保文件读写后都能正确关闭。

  1. 发送HTTP请求并获取OCR结果

接下来,我们需要对图片进行OCR操作。在发送HTTP请求之前,需要进行以下参数设置:

  • secretId:腾讯OCR API密钥ID
  • secretKey:腾讯OCR API密钥Key
  • img_url:图片的base64编码
  • appid:腾讯OCR AppID
  • url:要发送的HTTP请求地址

具体代码如下:

secretId = 'xxx'
secretKey = 'xxx'
img_url = str(img, encoding='utf-8')
appid = 'xxx'
url = 'https://recognition.image.myqcloud.com/ocr/general'
headers = {'Host': 'recognition.image.myqcloud.com',
           'Authorization': '', 'Content-Type': 'application/json'}
payload = {"appid": appid, "url": img_url}
payload = json.dumps(payload)
headers['Authorization'] = sign(secretId, secretKey, payload.encode('utf-8'))
response = requests.post(url=url, data=payload, headers=headers)
result = json.loads(response.content.decode('utf-8'))

其中,headers中的Authorization需要使用腾讯云提供的签名方法进行计算,以确保请求的合法性。值得注意的是,腾讯OCR有多个API,具体请求地址要根据需求进行选择。在本例中,我们选择的是通用印刷体OCR(general)。

  1. 解析OCR结果并输出

在获取OCR结果后,需要对结果进行解析并输出。具体代码如下:

for item in result["data"]["items"]:
    print(item["itemstring"])

其中,OCR返回的结果是一个JSON格式的数据,需要逐层解析后才能将其中的文字进行输出。

四、示例说明

例1:使用Python3进行腾讯OCR文字识别

在进行OCR操作前,需要确保已符合前提条件。具体代码如下:

import requests
import base64
import json

def sign(secretId, secretKey, payload):
    import hmac
    import hashlib
    import datetime
    date = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
    signStr = 'date: ' + date + '\n' + 'source: ' + 'recognition.image.myqcloud.com' + '\n' \
              + 'POST /ocr/general HTTP/1.1\n' + 'content-type: application/json\n'
    signStr += 'image='
    signStr += base64.b64encode(payload).decode('utf-8')
    signBytes = hmac.new(secretKey.encode('utf-8'), signStr.encode('utf-8'), digestmod=hashlib.sha1).digest()
    sign = base64.b64encode(signBytes).decode('utf-8')
    signature = 'hmac sha1 ' + secretId + ':' + sign
    return signature

secretId = 'xxx'
secretKey = 'xxx'
img_url = ""
with open('test.png', 'rb') as f:
    img_url = str(base64.b64encode(f.read()), encoding='utf-8')
appid = 'xxx'
url = 'https://recognition.image.myqcloud.com/ocr/general'
headers = {'Host': 'recognition.image.myqcloud.com',
           'Authorization': '', 'Content-Type': 'application/json'}
payload = {"appid": appid, "image": img_url}
payload = json.dumps(payload)
headers['Authorization'] = sign(secretId, secretKey, payload.encode('utf-8'))
response = requests.post(url=url, data=payload, headers=headers)
result = json.loads(response.content.decode('utf-8'))

for item in result["data"]["items"]:
    print(item["itemstring"])

在本例中,我们读取了名为“test.png”的图片,并将图片进行base64编码,然后使用腾讯OCR API进行OCR操作。最后,我们解析OCR结果并将其中的文字进行输出。

例2:使用Python3进行批量OCR操作

在本例中,我们假设有多张图片需要进行OCR操作,我们可以使用Python3进行批量操作。具体代码如下:

import requests
import base64
import json
import os

def sign(secretId, secretKey, payload):
    import hmac
    import hashlib
    import datetime
    date = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
    signStr = 'date: ' + date + '\n' + 'source: ' + 'recognition.image.myqcloud.com' + '\n' \
              + 'POST /ocr/general HTTP/1.1\n' + 'content-type: application/json\n'
    signStr += 'image='
    signStr += base64.b64encode(payload).decode('utf-8')
    signBytes = hmac.new(secretKey.encode('utf-8'), signStr.encode('utf-8'), digestmod=hashlib.sha1).digest()
    sign = base64.b64encode(signBytes).decode('utf-8')
    signature = 'hmac sha1 ' + secretId + ':' + sign
    return signature

secretId = 'xxx'
secretKey = 'xxx'
appid = 'xxx'
url = 'https://recognition.image.myqcloud.com/ocr/general'
headers = {'Host': 'recognition.image.myqcloud.com',
           'Authorization': '', 'Content-Type': 'application/json'}
path = "/path/to/image/folder/"
for file in os.listdir(path):
    if file.endswith(".jpg") or file.endswith(".png"):
        with open(file, 'rb') as f:
            img_url = str(base64.b64encode(f.read()), encoding='utf-8')
        payload = {"appid": appid, "image": img_url}
        payload = json.dumps(payload)
        headers['Authorization'] = sign(secretId, secretKey, payload.encode('utf-8'))
        response = requests.post(url=url, data=payload, headers=headers)
        result = json.loads(response.content.decode('utf-8'))
        for item in result["data"]["items"]:
            print(item["itemstring"])

在本例中,我们将需要OCR的图片存储在“/path/to/image/folder/”目录中,然后使用Python3进行批量操作。我们遍历该目录下的文件,如果是以“.jpg”或“.png”结尾的文件,则进行OCR操作并输出结果。

相关文章