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日

相关文章

  • Mongodb设置TTL索引自动清除数据与过期数据的方法

    下面是Mongodb设置TTL索引自动清除数据与过期数据的完整攻略: 什么是TTL索引? TTL(Time-To-Live)即过期时间,是指一条文档在数据库中存储的时限。MongoDB 通过创建 TTL 索引来自动清除过期的文档,TTL 索引是一种在指定时间后自动删除文档的索引类型。它通过在文档中指定一个时间字段,MongoDB会在这个时间字段上创建一个大量…

    人工智能概览 2023年5月25日
    00
  • Android中dumpsys命令用法简单介绍

    Android中dumpsys命令用法简单介绍 在Android中,dumpsys是一个很常用的命令行工具,它可以用来获取系统的一些状态信息和调试信息,比如Activity、内存、服务等等。 dumpsys命令的用法 使用dumpsys命令需要在Android系统的shell环境中执行,在终端或ADB shell中运行以下命令: adb shell dump…

    人工智能概览 2023年5月25日
    00
  • 树莓派64位系统安装libjasper-dev显示无法定位软件包问题

    以下是针对“树莓派64位系统安装libjasper-dev显示无法定位软件包问题”的完整攻略。 问题背景 在安装树莓派64位系统时,可能会遇到需要安装libjasper-dev软件包的情况,但是在执行安装命令时会提示“无法定位软件包”的错误信息。 解决方案 方案一:添加软件源后更新 可以尝试先添加armhf架构软件源,并更新软件包列表,再尝试安装libjas…

    人工智能概览 2023年5月25日
    00
  • 阿里云申请云盾免费SSL证书(https)

    下面是阿里云申请云盾免费SSL证书的完整攻略: 1. 登陆阿里云控制台 首先,在浏览器中打开阿里云官网,通过登录阿里云账号进入阿里云控制台。 2. 进入SSL证书申请页面 在控制台中,找到云盾的入口,点击进入云盾页面。在左侧导航条中找到“证书管理”,再点击“SSL证书申请”进入申请页面。 3. 创建证书 进入申请页面后,首先选择“免费证书”,然后填写域名,选…

    人工智能概览 2023年5月25日
    00
  • Python中在for循环中嵌套使用if和else语句的技巧

    Python中的for循环结构可以嵌套if和else语句,这使得代码的灵活性增加了不少。在这里,我们将为大家详细讲解如何在Python中嵌套使用if和else语句。 为什么使用for循环中嵌套if和else语句 在处理数据集等需要遍历的数据结构时,经常需要在循环内使用if和else结构来筛选符合条件的数据。嵌套使用if和else语句可以进一步判断符合条件的数…

    人工智能概论 2023年5月25日
    00
  • Flask解决跨域的问题示例代码

    首先,Flask解决跨域的问题可以通过Flask-CORS扩展来实现。在使用Flask-CORS前,需要安装Flask-CORS扩展,可以通过pip install flask-cors命令进行安装。 Flask-CORS提供了CORS支持,可以在Flask应用程序中添加跨域资源共享功能,通过设置响应头中的Access-Control-Allow-Origi…

    人工智能概论 2023年5月25日
    00
  • Python 绘制酷炫的三维图步骤详解

    以下是关于“Python 绘制酷炫的三维图步骤详解”的完整攻略: 1. 安装必要的库 要绘制三维图,需要用到 matplotlib 库和 mpl_toolkits.mplot3d 库。可以使用 pip 安装它们: !pip install matplotlib !pip install –user matplotlib 2. 导入库 在代码中导入必要的库:…

    人工智能概览 2023年5月25日
    00
  • SpringBoot整合之SpringBoot整合MongoDB的详细步骤

    下面是Spring Boot整合MongoDB的详细步骤: 准备工作 首先,我们需要在项目的pom.xml文件中添加Maven依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId&gt…

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