我正试图从一张Aadhar卡(印度)的图像中提取完整的Aadhar编号(12位)
我能够用二维码识别区域。为了提取信息,我一直在研究python库,这些库可以读取和解码印度Aadhaar卡上的安全QR码。 这两个库对于这个用例似乎特别有用:
我无法使用Aadhaar卡上的二维码解码安全二维码Information on Secure QR code is available here.请推荐可能的解决方案或一些其他方法来完成此任务
这是我使用这些库解码安全二维码的代码。 Python版本:3.8
from pyaadhaar.utils import Qr_img_to_text, isSecureQr
from pyaadhaar.deocde import AadhaarSecureQr
from pyaadhaar.deocde import AadhaarOldQr
qrData = Qr_img_to_text(sys.argv[1])
print(qrData)
if len(qrData) == 0:
print(" No QR Code Detected !!")
else:
isSecureQR = (isSecureQr(qrData[0]))
if isSecureQR:
print("Secure QR code")
try:
obj = AadhaarSecureQr(qrData[0])
except:
print("Try aadhaar-py library")
from aadhaar.qr import AadhaarSecureQR
integer_scanned_from_qr = 123456
# secure_qr = AadhaarSecureQR(integer_scanned_from_qr)
secure_qr = AadhaarSecureQR(int(qrData[0]))
decoded_secure_qr_data = secure_qr.extract_data()
print(decoded_secure_qr_data)
以下是我在这些库中面临的问题:
pyaadhaar:安全QR码解码代码,尝试将base10字符串转换为字节,但失败。 注意:对于Aadhaar卡的旧二维码格式,pyaadhaar库工作正常,此问题仅在安全二维码时出现。如下:
File "/home/piyush/libs/py38/lib/python3.8/site-packages/pyaadhaar/deocde.py", line 23, in __init__
bytes_array = base10encodedstring.to_bytes(5000, 'big').lstrip(b'\x00')
AttributeError: 'str' object has no attribute 'to_bytes'
aadhaar py:安全QR解码失败,原因是无法验证从QR码接收的整数。如下:
Traceback (most recent call last): File "/home/piyush/libs/py38/lib/python3.8/site-packages/aadhaar/qr.py", line 55, in init self.decompressed_byte_array = zlib.decompress(self.byte_array, wbits=16+zlib.MAX_WBITS) zlib.error: Error -3 while decompressing data: incorrect header check During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "aadhaarQRCode.py", line 52, in secure_qr = AadhaarSecureQR(integer_scanned_from_qr) File "/home/piyush/libs/py38/lib/python3.8/site-packages/aadhaar/qr.py", line 57, in init raise MalformedIntegerReceived('Decompression failed, please send a valid integer received from QR code') aadhaar.exceptions.MalformedIntegerReceived: Decompression failed, please send a valid integer received from QR code
对于任何需要在实际解码之前提取干净QR码ROI的人,这里有一个简单的方法,可以使用阈值、形态学操作和轮廓过滤来提取QR码
获取二值图像。Load image、grayscale、Gaussian blur、Otsu's threshold
连接各个QR轮廓。使用^{} 创建一个矩形结构内核,然后使用
cv2.MORPH_CLOSE
执行morphological operations二维码过滤器。Find contours 并使用contour approximation、contour area和aspect ratio进行过滤
这是图像处理管道
加载图像,灰度,高斯模糊,然后大津的阈值得到一个二值图像
现在,我们创建一个矩形内核和变形接近组合成一个轮廓二维码
我们使用轮廓面积、轮廓近似和纵横比找到二维码的轮廓并进行滤波。检测到的二维码以绿色突出显示
提取的ROI
代码
我想我已经确定了两个问题:
isSecureQR
返回false
)李>将输入的大小调整为2可以读取二维码:
读取、调整大小并另存为新图像:
完整的代码示例:
输出:
如您所见,这些信息是可读的
我不知道错误消息的原因。
我使用的是Python 3.6和Windows 10,没有错误
更新:
我想我找到了一个很好的QR样本here:
您可以使用以下步骤读取和解码二维码:
读取图像并转换为灰度:
使用pyzbar解码QR图像:
输出为:
isSecureQR = (isSecureQr(qrData))
返回True
使用pyaadhaar解码
qrData
完整的代码示例:
输出:
{'email_mobile_status': '3', 'referenceid': '269720190308114407437', 'name': 'Sumit Kumar', 'dob': '01-01-1984', 'gender': 'M', 'careof': 'C/O Ishwar Chand', 'district': 'East Delhi', 'landmark': '', 'house': 'B-31, 3rd Floor', 'location': '', 'pincode': '110051', 'postoffice': 'Krishna Nagar', 'state': 'Delhi', 'street': 'Radhey Shyam Park Extension', 'subdistrict': 'Gandhi Nagar', 'vtc': 'Krishna Nagar', 'adhaar_last_4_digit': '2697', 'adhaar_last_digit': '7', 'email': 'yes', 'mobile': 'yes'}
您的原始代码也适用于上图:
相关问题 更多 >
编程相关推荐