Python 指定文件夹下识别身份证照片并写入excel表格

作者 :
免费
  • 正文
  • 需要使用百度ocr身份证识别接口,原来实名制后可以免费领取,每月2000次免费,超出比较贵。

    直接在终端上显示,搜索文件夹下的所有子目录图片,去掉未识别姓名和身份证号,写入excel表格中,替换OCR API信息即可,这个方法最狠 也最实用。

    import os
    import requests
    import base64
    import xlwt
    # 百度OCR API的相关信息
    APP_ID = '33981796'
    API_KEY = 'XDqULEZVuR9Qnt0Gt8CDncKI'
    SECRET_KEY = 'CDx9BI82ijW88FXHYv6ZGD6cALTbGika'
    # 指定文件夹路径
    folder_path = '/Users/dubaishun/Desktop/新华自考181人资料/照片1'
    # 获取访问令牌
    def get_access_token():
    # 请求URL
    auth_url = 'https://aip.baidubce.com/oauth/2.0/token'
    # 请求参数
    params = {
    'grant_type': 'client_credentials',
    'client_id': API_KEY,
    'client_secret': SECRET_KEY
    }
    # 发送POST请求获取访问令牌
    response = requests.post(auth_url, data=params)
    result = response.json()
    access_token = result['access_token']
    returnaccess_token
    # 调用百度OCR API进行身份证识别
    def recognize_id_cards(image_path):
    # 获取访问令牌
    access_token = get_access_token()
    # 请求URL
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
    # 读取图片文件
    withopen(image_path, 'rb') asf:
    image_data = base64.b64encode(f.read())
    # 请求参数
    params = {
    'id_card_side': 'front',
    'image': image_data,
    'access_token': access_token
    }
    # 发送POST请求进行识别
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    result = response.json()
    returnresult
    # 遍历文件夹中的所有图片文件进行身份证识别
    def process_images(folder_path):
    # 创建Excel工作簿和表格
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet('OCR Results')
    sheet.write(0, 0, '姓名')
    sheet.write(0, 1, '身份证号')
    # 用于记录当前写入的行数
    current_row = 1
    # 遍历文件夹中的所有图片文件
    forroot, dirs, filesinos.walk(folder_path):
    forfileinfiles:
    iffile.endswith('.jpg') orfile.endswith('.png'):
    image_path = os.path.join(root, file)
    # 调用身份证识别函数
    result = recognize_id_cards(image_path)
    if'error_code'inresult:
    # 出错处理
    print('识别失败:', result['error_msg'])
    else:
    # 提取识别结果
    if'姓名'inresult['words_result']:
    name = result['words_result']['姓名']['words']
    sheet.write(current_row, 0, name)
    print('姓名:', name)
    if'公民身份号码'inresult['words_result']:
    id_number = result['words_result']['公民身份号码']['words']
    sheet.write(current_row, 1, id_number)
    print('身份证号:', id_number)
    current_row += 1
    # 保存Excel表格
    workbook.save('ocr_results.xls')
    print('OCR识别完成,结果已保存为ocr_results.xls')
    # 执行身份证识别
    process_images(folder_path)

    在终端上显示,搜索文件夹下的所有子目录图片,包括未识别出来的,全部写入excel表格中,替换OCR API信息即可。

    import os
    import requests
    import base64
    import xlwt
    # 百度OCR API的相关信息
    APP_ID = '33981796'
    API_KEY = 'XDqULEZVuR9Qnt0Gt8CDncKI'
    SECRET_KEY = 'CDx9BI82ijW88FXHYv6ZGD6cALTbGika'
    # 指定根目录路径
    root_folder_path = '/Users/dubaishun/Desktop/自考176人身份证'
    # 获取访问令牌
    def get_access_token():
    # 请求URL
    auth_url = 'https://aip.baidubce.com/oauth/2.0/token'
    # 请求参数
    params = {
    'grant_type': 'client_credentials',
    'client_id': API_KEY,
    'client_secret': SECRET_KEY
    }
    # 发送POST请求获取访问令牌
    response = requests.post(auth_url, data=params)
    result = response.json()
    access_token = result['access_token']
    returnaccess_token
    # 调用百度OCR API进行身份证识别
    def recognize_id_cards(image_path):
    # 获取访问令牌
    access_token = get_access_token()
    # 请求URL
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
    # 读取图片文件
    withopen(image_path, 'rb') asf:
    image_data = base64.b64encode(f.read())
    # 请求参数
    params = {
    'id_card_side': 'front',
    'image': image_data,
    'access_token': access_token
    }
    # 发送POST请求进行识别
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    result = response.json()
    returnresult
    # 遍历目录下的所有图片文件进行身份证识别
    def process_images(folder_path):
    # 创建Excel工作簿和表格
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet('OCR Results')
    sheet.write(0, 0, '姓名')
    sheet.write(0, 1, '身份证号')
    # 用于记录当前写入的行数
    current_row = 1
    # 遍历目录下的所有文件和子目录
    forroot, dirs, filesinos.walk(folder_path):
    forfileinfiles:
    iffile.endswith('.jpg') orfile.endswith('.png'):
    image_path = os.path.join(root, file)
    # 调用身份证识别函数
    result = recognize_id_cards(image_path)
    if'error_code'inresult:
    # 出错处理
    print(f'识别失败: {result["error_msg"]}')
    else:
    if'姓名'inresult['words_result']:
    name = result['words_result']['姓名']['words']
    sheet.write(current_row, 0, name)
    if'公民身份号码'inresult['words_result']:
    id_number = result['words_result']['公民身份号码']['words']
    sheet.write(current_row, 1, id_number)
    current_row += 1
    print('姓名:', name)
    print('身份证号:', id_number)
    print('----------------')
    # 保存Excel表格
    workbook.save('ocr_results.xls')
    print('OCR识别完成,结果已保存为ocr_results.xls')
    # 执行身份证识别
    process_images(root_folder_path)

    在终端上显示,并保存excel表格中,替换OCR API信息即可

    import os
    import requests
    import base64
    import xlwt
    # 百度OCR API的相关信息
    APP_ID = '33981796'
    API_KEY = 'XDqULEZVuR9Qnt0Gt8CDncKI'
    SECRET_KEY = 'CDx9BI82ijW88FXHYv6ZGD6cALTbGika'
    # 指定文件夹路径
    folder_path = '/Users/dubaishun/Desktop/新华自考176人身份证'
    # 获取访问令牌
    def get_access_token():
    # 请求URL
    auth_url = 'https://aip.baidubce.com/oauth/2.0/token'
    # 请求参数
    params = {
    'grant_type': 'client_credentials',
    'client_id': API_KEY,
    'client_secret': SECRET_KEY
    }
    # 发送POST请求获取访问令牌
    response = requests.post(auth_url, data=params)
    result = response.json()
    access_token = result['access_token']
    returnaccess_token
    # 调用百度OCR API进行身份证识别
    def recognize_id_cards(image_path):
    # 获取访问令牌
    access_token = get_access_token()
    # 请求URL
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
    # 读取图片文件
    withopen(image_path, 'rb') asf:
    image_data = base64.b64encode(f.read())
    # 请求参数
    params = {
    'id_card_side': 'front',
    'image': image_data,
    'access_token': access_token
    }
    # 发送POST请求进行识别
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    result = response.json()
    returnresult
    # 遍历文件夹中的所有图片文件进行身份证识别
    def process_images():
    globalcurrent_row
    # 创建Excel工作簿和表格
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet('OCR Results')
    sheet.write(0, 0, '姓名')
    sheet.write(0, 1, '身份证号')
    # 用于记录当前写入的行数
    current_row = 1
    # 遍历文件夹中的所有图片文件
    image_files = [fforfinos.listdir(folder_path) iff.endswith('.jpg') orf.endswith('.png')]
    # 遍历图片文件进行识别
    forimage_fileinimage_files:
    image_path = os.path.join(folder_path, image_file)
    # 调用身份证识别函数
    result = recognize_id_cards(image_path)
    if'error_code'inresult:
    # 出错处理
    print('识别失败:', result['error_msg'])
    else:
    # 提取识别结果
    name = result['words_result']['姓名']['words']
    id_number = result['words_result']['公民身份号码']['words']
    sheet.write(current_row, 0, name)
    sheet.write(current_row, 1, id_number)
    current_row += 1
    print('姓名:', name)
    print('身份证号:', id_number)
    print('----------------')
    # 保存Excel表格
    workbook.save('ocr_results.xls')
    print('OCR识别完成,结果已保存为ocr_results.xls')
    # 执行身份证识别
    process_images()

    只在终端上显示姓名和识别后的身份证号码:

    import os
    import requests
    import base64
    # 百度OCR API的相关信息
    APP_ID = '33981796'
    API_KEY = 'XDqULEZVuR9Qnt0Gt8CDncKI'
    SECRET_KEY = 'CDx9BI82ijW88FXHYv6ZGD6cALTbGika'
    # 指定文件夹路径
    folder_path = '/Users/dubaishun/Desktop/新华自考176人身份证'
    # 获取访问令牌
    def get_access_token():
    # 请求URL
    auth_url = 'https://aip.baidubce.com/oauth/2.0/token'
    # 请求参数
    params = {
    'grant_type': 'client_credentials',
    'client_id': API_KEY,
    'client_secret': SECRET_KEY
    }
    # 发送POST请求获取访问令牌
    response = requests.post(auth_url, data=params)
    result = response.json()
    access_token = result['access_token']
    returnaccess_token
    # 调用百度OCR API进行身份证识别
    def recognize_id_cards(image_path):
    # 获取访问令牌
    access_token = get_access_token()
    # 请求URL
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
    # 读取图片文件
    withopen(image_path, 'rb') asf:
    image_data = base64.b64encode(f.read())
    # 请求参数
    params = {
    'id_card_side': 'front',
    'image': image_data,
    'access_token': access_token
    }
    # 发送POST请求进行识别
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    result = response.json()
    returnresult
    # 遍历文件夹中的所有图片文件进行身份证识别
    def process_images():
    # 遍历文件夹中的所有图片文件
    image_files = [fforfinos.listdir(folder_path) iff.endswith('.jpg') orf.endswith('.png')]
    # 遍历图片文件进行识别
    forimage_fileinimage_files:
    image_path = os.path.join(folder_path, image_file)
    # 调用身份证识别函数
    result = recognize_id_cards(image_path)
    if'error_code'inresult:
    # 出错处理
    print('识别失败:', result['error_msg'])
    else:
    # 提取识别结果
    name = result['words_result']['姓名']['words']
    id_number = result['words_result']['公民身份号码']['words']
    print('姓名:', name)
    print('身份证号:', id_number)
    print('----------------')
    # 执行身份证识别
    process_images()

    此方法不使用引擎识别率不够精准,但在此基础上可以做改进。

    import cv2
    import pytesseract
    import os
    from openpyxl import Workbook
    # 创建Excel工作簿
    workbook = Workbook()
    sheet = workbook.active
    sheet['A1'] = '姓名'
    sheet['B1'] = '身份证号码'
    row_index = 2
    # 指定文件夹路径
    folder_path = '/Users/dubaishun/Desktop/自考176人身份证/'
    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
    iffilename.endswith('.jpg') orfilename.endswith('.png'):
    # 读取身份证图片
    image_path = os.path.join(folder_path, filename)
    image = cv2.imread(image_path)
    # 图像预处理
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (5, 5), 0)
    # 应用阈值处理
    ret, threshold = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    # 转换为黑白反转
    threshold = cv2.bitwise_not(threshold)
    # 识别文字信息
    text = pytesseract.image_to_string(threshold, config='--psm 6')
    # 提取身份证号码
    id_number = ''.join(filter(str.isdigit, text))
    # 提取姓名
    name = None
    lines = text.split('\n')
    forlineinlines:
    if'姓名'inline:
    name = line.split('姓名')[-1].strip()
    break
    # 将结果写入Excel表格
    sheet['A' + str(row_index)] = name
    sheet['B' + str(row_index)] = id_number
    row_index += 1
    # 保存Excel文件
    workbook.save('身份证识别结果.xlsx')

    单个照片识别,姓名识别有问题,身份证号码 识别准度不高。

    import cv2
    import pytesseract
    # 读取身份证图片
    image_path = '/Users/dubaishun/Desktop/自考176人身份证/陈极木垚身份证正面.jpg'
    image = cv2.imread(image_path)
    # 图像预处理
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (5, 5), 0)
    # 应用阈值处理
    ret, threshold = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    # 转换为黑白反转
    threshold = cv2.bitwise_not(threshold)
    # 识别文字信息
    text = pytesseract.image_to_string(threshold, config='--psm 6')
    # 提取身份证号码
    id_number = ''.join(filter(str.isdigit, text))
    # 提取姓名
    name = None
    lines = text.split('\n')
    for line in lines:
    if'姓名'inline:
    name = line.split('姓名')[-1].strip()
    break
    print('姓名:', name)
    print('身份证号码:', id_number)

     

     

    END
    如本资源侵犯了您的权益,请联系投诉邮箱admin@wmphp.com进行举报!我们将在收到邮件的1个小时内处理完毕。 本站仅为平台,发布的资源均为用户投稿或转载!所有资源仅供参考学习使用,请在下载后的24小时内删除,禁止商用! Wmphp.com(完美源码)助力正版,如您有自己的原创产品,可以联系客服投稿,代理出售! Wmphp.com(完美源码)客服QQ:136882447 Wmphp.com(完美源码)商务电话(仅对企业客户/个人用户):15120086569 (微信同步) 请注意:本站不提供任何免费的技术咨询服务,为了节约时间,下载前 请确认自己会技术
    完美源码 » Python 指定文件夹下识别身份证照片并写入excel表格
    3494+

    本站勉强运行

    3673+

    用户总数

    690+

    资源总数

    0+

    今日更新

    2024-4-8

    最后更新时间