Python基于百度API识别并提取图片中文字

yizhihongxing

下面是“Python基于百度API识别并提取图片中文字”的完整攻略,包含两个实际示例:

1. 准备工作

  • 首先需要安装Python,建议安装Python 3.x版本;
  • 安装Python包管理工具pip,一般Python安装包会自带pip;
  • 注册百度API账号并开通文字识别服务,获取API Key和Secret Key;
  • 安装Python中的requests,urllib等HTTP请求库,方便发送HTTP请求,处理响应等。

2. 代码实现

  • 在Python代码中处理图片,将图片转换成二进制格式的数据,发送HTTP请求到百度API,在返回的JSON响应结果中提取出识别到的文字。

以下是一个简单示例:

import requests

# 设置API Key和Secret Key
APP_ID = 'your app id'
API_KEY = 'your api key'
SECRET_KEY = 'your secret key'

# 设置图片路径
img_path = 'test.jpg'

# 读取图片的二进制数据
with open(img_path, 'rb') as f:
    image = f.read()

# 发送HTTP请求
response = requests.post('https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=' + access_token, headers=headers, data=image)

# 解析JSON响应
result = response.json()
if 'words_result' in result:
    for words in result['words_result']:
        print(words['words'])
else:
    print('No result')

在以上代码中,我们通过requests库发送了一个POST请求,将图片的二进制数据作为POST请求的data参数送到API服务端,同时设置HTTP请求头和参数,其中HTTP请求头里需要包含请求的API Key和Secret Key,参数中需要指定要使用的API接口,以上代码中我们使用了百度OCR文字识别中的general_basic接口。

3. 示例说明1:从截屏中提取文字

我们可以使用Python来截取屏幕中的内容,也可以处理硬盘中已有的图片文件。这里我提供一个从屏幕快照中提取文字的示例代码:

import sys
import io
import os
import time
from PIL import ImageGrab
import requests

def get_access_token():
    """
    获取API的access_token
    """
    api_key = 'your api key'
    secret_key = 'your secret key'
    url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + api_key + '&client_secret=' + secret_key
    res = requests.post(url)
    x = res.json()
    return x['access_token']


def capture_screen():
    """
    截屏
    """
    return ImageGrab.grabclipboard()


def get_text(access_token, img_bin):
    """
    获取图片文字
    """
    url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=' + access_token
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    data = {'image': img_bin}
    res = requests.post(url, headers=headers, data=data)
    x = res.json()
    return x.get('words_result')[0]['words']


if __name__ == '__main__':
    access_token = get_access_token()
    img = capture_screen()
    buf = io.BytesIO()
    img.convert('RGB').save(buf, format='JPEG')
    img_bin = buf.getvalue()
    text = get_text(access_token, img_bin)
    print(text)

以上代码通过使用ImageGrab.grabclipboard()方法从剪贴板中获取屏幕快照,转换为JPEG格式二进制数据作为参数调用get_text()方法,获取图片中的文字。

4. 示例说明2:批量识别图片

如果我们需要处理一个包含多张图片的文件夹,可以使用Python的os库和PIL库来批量读取图片,实现自动识别图片中的文字。以下是示例代码:

import os
import requests
from PIL import Image

def get_access_token():
    """
    获取API的access_token
    """
    api_key = 'your api key'
    secret_key = 'your secret key'
    url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + api_key + '&client_secret=' + secret_key
    res = requests.post(url)
    x = res.json()
    return x['access_token']


def get_text(access_token, img_bin):
    """
    获取图片文字
    """
    url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=' + access_token
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    data = {'image': img_bin}
    res = requests.post(url, headers=headers, data=data)
    x = res.json()
    return x.get('words_result')[0]['words']

if __name__ == '__main__':
    access_token = get_access_token()
    img_dir = 'image_dir'
    for filename in os.listdir(img_dir):
        img_path = os.path.join(img_dir, filename)
        with open(img_path, 'rb') as f:
            img = Image.open(f)
            img_bin = f.read()
            text = get_text(access_token, img_bin)
            print('{}: {}'.format(filename, text))

以上代码中,我们通过os.listdir()方法获取包含多张图片的文件夹中所有的图片文件名,然后使用Image.open()方法打开每一个图片文件,将二进制数据作为参数调用get_text()方法,获取图片中的文字,最后打印出图片文件名和提取出的文字。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于百度API识别并提取图片中文字 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 一行代码python实现文件共享服务器

    让我来详细解释一下“一行代码python实现文件共享服务器”的完整攻略。 简介 在讲解具体实现方法之前,我们先来了解一下所使用的库和工具。 Python标准库 http.server:Python内置的HTTP服务器模块。 twisted :Python异步网络框架,用于网络编程。 这两个库都可以用于实现文件共享服务器,但在本文中我们主要关注 http.se…

    python 2023年6月5日
    00
  • Windows下实现将Pascal VOC转化为TFRecords

    下面我将详细讲解Windows下实现将Pascal VOC转化为TFRecords的完整攻略,包含以下步骤: 1. 安装Python 首先,我们需要在Windows系统中安装Python,可以从官网https://www.python.org/downloads/windows/ 下载对应版本的Python。 2. 下载Pascal VOC数据集 Pasca…

    python 2023年6月3日
    00
  • Python常用正则函数使用方法详解

    Python常用正则函数使用方法详解 当处理字符串时,正则表达式是一种非常强大的工具。Python中的re模块提供了一组函数,用于在字符串中查找、匹配、替换和分割文本。本文将详细讲解Python中常用正则函数的使用方法,包括re.match()、re.search()、re.findall()、re.sub()和re.split()。 re.match() …

    python 2023年5月14日
    00
  • 学python安装的软件总结

    学 Python 安装的软件总结 在学习和使用 Python 过程中,我们可能需要安装一些相关的软件包或工具来辅助我们进行开发或者数据处理。下面就介绍一下常见的 Python 相关软件包的安装方法,以及常见的问题及解决方法。 Python Python 是我们进行 Python 开发的核心环境,它是一种解释性语言,可以直接在命令行或者脚本中执行。我们可以通过…

    python 2023年5月30日
    00
  • 通过抓取淘宝评论为例讲解Python爬取ajax动态生成的数据(经典)

    下面是详细的攻略: 通过抓取淘宝评论为例讲解Python爬取ajax动态生成的数据 在Python中,我们可以使用requests和json模块实现爬取ajax动态生成的数据。本文将以抓取淘宝评论为例,讲解Python爬取ajax动态生成的数据的过程,并提供两个示例说明。 抓取淘宝评论的过程 在抓取淘宝评论的过程中,我们需要模拟浏览器发送请求,并解析返回的j…

    python 2023年5月14日
    00
  • Python 将压缩序列解压

    当我们使用Python进行数据处理或者图像处理时,会经常遇到压缩的序列数据。对于这种情况,Python提供了一种方便快捷的方式来解压压缩序列,即使用星号运算符。 原理说明 在Python中,我们可以将一个列表或元组,通过在前面添加一个星号操作符 * 进行解压缩。这样,列表或元组中的每个元素都将被打散,以单独的参数传递给函数或者其他需要解包的位置。具体来说,如…

    python-answer 2023年3月25日
    00
  • python排序算法之选择排序

    以下是关于“Python排序算法之选择排序”的完整攻略: 简介 选择排序是一种简单的排序算法,它的基本思想是每次从未排序的元素中选择最小的元素,将其放到已排序的元素末尾。在本教程中,我们将介绍如何使用Python实现选择排序,并提供一些示例说明。 Python选择排序实现 以下是使用Python实现选择排序的示例: def selection_sort(ar…

    python 2023年5月14日
    00
  • Python中str.format()方法的具体使用

    关于 Python 中str.format()方法的具体使用,我为您提供如下攻略: 前言 Python 中的str.format()方法是对字符串进行格式化输出的一种方法。使用这种方法可以将占位符替换成想要的值,比较灵活。 基本使用 格式化输出的格式类似于字符串模板,其中需要进行格式化的部分使用占位符 {} 来表示。例如,我们要对字符串进行格式化输出,可以使…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部