OCR извлекает текст правильно. Однако, когда я пытаюсь получить соответствующие данные с помощью регулярного выражения, некоторые поля, такие как дата рождения, пол и страна пребывания, извлекаются неправильно.
Проблема: у меня есть изображение CNIC, из которого я использую EasyOCR для извлечения текста. Я использую регулярные выражения для сбора таких полей, как номер CNIC, имя, пол и т. д. Однако для некоторых полей я получаю неправильные или отсутствующие данные.
Вот код;
Я использую EasyOCR для извлечения текста из изображения CNIC:
Код: Выделить всё
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
# 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()}
return cnic_data
Я ожидаю, что результатом будет словарь с правильно извлеченными данными CNIC, например:
{
«Номер CNIC»: «37403-9637109-9»,
«Имя»: «Мухаммад Талха бин Магфур»,
«Имя отца»: «Магфур» Ахмед",
"Пол": "М",
"Дата рождения": "11.01.1999",
"Страна пребывания": "Пакистан"
}< /p>
Поля пола, даты рождения и страны пребывания извлекаются неправильно (или иногда не извлекаются вообще).
Поля пола, даты рождения и страны пребывания извлекаются неправильно. р>
Что я пробовал:
- Я гарантировал, что имена полей в шаблонах регулярных выражений (например, дата рождения,, Страна пребывания) соответствуют тексту, извлеченному из изображения CNIC. OCR правильно извлекает текст из изображения cnic.
Код: Выделить всё
Gender
- Я пытался настроить шаблоны регулярных выражений, но проблема не устранена.
Я вручную проверил извлеченный текст, и кажется, что пол и страна не анализируются правильно из-за их близости.
Может ли кто-нибудь помочь мне разобраться в проблеме или предложить какие-либо улучшения шаблонов регулярных выражений?
вот результат
Очищенный извлеченный текст:
Национальное удостоверение личности ПАКИСТАНА ИСЛАМСКАЯ РЕСПУБЛИКА ПАКИСТАН Имя Мухаммад Талха Бин Магфур Имя отца Магфур Ахмед Пол Страна пребывания M Пакистан Идентификационный номер Дата рождения 37403-9637109-9 11.01.1999 Дата выдачи Дата истечения срока действия 03.02.2024 03.02.2034
Номер CNIC: 37403-9637109-9
Имя: Мухаммед Тальха Бин Магфур Имя отца Магфур Ахмед Пол Страна пребывания M Пакистан Идентификационный номер Дата рождения
Имя отца: Магфур Ахмед Пол Страна пребывания M Пакистан Идентификационный номер Дата рождения
Пол: Не найден
Дата рождения: 11.01. 1999
Страна пребывания: M Пакистан Идентификационный номер Дата рождения
Данные записаны на cnic_data.txt
Подробнее здесь: https://stackoverflow.com/questions/792 ... syocr-in-p