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