Regex extrahiert CNIC-Details nicht korrekt aus Text, der über EasyOCR in Python extrahiert wurde
Posted: 03 Jan 2025, 11:28
Ich versuche, mit EasyOCR und Regex in Python persönliche Daten (wie Name, Geschlecht, Geburtsdatum usw.) aus einem Bild eines CNIC (Computerized National Identity Card) zu extrahieren.
Ich versuche, die relevanten Daten über Regex abzurufen, einige Felder, wie Geburtsdatum, Geschlecht und Aufenthaltsland, werden nicht korrekt extrahiert.
Problem: Ich habe ein CNIC-Bild aus dem ich EasyOCR verwende, um Text zu extrahieren. Ich verwende reguläre Ausdrücke, um Felder wie CNIC-Nummer, Name, Geschlecht usw. zu erfassen. Allerdings erhalte ich für einige Felder eine falsche oder fehlende Ausgabe.
Ich wollte, dass die Ausgabe eine Notepad-Datei ist Darin werden die CNIC-Nummer und die restlichen anderen Felder geschrieben.
Hier ist der Code;
Gewünschte Ausgabe:
Ich erwarte, dass die Ausgabe eine Notepad-Datei mit ordnungsgemäß extrahierten CNIC-Details ist, wie zum Beispiel:
Die Felder Geschlecht, Geburtsdatum und Aufenthaltsland werden nicht korrekt (oder manchmal überhaupt nicht) extrahiert.< /p>
Was ich versucht habe:
Kann jemand? Helfen Sie mir, das Problem zu beheben, oder schlagen Sie Verbesserungen an den Regex-Mustern vor?
Eingabe: Die Eingabe ist ein Cnic-Bild
Hier ist die Ausgabe:< /p>
Ich versuche, die relevanten Daten über Regex abzurufen, einige Felder, wie Geburtsdatum, Geschlecht und Aufenthaltsland, werden nicht korrekt extrahiert.
Problem: Ich habe ein CNIC-Bild aus dem ich EasyOCR verwende, um Text zu extrahieren. Ich verwende reguläre Ausdrücke, um Felder wie CNIC-Nummer, Name, Geschlecht usw. zu erfassen. Allerdings erhalte ich für einige Felder eine falsche oder fehlende Ausgabe.
Ich wollte, dass die Ausgabe eine Notepad-Datei ist Darin werden die CNIC-Nummer und die restlichen anderen Felder geschrieben.
Hier ist der Code;
Code: Select all
import easyocr
txt = easyocr.Reader(['en'])
text = txt.readtext(image_path)
# Join OCR detected text into a single string and clean it up
etext = " ".join([item[1] for item in text])
print("Cleaned Extracted Text:\n", etext) # Debugging the cleaned text
Code: Select all
# Use regular expressions to extract relevant data
cnic_data = {}
# Regular expressions for extracting CNIC number, name, father name, dob etc.
cnic_number_pattern = r'(\d{5}-\d{7}-\d{1})'
name_pattern = r'Name\s*\s*([A-Za-z\s]+)'
father_name_pattern = r'Father\s*Name\s*[:\-\s]*([A-Za-z\s]+(?:\s+[A-Za-z\s]+)*)'
gender_pattern = r'Gender\s*[:\-\s]*(?:M|F|Male|Female)'
dob_pattern = r'Date\s*of\s*Birth\s*[:\-\s]*(\d{2}-\d{2}-\d{4})' country_of_stay_pattern = r'Country\s*of\s*Stay\s*[:\-\s]*([A-Za-z\s]+)'
# If a match is found, save it, otherwise mark it as not found
cnic_data['CNIC Number'] = re.search(cnic_number_pattern, etext)
cnic_data['Name'] = re.search(name_pattern, etext)
cnic_data['Father Name'] = re.search(father_name_pattern, etext)
cnic_data['Gender'] = re.search(gender_pattern, etext)
cnic_data['Date of Birth'] = re.search(dob_pattern, etext)
cnic_data['Country of Stay'] = re.search(country_of_stay_pattern, etext)
# Extracting the values from regex matches
cnic_data = {key: (match.group(1) if match else "Not Found") for key, match in cnic_data.items()}
with open(file_path, 'w') as f:
for key, value in cnic_data.items():
f.write(f"{key}: {value}\n")
print(f"Data has been written to {file_path}")
Ich erwarte, dass die Ausgabe eine Notepad-Datei mit ordnungsgemäß extrahierten CNIC-Details ist, wie zum Beispiel:
Code: Select all
CNIC Number: 37403-9637109-9
Name: Muhammad Talha Bin Maghfoor
Father Name: Maghfoor Ahmed Gender
Gender: M
Date of Birth: 11.01.1999
Country of Stay: Pakistan
Was ich versucht habe:
- Ich habe sichergestellt, dass die Feldnamen in den Regex-Mustern (z. B Name, Vatername, Geburtsdatum,, Aufenthaltsland) stimmen mit dem überein, was im aus dem CNIC-Bild extrahierten Text erscheint.
Code: Select all
Gender
- Das habe ich Ich habe versucht, die Regex-Muster anzupassen, aber das Problem besteht weiterhin.
Kann jemand? Helfen Sie mir, das Problem zu beheben, oder schlagen Sie Verbesserungen an den Regex-Mustern vor?
Eingabe: Die Eingabe ist ein Cnic-Bild
Hier ist die Ausgabe:< /p>
Code: Select all
Actual output:
PAKISTAN National Identity Card ISLAMIC REPUBLIC OF PAKISTAN Name Muhammad Talha Bin Maghfoor Father Name Maghfoor Ahmed Gender Country of Stay M Pakistan Identity Number Date of Birth 37403-9637109-9 11.01.1999 Date of Issue Date of Expiry 03.02.2024 03.02.2034
CNIC Number: 37403-9637109-9
Name: Muhammad Talha Bin Maghfoor
Father Name: Maghfoor Ahmed Gender Country of Stay M Pakistan Identity Number Date of Birth
Gender: Not Found
Date of Birth: Not Found
Country of Stay: M Pakistan Identity Number Date of Birth
Data has been written to cnic_data.txt