需要使用百度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表格
完美源码 » Python 指定文件夹下识别身份证照片并写入excel表格