🚀 インドIDバリデータ
このプロジェクトは、インドの身分証明書類(アドハーカード、パンカード、パスポート、選挙人票、運転免許証など)の分類、検出、およびテキスト抽出を行うためのコンピュータビジョンパイプラインです。YOLO11モデルとPaddleOCRを利用しており、アドハーカードと運転免許証の表裏の画像に対応しています。
🚀 クイックスタート
このインドIDバリデータを使用することで、インドの身分証明書類の分類、検出、およびテキスト抽出を行うことができます。以下の手順に従って、セットアップと使用を行ってください。
✨ 主な機能
- 分類:
Id_Classifier
モデルを使用して、IDの種類(例:aadhar_front
, passport
)を分類します。
- 検出:特定の種類のYOLO11検出モデルを使用して、特定のフィールド(例:アドハー番号、生年月日、名前)を検出します。
- 抽出:画像の前処理(拡大、ノイズ除去、コントラスト強化)を行った後、PaddleOCRを使用して検出されたフィールドからテキストを抽出します。
対応するIDの種類:
- アドハーカード(表と裏)
- パンカード(表)
- パスポート(表)
- 選挙人票(表と裏)
- 運転免許証(表と裏)
📦 インストール
-
リポジトリをクローンする:
git clone https://huggingface.co/logasanjeev/indian-id-validator
cd indian-id-validator
-
依存関係をインストールする:
Python 3.8以上がインストールされていることを確認し、以下のコマンドを実行します。
pip install -r requirements.txt
requirements.txt
には、ultralytics
, paddleocr
, paddlepaddle
, numpy==1.24.4
, pandas==2.2.2
などが含まれています。
-
モデルをダウンロードする:
モデルはinference.py
を通じてHugging Faceリポジトリから自動的にダウンロードされます。config.json
がルートディレクトリにあることを確認してください。また、上記のUltralytics Hubのリンクを使用して、PyTorch、ONNXなどの形式でモデルをダウンロードすることもできます。
💻 使用例
Python API
分類のみ
Id_Classifier
を使用してIDの種類を識別します。
from ultralytics import YOLO
import cv2
model = YOLO("models/Id_Classifier.pt")
image = cv2.imread("samples/aadhaar_front.jpg")
results = model(image)
for result in results:
predicted_class = result.names[result.probs.top1]
confidence = result.probs.top1conf.item()
print(f"予測されたクラス: {predicted_class}, 信頼度: {confidence:.2f}")
出力:
予測されたクラス: aadhar_front, 信頼度: 1.00
エンドツーエンドの処理
inference.py
を使用して、分類、検出、およびOCRを行います。
from inference import process_id
result = process_id(
image_path="samples/aadhaar_back.jpg",
save_json=True,
output_json="detected_aadhaar_back.json",
verbose=True
)
import json
print(json.dumps(result, indent=2))
出力:
{
"アドハー": "996269466937",
"住所": "S/O Gocala Shinde Jay Bnavani Rahiwasi Seva Sangh ..."
}
パスポートの処理と可視化
パスポート画像を処理して、分類、フィールドの検出、およびテキストの抽出を行い、可視化を有効にします。
from inference import process_id
result = process_id(
image_path="samples/passport_front.jpg",
save_json=True,
output_json="detected_passport.json",
verbose=True
)
import json
print("\nパスポートの結果:")
print(json.dumps(result, indent=4))
可視化:
verbose=True
フラグを使用すると、生画像、バウンディングボックス、および抽出されたテキストを含む各検出フィールドの可視化が生成されます。以下はpassport_front.jpg
の結果です。
タイプ |
画像 |
生画像 |
 |
バウンディングボックス付き出力 |
 |
検出されたフィールド:
フィールド |
画像 |
住所 |
 |
コード |
 |
生年月日 |
 |
発行日 |
 |
有効期限 |
 |
性別 |
 |
MRZ1 |
 |
MRZ2 |
 |
名前 |
 |
国籍 |
 |
国 |
 |
発行場所 |
 |
出力:
パスポートの結果:
{
"国": "INDIAN",
"生年月日": "26/08/1996",
"発行場所": "AMRITSAR",
"発行日": "18/06/2015",
"コード": "NO461879",
"有効期限": "17/06/2025",
"住所": "SHER SINGH WALAFARIDKOTASPUNJAB",
"名前": "SHAMINDERKAUR",
"国籍": "IND",
"性別": "F",
"MRZ1": "P<INDSANDHU<<SHAMINDER<KAUR<<<<<<<<<<<<<<<<<",
"MRZ2": "NO461879<4IND9608269F2506171<<<<<<<<<<<<<<<2"
}
ターミナル
コマンドラインからinference.py
を実行します。
python inference.py samples/aadhaar_front.jpg --verbose --output-json detected_aadhaar.json
オプション:
--model
: モデルを指定します(例:Aadhaar
, Passport
)。デフォルトは自動検出です。
--no-save-json
: JSON出力を無効にします。
--verbose
: 可視化を表示します。
--classify-only
: IDの種類のみを分類します。
出力例:
検出されたドキュメントの種類: aadhar_front, 信頼度: 0.98
抽出されたテキスト:
{
"アドハー": "1234 5678 9012",
"生年月日": "01/01/1990",
"性別": "M",
"名前": "John Doe",
"住所": "123 Main St, City, State"
}
📚 ドキュメント
モデル
このパイプラインは、以下のモデルで構成されており、それぞれID検証プロセスの特定のタスクに設計されています。モデルは、それぞれのUltralytics Hubのリンクから、PyTorch、ONNX、TensorRTなどのさまざまな形式でダウンロードでき、異なる環境でのデプロイに対応しています。
モデル名 |
タイプ |
説明 |
リンク |
Id_Classifier |
YOLO11l-cls |
インドのID文書の種類(例:アドハーカード、パスポート)を分類します。 |
Ultralytics Hub |
Aadhaar |
YOLO11l |
アドハーカード(表と裏)のフィールド(アドハー番号、生年月日、住所など)を検出します。 |
Kaggle Notebook |
Driving_License |
YOLO11l |
運転免許証(表と裏)のフィールド(免許番号、生年月日、車種など)を検出します。 |
Ultralytics Hub |
Pan_Card |
YOLO11l |
パンカードのフィールド(パン番号、名前、生年月日など)を検出します。 |
Ultralytics Hub |
Passport |
YOLO11l |
パスポートのフィールド(MRZ行、生年月日、国籍など)を検出します。 |
Ultralytics Hub |
Voter_Id |
YOLO11l |
選挙人票(表と裏)のフィールド(選挙人ID、名前、住所など)を検出します。 |
Ultralytics Hub |
モデル詳細
以下は、各モデルの詳細な内訳で、検出するクラスと、カスタムインドIDデータセットでの評価指標が含まれています。
モデル名 |
タスク |
クラス |
指標 |
Id_Classifier |
画像分類 |
aadhar_back , aadhar_front , driving_license_back , driving_license_front , pan_card_front , passport , voter_id |
精度 (Top-1): 0.995, 精度 (Top-5): 1.0 |
Aadhaar |
物体検出 |
Aadhaar_Number , Aadhaar_DOB , Aadhaar_Gender , Aadhaar_Name , Aadhaar_Address |
mAP50: 0.795, mAP50-95: 0.553, 精度: 0.777, 再現率: 0.774, 適合率: 0.577 |
Driving_License |
物体検出 |
Address , Blood Group , DL No , DOB , Name , Relation With , RTO , State , Vehicle Type |
mAP50: 0.690, mAP50-95: 0.524, 精度: 0.752, 再現率: 0.669 |
Pan_Card |
物体検出 |
PAN , Name , Father's Name , DOB , Pan Card |
mAP50: 0.924, mAP50-95: 0.686, 精度: 0.902, 再現率: 0.901 |
Passport |
物体検出 |
Address , Code , DOB , DOI , EXP , Gender , MRZ1 , MRZ2 , Name , Nationality , Nation , POI |
mAP50: 0.987, mAP50-95: 0.851, 精度: 0.972, 再現率: 0.967 |
Voter_Id |
物体検出 |
Address , Age , DOB , Card Voter ID 1 Back , Card Voter ID 2 Front , Card Voter ID 2 Back , Card Voter ID 1 Front , Date of Issue , Election , Father , Gender , Name , Point , Portrait , Symbol , Voter ID |
mAP50: 0.917, mAP50-95: 0.772, 精度: 0.922, 再現率: 0.873 |
詳細については、このREADMEの先頭にあるYAMLメタデータのmodel-index
セクションを参照してください。
📚 Colabチュートリアル
サンプル画像または独自の画像を使用してモデルをテストするためのインタラクティブなチュートリアルを試してみてください。
Colabで開く
📚 リンク
🤝 コントリビューション
コントリビューションは大歓迎です!コントリビュートするには、以下の手順に従ってください。
- リポジトリをフォークします。
- ブランチを作成します:
git checkout -b feature-name
。
- 変更を含むプルリクエストを送信します。
問題の報告や機能の提案は、Hugging Face Issuesページから行ってください。
📄 ライセンス
MITライセンス