Regex неправильно извлекает данные CNIC из текста, извлеченного с помощью EasyOCR в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Regex неправильно извлекает данные CNIC из текста, извлеченного с помощью EasyOCR в Python

Сообщение Anonymous »

Я пытаюсь извлечь личные данные (такие как имя, пол, дата рождения и т. д.) из изображения CNIC (компьютеризированного национального удостоверения личности) с помощью EasyOCR и регулярных выражений в Python.

OCR извлекает текст правильно. Однако, когда я пытаюсь извлечь данные, некоторые поля, такие как дата рождения, пол и страна пребывания, извлекаются неправильно.
Проблема : у меня есть Изображение CNIC, из которого я использую EasyOCR для извлечения текста. Я использую регулярные выражения для сбора таких полей, как номер CNIC, имя, пол и т. д. Однако для некоторых полей я получаю неправильные или отсутствующие данные.
Вот код;

Я использую EasyOCR для извлечения текста из изображения CNIC:

Код: Выделить всё

import easyocr

txt = easyocr.Reader(['en'])
text = txt.readtext(image_path)

# 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.
  • Я пытался настроить шаблоны регулярных выражений, но проблема не устранена.
Я пытался обновить шаблоны регулярных выражений для пола и даты рождения, но мне все еще не удалось их правильно извлечь.
Я вручную проверил извлеченный текст, и кажется, что пол и страна не анализируются правильно из-за их близости.

Может ли кто-нибудь помочь мне разобраться в проблеме или предложить какие-либо улучшения шаблонов регулярных выражений?
Выход:

Изображение


Подробнее здесь: https://stackoverflow.com/questions/792 ... syocr-in-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»