Python实现批量识别银行卡号码以及自动写入Excel表格步骤详解

Python实现批量识别银行卡号码以及自动写入Excel表格步骤详解

准备工作

在开始编写代码之前,需要安装以下库:

  • requests:用于发送HTTP请求
  • xlwt、xlrd:用于读写Excel文件
  • pillow:用于图像处理

安装方式:

pip install requests xlrd xlwt pillow

同时,还需要下载 tesseract-ocr 软件进行安装,并将其加入环境变量中。tesseract-ocr 用于文字识别。

代码编写

1. 获取银行卡号码

首先,我们需要从银行卡图片中获取银行卡号码。我们可以将图片上传到第三方 OCR 识别平台,或者使用 tesseract-ocr 进行本地文字识别。这里我们使用第一种方式,将图片上传到阿里云的 OCR 识别接口。

import os
import base64
import requests
import json

# 图片路径
image_path = 'bankcard.jpg'

# 阿里云 OCR 接口 URL
ocr_url = 'https://ocrapi- general. m.taobao.com/ocrservice/ general'

# 阿里云 appcode
appcode = 'your_appcode'

# 打开图片文件
try:
    with open(image_path, 'rb') as f:
        image_data = f.read()
except Exception as e:
    print('图片文件打开失败!', str(e))
    exit()

# 将图片数据转成 Base64 编码
image_base64 = base64.b64encode(image_data).decode('utf-8')

# 构造请求参数
param = {'img': image_base64}

# 发送 POST 请求
header = {'Authorization': 'APPCODE ' + appcode}
response = requests.post(ocr_url, headers=header, data=param)
response.encoding = 'utf-8'
result = json.loads(response.text)

# 银行卡号码
card_number = None

# 从结果中获取银行卡号码
if 'ret' in result:
    for item in result['ret']:
        if 'word' in item and '卡号' in item['word']:
            card_number = item['itemstring']

# 打印银行卡号码
print(card_number)

2. 写入 Excel 文件

接下来,我们将获取到的银行卡号码写入 Excel 文件中。我们使用 xlwt 库来创建并写入 Excel 文件。

import os
import base64
import requests
import json
import xlwt

# 图片路径
image_path = 'bankcard.jpg'

# Excel 文件名
excel_file = 'bankcards.xls'

# 阿里云 OCR 接口 URL
ocr_url = 'https://ocrapi- general. m.taobao.com/ocrservice/ general'

# 阿里云 appcode
appcode = 'your_appcode'

# 打开图片文件
try:
    with open(image_path, 'rb') as f:
        image_data = f.read()
except Exception as e:
    print('图片文件打开失败!', str(e))
    exit()

# 将图片数据转成 Base64 编码
image_base64 = base64.b64encode(image_data).decode('utf-8')

# 构造请求参数
param = {'img': image_base64}

# 发送 POST 请求
header = {'Authorization': 'APPCODE ' + appcode}
response = requests.post(ocr_url, headers=header, data=param)
response.encoding = 'utf-8'
result = json.loads(response.text)

# 银行卡号码
card_number = None

# 从结果中获取银行卡号码
if 'ret' in result:
    for item in result['ret']:
        if 'word' in item and '卡号' in item['word']:
            card_number = item['itemstring']

# 写入 Excel 文件
if card_number is not None:
    # 创建 Excel 文件
    workbook = xlwt.Workbook(encoding='utf-8')
    sheet = workbook.add_sheet('银行卡号码')

    # 写入表头
    sheet.write(0, 0, '银行卡号码')

    # 写入数据
    sheet.write(1, 0, card_number)

    # 保存 Excel 文件
    workbook.save(excel_file)

    print('银行卡号码写入Excel成功!')
else:
    print('未能获取银行卡号码!')

示例说明

示例一

假设我们有一批银行卡图片,存放在 bankcards 文件夹中,我们可以使用以下代码对其中的每张图片进行处理,并将结果写入 Excel 文件中。

import os
import base64
import requests
import json
import xlwt

# 图片目录
image_dir = 'bankcards'

# Excel 文件名
excel_file = 'bankcards.xls'

# 阿里云 OCR 接口 URL
ocr_url = 'https://ocrapi- general. m.taobao.com/ocrservice/ general'

# 阿里云 appcode
appcode = 'your_appcode'


# 处理一张图片
def process_image(image_path):
    # 打开图片文件
    try:
        with open(image_path, 'rb') as f:
            image_data = f.read()
    except Exception as e:
        print('图片文件打开失败!', str(e))
        return None

    # 将图片数据转成 Base64 编码
    image_base64 = base64.b64encode(image_data).decode('utf-8')

    # 构造请求参数
    param = {'img': image_base64}

    # 发送 POST 请求
    header = {'Authorization': 'APPCODE ' + appcode}
    response = requests.post(ocr_url, headers=header, data=param)
    response.encoding = 'utf-8'
    result = json.loads(response.text)

    # 银行卡号码
    card_number = None

    # 从结果中获取银行卡号码
    if 'ret' in result:
        for item in result['ret']:
            if 'word' in item and '卡号' in item['word']:
                card_number = item['itemstring']

    return card_number


# 处理所有图片
card_numbers = []
for filename in os.listdir(image_dir):
    if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
        image_path = os.path.join(image_dir, filename)
        card_number = process_image(image_path)
        if card_number is not None:
            card_numbers.append(card_number)
            print('处理图片', filename, '成功!')
        else:
            print('处理图片', filename, '失败!')

# 写入 Excel 文件
if len(card_numbers) > 0:

    # 创建 Excel 文件
    workbook = xlwt.Workbook(encoding='utf-8')
    sheet = workbook.add_sheet('银行卡号码')

    # 写入表头
    sheet.write(0, 0, '银行卡号码')

    # 写入数据
    for i in range(len(card_numbers)):
        sheet.write(i+1, 0, card_numbers[i])

    # 保存 Excel 文件
    workbook.save(excel_file)

    print('银行卡号码写入Excel成功!')
else:
    print('未能获取任何银行卡号码!')

示例二

假设我们需要在一个 Web 应用程序中使用此功能,让用户上传银行卡图片并进行识别,并显示结果和下载 Excel 文件。我们可以使用以下代码进行实现。这里我们使用 flask 框架。

import os
import base64
import requests
import json
import xlwt

from flask import Flask, request, render_template, send_file, redirect

app = Flask(__name__)


# 首页
@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'GET':
        return render_template('index.html')
    elif request.method == 'POST':
        # 获取上传的文件
        file = request.files.get('file')
        if not file:
            return render_template('index.html', error='请选择文件!')

        # 保存文件
        save_path = os.path.join('static', 'uploads', file.filename)
        file.save(save_path)

        # 处理文件
        card_number = process_image(save_path)

        # 返回结果
        if card_number is not None:
            return render_template('result.html', card_number=card_number)
        else:
            return render_template('result.html', error='未能获取银行卡号码!')


# 下载 Excel 文件
@app.route('/download', methods=['GET'])
def download():
    # 写入 Excel 文件
    card_numbers = []
    for filename in os.listdir(os.path.join('static', 'uploads')):
        if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
            image_path = os.path.join('static', 'uploads', filename)
            card_number = process_image(image_path)
            if card_number is not None:
                card_numbers.append(card_number)

    if len(card_numbers) > 0:

        # 创建 Excel 文件
        excel_file = 'static/bankcards.xls'
        workbook = xlwt.Workbook(encoding='utf-8')
        sheet = workbook.add_sheet('银行卡号码')

        # 写入表头
        sheet.write(0, 0, '银行卡号码')

        # 写入数据
        for i in range(len(card_numbers)):
            sheet.write(i+1, 0, card_numbers[i])

        # 保存 Excel 文件
        workbook.save(excel_file)

        # 返回 Excel 文件
        return send_file('static/bankcards.xls', as_attachment=True)
    else:
        return redirect('/')


# 处理图片
def process_image(image_path):
    # 打开图片文件
    try:
        with open(image_path, 'rb') as f:
            image_data = f.read()
    except Exception as e:
        print('图片文件打开失败!', str(e))
        return None

    # 将图片数据转成 Base64 编码
    image_base64 = base64.b64encode(image_data).decode('utf-8')

    # 构造请求参数
    ocr_url = 'https://ocrapi- general. m.taobao.com/ocrservice/ general'
    appcode = 'your_appcode'
    param = {'img': image_base64}
    header = {'Authorization': 'APPCODE ' + appcode}

    # 发送 POST 请求
    response = requests.post(ocr_url, headers=header, data=param)
    response.encoding = 'utf-8'
    result = json.loads(response.text)

    # 银行卡号码
    card_number = None

    # 从结果中获取银行卡号码
    if 'ret' in result:
        for item in result['ret']:
            if 'word' in item and '卡号' in item['word']:
                card_number = item['itemstring']

    return card_number


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

这样,我们就可以在 Web 应用程序中使用银行卡识别和写入 Excel 的功能了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现批量识别银行卡号码以及自动写入Excel表格步骤详解 - Python技术站

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

相关文章

  • 安装Nginx+Lua开发环境

    安装Nginx+Lua开发环境需要进行以下步骤: 安装依赖包 在安装Nginx之前,需要安装一些依赖包: sudo apt-get update sudo apt-get install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev 下载并编译Nginx 在官网 https://…

    人工智能概览 2023年5月25日
    00
  • Nginx的信号控制

    Nginx是一个高性能的Web服务器,也是一个反向代理服务器。在Nginx运行期间,我们可以通过向其发送不同的信号来控制其行为。这些信号包括但不限于关闭、重载配置文件、重新打开日志文件等等。本篇文章将对Nginx信号控制进行详细介绍,包括具体操作和示例说明。 Nginx的信号控制 Nginx主进程会监听各类信号,进而来改变其执行状态。Nginx的信号可以分为…

    人工智能概览 2023年5月25日
    00
  • 关于docker清理Overlay2占用磁盘空间的问题(亲测有效)

    首先,我们需要了解Overlay2是一种在Docker中用于实现镜像分层的存储驱动程序。但随着我们不断地使用Docker创建、启动和停止容器,Overlay2可能会存储大量的临时文件,从而占用大量的磁盘空间。因此,需要清理这些临时文件以释放磁盘空间。以下是具体的步骤: 1. 停止所有正在运行的容器 使用下面的命令来停止所有正在运行的Docker容器: doc…

    人工智能概览 2023年5月25日
    00
  • mongodb出现id重复问题的简单解决办法

    下面是详细讲解“mongodb出现id重复问题的简单解决办法”的完整攻略。 问题描述 在使用 mongodb 进行数据存储时,我们通常都会在数据文档中添加一个 _id 字段作为唯一标识符。但是,在多个文档同时插入时,可能会出现 _id 重复的问题,这时需要解决。 解决方案 在 mongodb 中,我们可以通过以下方式来解决 _id 重复的问题。 方案一:使用…

    人工智能概论 2023年5月25日
    00
  • Pytorch中的VGG实现修改最后一层FC

    下面是PyTorch中修改VGG网络最后一层全连接层的攻略: 步骤一:导入相关库 首先需要导入相关的PyTorch库,主要包括: torch:PyTorch的核心库; torchvision:PyTorch的图像处理库,提供了很多常用的卷积神经网络的实现,包括VGG等; nn:PyTorch中的神经网络模块,用于构建神经网络模型。 步骤二:定义VGG模型 导…

    人工智能概论 2023年5月25日
    00
  • 用Python给二维码图片添加提示文字

    添加提示文字的思路: 要给二维码添加提示文字,需要先生成二维码图像,然后在图像上添加文字。Python中有很多库可以生成二维码图像,例如qrcode、pyqrcode等,这里以qrcode为例讲解。 qrcode库中的QRCode类可以生成二维码的矩阵数据,然后将矩阵转换成图片,最后使用Pillow库中的ImageDraw类向图片中添加文字。 示例1:生成一…

    人工智能概览 2023年5月25日
    00
  • Ubuntu18.04安装opencv 3.2.0的解决方法

    下面是Ubuntu18.04安装opencv 3.2.0的解决方法攻略: 一、安装依赖项 首先,要安装一些基本依赖项。在终端中执行以下命令: sudo apt-get update sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev li…

    人工智能概览 2023年5月25日
    00
  • 详解Android代码混淆实战

    下面将针对“详解Android代码混淆实战”的完整攻略,进行一步一步的详细讲解。 一、背景知识 在编写Android应用程序时,我们会编写大量的Java代码、XML布局文件等。但这些代码在发布到市场后,可能会被反编译,导致程序逻辑被泄露。为了保护代码不被反编译,我们需要进行代码混淆。 代码混淆是将原有的代码进行混淆、压缩、加密等操作,使得反编译的难度加大,从…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部