最近朋友需要一個人證比對軟體需要實現以下功能: 1. 通過攝像頭實時採集人臉圖像 2. 通過身份證讀卡器採集身份證信息 和 身份證照片 3. 使用實時人臉照片 和 身份證照片做相似度比對 4. 比對後返回相似度,或者返回同一人,非同一人 5. 實時採集照片 和 身份證信息照片存檔,方便以後查閱 ## ...
最近朋友需要一個人證比對軟體需要實現以下功能:
- 通過攝像頭實時採集人臉圖像
- 通過身份證讀卡器採集身份證信息 和 身份證照片
- 使用實時人臉照片 和 身份證照片做相似度比對
- 比對後返回相似度,或者返回同一人,非同一人
- 實時採集照片 和 身份證信息照片存檔,方便以後查閱
準備
- 攝像頭採用普通電腦usb攝像頭
- 身份證讀卡器採用 華視 CVR-100UC
- 人臉識別軟體使用 虹軟免費SDK
為什麼使用虹軟人臉識別演算法,前期使用了很多開源演算法(dlib,face_recognition),準確率都不高,相似度本人對比和非本人對比,相似度都在50%~70%,很難判斷是否一人,在網上找到了虹軟人臉演算法(免費離線使用,每年聯網激活一次),測試後準去率非常高,跟10年前的身份證圖像 比對相似度94%,今年的身份證相似度98%,非本人30%一下,可以很方便的進行人證比對。
python 調用虹軟SDK 參考以下鏈接:
倉庫鏈接 https://gitee.com/shellcoder/ArcFace-python
python 調用華視 CVR-100UC DLL 參考以下鏈接:
https://blog.csdn.net/weixin_52521533/article/details/122393567
遇到的坑
測試本地圖片比對,提示90127錯誤,通過查詢虹軟文檔
錯誤碼說明:圖片寬高不支持,寬度需四位元組對齊
詳細說明:SDK對待處理圖像的寬高做了限制:
1.所有支持的格式的圖像寬度為4的倍數;
2.YUYV/I420/NV21/NV12格式的圖片高度為2的倍數;
3.BGR24/GRAY/DEPTH_U16格式的圖片高度不限制;
建議:若不符合可對圖片進行適當的裁剪
通過以下代碼對圖片進行裁切處理
def process_image(image_path):
try:
img = cv2.imread(image_path)
if img is None:
raise Exception(f"Failed to read image: {image_path}")
# 獲取原始圖片的寬度和高度
height, width = img.shape[:2]
# 計算調整後的寬度和高度
new_width = width - (width % 4)
new_height = height - (height % 2)
# 調整圖片大小
resized_img = cv2.resize(img, (new_width, new_height))
return resized_img
except Exception as e:
print(f"Error: {e}")
return None
程式實現
如有需要源碼請添加微信:
可支持定製身份證讀卡器(有償)