Распознавание паспорта РФ. Python+1С без сторонних сервисов

06.02.23

Интеграция - Распознавание документов и образов

В данной публикации мы рассмотрим методы разработки приложений на Python + 1С для распознавания Паспорта РФ.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Модули Python для Распознавания паспорта РФ. Python+1С
.rar 90,71Mb
51
51 Скачать (1 SM) Купить за 1 850 руб.
Внешний отчет обработка 1С 8.3 для Распознавания паспорта РФ. тестировалось на Платформе 8.3.22.1750
.epf 7,08Kb
39
39 Скачать (1 SM) Купить за 1 850 руб.
Тестовый Паспорт РФ в формате jpg
.jpg 104,90Kb
11
11 Скачать (1 SM) Купить за 1 850 руб.

Погуглив просторы интернета, я нашел подобные решения для 1С. Но все эти разработки требуют пересылку данных на сторонние ресурсы. А передача персональных данных на сторону не такая уж хорошая идея, ведущая к нарушением законов РФ (персональные данные и т.п.).

И таки решил написать такое решение, которое будет работать на вашем ПК (серверах) без всяких там сторонних сервисов. Но так как Python так же, как и 1С, язык программирования некопилированный, то решение подобной задачи стало не такой уж и простой, но вполне решаемой.

В качестве основы был позаимствован репозитарий paSport_eye на GiHub. Данный продукт был адаптирован под Windows и 1С

Данная болванка очень простая, но при этом использует такие библиотеки, как Dlib и CV2, которые довольно-таки хорошо себя показали в распознавании лиц и изображений.

В качестве распознавателя мы используем бесплатный и самый на мой взгляд мощный продукт по распознаванию текста "pytesseract" от компании HP.

Итак, начнем: 

1. Для начала установим Python.

Рекомендую ставить версию 3.9, так как с другими версиями могут возникнуть сложности по установке библиотек. 

2.Далее открываем командную строку и входим в папку, куда вы установили Python, к примеру 

cd c:\pyhton

3. Устанавливаем библиотеки

  1. Библиотека OpenCV 
    python -m pip install opencv-python
  2. Библиотека Pillow 
    python -m pip install Pillow
  3. Библиотека pytesseract
    python -m pip install pytesseract
  4.  Библиотека rembg
    python -m pip install rembg
  5. Библиотека imutils
    python -m pip install imutils
  6. Библиотека matplotlib
    python -m pip install matplotlib
  7. Библиотека dlib Так как версии выше 22 автоматически устанавливают библиотеки куда, а после чего надо долго танцевать с бубнами и установкой библиотек Cuda - рекомендую ставить версию 19.22.1
    python -m pip install -U dlib==19.22.1
  8. Библиотека tesseract-ocr   
    pip install pytesseract
         

4. Далее ставим программный продукт Tesseract. Он необходим для распознавания текста. 

Данный продукт распространяется в открытом коде и собрать его под linux очень просто. Но нам нужна Windiws сборка и скомпилить+зарелизить его под Виндовоз не так уж и просто. Поэтому воспользуемся сборкой для win64 от немецких коллег из Мангеймского университета. Ссылка тут - Tesseract-ocr-w64-setup-5.3.0.20221.

1. Установку нужно делать на диск "С:" в папку %Program Files% (по умолчанию). Если сменить папку - то придется допиливать один Python модуль.

2. Необходимо выбрать расширенную установку и выбрать дополнительный набор Кириллических символов  для распознавания русского языка. 

Поздравляю, у вас теперь установлен прокачанный Python.

Как установить ПО 1С8, думаю, рассказывать не буду и пойдем дальше.

Скачиваем Python модули и разархивируем их, к примеру, в Папку c:\Python\Passp.

Сам архив полностью с открытым кодом(openSource)  имеет основной файл passport.py и библиотеки в папке Lib.

Так же вспомогательные файлы для машинного обучения.

 

 

Давайте рассмотрим файл passport.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import cv2
import argparse
import os
from lib.output import OUTput
from lib.rm_bg import RemoveBG
from lib.face_work import FaceWork
from lib.text_recognition import TessRecogn
from lib.search_data_with_cv2 import SDWCV2
from lib.script_return_abs_path import ReturnAbsPathPict
from lib.script_convert_image import ReturnPathConvertImage

def main():
    ap = ap = argparse.ArgumentParser(
                                        prog="python3 pasport_eye.py",
                                        usage="%(prog)s -p /ПУТЬ/К/ПАПКЕ/С/ИЗОБРАЖЕНИЯМИ --improved_recognition ON или OFF -o terminal или scv",
                                        description='''
                                                        
    )
    ap.add_argument(
                    "-p", "--path_pict", required=True,
                    help="Путь к каталогу изображений паспортов!"
    )
    ap.add_argument(
                    "--improved_recognition", required=True,
                    help='''
                            Метод улучшенного распознования: ON или OFF.
                            ON - более точное распознавание, но и "выхлоп" от
                            скрипта более "жирный", так же, медленная работа скрипта.
                            OFF - все как обычно, но возможно, не точное распознавание.
                    '''
    )
    ap.add_argument(
                    "-o", "--output", required = True,
                    help = '''

                    Метод выполнения скрипта: trminal или csv.
                    terminal - создается папка: название_базы + _recogn,
                    в ней подпапка pict - лица из паспортов
                    и подпапка descript - дескрипторы в двоичном формате,
                    выхлоп распознования - в терминал.

                    csv - дескрипторы(в формате: float), изображение лиц(в формате: base64),
                    а так же данные паспортов сохраняются в НАЗВАНИЕ_БАЗЫ_С_ИЗОБРАЖЕНИЯМИ.csv
                    '''
    )
    ap.add_argument(
                    "-f", "--output_file", required=True,
                    help="путь к результирующему файлу"
    )
    
    args = vars(ap.parse_args())
    
    if str(args["improved_recognition"]).lower() == "on" or str(args["improved_recognition"]).lower() == "off":
        improved_recognition = str(args["improved_recognition"]).lower()
    else:
        print("improved_recognition только ON или OFF\nВыход!")
        sys.exit()

    if str(args["output"]).lower() == "terminal" or str(args["output"]).lower() == "csv":
        output = str(args["output"]).lower()
    else:
        print("output только terminal или csv\nВыход!")
        sys.exit()


    # получаем правильный путь к файлам с точки срения python
    path_pict=os.path.abspath(str(args["path_pict"]).lower())
    abs_path_folder, filename = os.path.split(path_pict)
    list_abs_path_folder = ReturnAbsPathPict().main(abs_path_folder)

    folder = f"{path_pict}"
    abs_path_pict = os.path.abspath(folder)


    path_output = os.path.abspath(str(args["output_file"]).lower())
    #print(abs_path_pict)
    #print(list_abs_path_folder)
    

    print(f"Идет распознование изображения: {abs_path_pict}\n")
    # возврат полного пути + конвертация изображения в .png
    path_cache_pict = ReturnPathConvertImage(abs_path_pict).main(abs_path_pict,list_abs_path_folder)
    # возврат полного пути + удаление заднего плана
    #path_pict_no_bg = RemoveBG(path_cache_pict, visualization=False).main()
    path_pict_no_bg = path_cache_pict

    # возврат словаря с данными(изображение без фото лица, само фото лица) + дескрипторы лица
    dict_image_no_face_and_cropped_face = FaceWork(path_pict_no_bg, visualization=False).main()
    # возврат списка выделенных данных с помощью cv2
    data_list_gorizontal, data_list_vertical = SDWCV2(dict_image_no_face_and_cropped_face, visualization=False).main()
    # возврат списка распознанных с помощью tesseract данных
    list_all_data_gorizontal, list_all_data_vertical = TessRecogn(
                                                                        improved_recognition,
                                                                        data_list_gorizontal,
                                                                        data_list_vertical
        ).main()

    OUTput(
                args,
                output,
                path_output,
                dict_image_no_face_and_cropped_face,
                list_all_data_gorizontal,
                list_all_data_vertical
        ).main()

if __name__ == "__main__":
    main()

Тут, думаю, все понятно:

1. модуль python получает необходимые аргументы - входные данные (изображение и название выходного файла и т.п.), которые нам понадобятся для вызова из 1С.

2. Конвертируем фото в png и меняем размер. 

3. Далее распознаем лицо, используя библиотеки Open CV и Dlib на фото, для того чтобы правильно перевернуть фото. 

4. После чего по заранее известным координатам получаем обрезки рисунков с необходимыми нам текстами.

5. Далее распознаем текст и выводим его в CSV файл.   Easy ;-)

Ну что же, осталось подружить все это добро с 1С.

Пишем обработку на 1С.  Тестировалось на Платформе 8.3.22.1750


&НаКлиенте
Процедура Распознать(Команда)
	объект.ИмяВыходногофайла= "C:/python/paasport/output" + СокрЛП(Новый УникальныйИдентификатор())+".csv";
	КомандаСистемы("C:\Python39\python C:\python\paasport\passport.py --p """+объект.Паспорт+""" --improved_recognition=off -o=csv -f="""+объект.ИмяВыходногофайла+"""","C:\python\paasport\"); 
	Ожидание();
КонецПроцедуры

&НаКлиенте
Процедура Ожидание()
	МойФайл = Новый Файл(объект.ИмяВыходногофайла);
	
	Если НЕ МойФайл.Существует() Тогда 
		ПодключитьОбработчикОжидания("Ожидание",1);
	иначе                                         
		Текст = Новый ЧтениеТекста;
		Текст.Открыть(объект.ИмяВыходногофайла);              
		Строка = Текст.ПрочитатьСтроку();
		объект.данныеПаспорта= Строка;
		ОтключитьОбработчикОжидания("Ожидание");

	КонецЕсли;	
КонецПроцедуры	

В итоге получаем неплохой результат.

 

Все получилось...

См. также

SALE! 30%

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Бухгалтер Пользователь Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    106011    307    173    

322

Учет документов Распознавание документов и образов Бухгалтер Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Расширение для типовых конфигурация и для самостоятельной интеграции системы распознавания документо удостоверяющих личность и прочих документов непосредственно из информационных баз "1С:Предприятия 8.3" с помощью Content AI - Passport Reader SDK. Расширение позволит не изменяя типовой код конфигурации, расширить текущий функционал несколькими кликами мыши.

12000 руб.

26.01.2016    69814    79    1    

103

SALE! 40%

Учет документов Распознавание документов и образов Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Одна из наиболее удобных обработок автоматического прикрепления большого количества документов-оригиналов к документам 1С. Для файлов поточного сканирования автоматически определяются начало и конец каждого документа. Поддерживаются штрихкоды, QR-коды, отсканированные PDF документы без штрихкодов, сформированные в ЭДО текстовые PDF документы. Поддерживаются входящие и исходящие документы-оригиналы.

6480 руб.

23.12.2021    13001    14    24    

10

Разработка внешних компонент Распознавание документов и образов Платформа 1С v8.3 1С:Документооборот Россия Абонемент ($m)

В современном мире, где информация поступает из различных источников, необходимость быстро и эффективно извлекать текст из изображений становится важной частью рабочего процесса. Предлагаю простой способ, который поможет вам это сделать локально и безопасно всего за несколько простых шагов!

1 стартмани

27.08.2024    907    2    romanichenko    2    

4

Распознавание документов и образов Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В данной статье мы рассмотрим пример, как можно улучшить CRM с клиентами, загружая записанные разговоры из ATC Astrrisk (или любыми аналогичными, умеющими записывать переговоры). Для этого мы будем использовать мощные инструменты от Open AI Whisper.

1 стартмани

02.04.2024    1973    8    Indgo    13    

27

Сканер штрих-кода Распознавание документов и образов Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Программа позволяет распознать графический код посредством USB Web-камеры и записать результат в буфер обмена. Впоследствии его можно прочитать средствами 1С.

6 стартмани

26.01.2024    1306    2    alexkozin    3    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3081 30.01.23 11:37 Сейчас в теме
Отлично! Только вот нафига каждый раз команду системы дергать? Сделайте в виде сервиса - три строки дописать. И пусть 1С дергает урлу с токеном по SSL.
baracuda; kuzyara; Indgo; Sedaiko; gzharkoj; Nefilimus; nvv1970; +7 Ответить
3. Indgo 413 30.01.23 11:53 Сейчас в теме
(1)
команду системы дергать? Сделайте в виде сервиса - три строки дописать. И пусть 1С дергает урлу с токеном по SSL.

Да согласен.
Те кто хочет получать данные не через файл а через веб сервис допиливаем модуль python
from flask import Flask
app = Flask(__name__)

@app.route("/<данные картинки в формате dbase64>", methods=['GET'])
def index(username):
#тут можно вываливать распознанные паспорнтые данные
    return "Hello, %s!" % username 

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=4567)
Показать

Теперь из 1с можно получать данные через http запрос из http://localhost:4567/{jpeg картинка в формате dbase64}
e9504100606; JohnyDeath; fancy; German; Sedaiko; sapervodichka; starik-2005; +7 Ответить
13. dsdred 3536 01.02.23 07:44 Сейчас в теме
(3)такие вещи лучше через POST передавать.

А статья отличная.
14. Indgo 413 01.02.23 09:38 Сейчас в теме
(13) @Post - это так олдскульно %-)
16. ltfriend 01.02.23 19:19 Сейчас в теме
(14) а передавать данные изображения в URL GET-запросом это "стильно, модно, молодёжно"?
Взято с developer.mozilla.org
Метод GET запрашивает представление ресурса. Запросы с использованием этого метода могут только извлекать данные.
POST используется для отправки сущностей к определённому ресурсу.
dsdred; Indgo; +2 Ответить
17. dsdred 3536 03.02.23 00:27 Сейчас в теме
(14)так то на минуточку... Вы паспортные данные гоняете.
утюгчеловек; y22-k; +2 Ответить
23. Indgo 413 08.02.23 21:08 Сейчас в теме
24. dsdred 3536 08.02.23 21:18 Сейчас в теме
(23) В URL
http://localhost:4567/{jpeg картинка в формате dbase64} - она же паспортные данные

-> MITM-атака (Man in the middle – атака человека посередине)
Прикрепленные файлы:
e9504100606; METAL; +2 Ответить
26. Indgo 413 09.02.23 23:27 Сейчас в теме
(24) Ну да. Что сказать.
Тут уж какая разница пост или гет. Либо есть шифрация SSl либо нет. Если поднимать свой сервис на локалхост, то сами понимаете - некуда ваши запросы за пределы сервера не уйдут.
Поэтому и выкладываю тут коды, чтобы сами могли сделать свой "личный" сервис
Трактор; +1 Ответить
28. Трактор 1252 22.02.23 10:07 Сейчас в теме
(24) убиться веником!
В чём принципиальна разница между get и post? Только в буквах, что написаны в заголовке запроса. Больше ни в чём. Технически это один и тот же хттп запрос.
Одни языки позволяют отправлять тело запроса в get, например, питон, 1С. Другие принципиально требуют отправить тело запроса только методом post, например php.

На мой взгляд,это ограничение искусственное. Я делал веб сервис, принимающий отбор в виде json. Я не знаю какого размера будет этот json, поэтому жду его в теле запроса. Программисты php понимают почему так сделано, но могут пользовать только post.

Вот така беда, малята.
29. dsdred 3536 22.02.23 10:32 Сейчас в теме
(28)с кем то можно договорится и придерживаться договорённостей, а кто-то плювал на все и делает как хочется.

Но я лучше съем то что сделано по ГОСТ чем по ТУ.
35. uno-c 238 17.10.23 11:12 Сейчас в теме
(24) В случае успешной MITM атаки будут расшифрованы и URL в GET-запросе и тело в POST-запросе. Если атака неуспешна, расшифровка не получится, и скрытыми останутся и GET-URL и POST-тело - и то и другое шифруется в HTTPS
31. bugagashenka 203 03.03.23 05:14 Сейчас в теме
(17)в границах одной машины же, на которой этот паспорт уже лежит
15. Indgo 413 01.02.23 09:43 Сейчас в теме
(13) Недавно смотрел коды яндекса. Там тоже есть программисты , которые постятся. Потом на сайте жмешь назад, а он такой - "Вы подтвержадаете повторую отправку формы"? итп
2. JIEX@ 104 30.01.23 11:43 Сейчас в теме
4. Sedaiko 587 30.01.23 14:01 Сейчас в теме
Лучше python-функции обернуть в FastAPI или даже в Bottle и обращаться через HTTPСоединение.
anvolkov1cbit; Indgo; +2 Ответить
5. Indgo 413 30.01.23 14:21 Сейчас в теме
(4)
е python-функции обернуть в FastAPI или даже в Bottle и обращаться через HTTPС

Да согласен. Так даже лучше.
6. VKuser924421 30.01.23 15:17 Сейчас в теме
Можно проще. Посмотрите в типовой УТ кусок кода для запуска внешней программы. Там она будет ждать возврата из программы например имени файла.


ФайловаяСистемаКлиент.ЗапуститьПрограмму(
КомандаЗапуска,
ПараметрыЗапускаПрограммы);
NiGMa; Indgo; +2 Ответить
7. Indgo 413 30.01.23 16:30 Сейчас в теме
(6)
ФайловаяСистемаКлиент.ЗапуститьПрограмму(
КомандаЗапуска,
ПараметрыЗапускаПрограммы);

Да спасибо. Посмотрю
8. tindir 31.01.23 04:27 Сейчас в теме
Читал про тессеракт и опенЦВ. Впечатлен был по самое небалуй. Но споткнулся на реализации. Была идея распознавать внутренние "товарки" и кусочек входящей упд. Так и не сообразил как надрессировать опенцв на поиск нужной области.
20. Indgo 413 06.02.23 11:37 Сейчас в теме
(8) позже выложу распознавание счф, торг12, упд итп. Там конечно сложнее чем паспорт, но библиотека CV2 решает большинство проблем.
9. AntonProgma 47 31.01.23 10:40 Сейчас в теме
1С:Гадюка. Если питон и 1с скрестить.
GinGitsune; VasilyErmak; spectre1978; Indgo; +4 Ответить
12. Indgo 413 31.01.23 12:13 Сейчас в теме
(9)
1С:Гадюка

Точно гадюка.
10. VSvintsov1 31.01.23 11:33 Сейчас в теме
скачиваем ... заимствуем ... воспользуемся сборкой для win64 от немецких коллег ...
откуда такая безграничная уверенность в безопасности открытого ПО в целом, и в частности того что в статье указано?
действительно специалист службы безопасности разрешил все это использовать с конфиденциальными данными?
11. Indgo 413 31.01.23 12:12 Сейчас в теме
(10)
качиваем ... заимствуем ... воспользуемся сборкой для win64 от немецких коллег ...
откуда такая безграничная уверенность в безопасности открытого ПО в целом, и в частности того что в статье указано?
действительно специалист службы безопасности разрешил все это использовать с конфиденциальными данными?

Порядочные джентльмены доверяют друг другу.
Если доверие нарушено - то он лишается такого статуса. Лично я доверительно отношусь к компании HP и к Мангеймскому университету.
Tesseract - есть совместный продукт компании HP и Google.
Если вы не доверяете им либо считаете что вы умнее специалистов HP и Google - то не качайте и напишите свой распознаватель текста.
Если вы не доверяете библиотекам типа Dlib, cv2- то это вопрос не ко мне. Хотя может вы и правы, может все зависит от степени паранои ).

Ну к примеру профессор Рудольф и доктор Ганс после лекций Мангеймского университета тайно собираются с разрабами Google итп... в темных подвалах, одевают одежду темную одежду с темными капишонами и пишут под диктовку илона Маска зловредный код.... Страшно??? .. бугагага.
А еще бывают случаи когда Илон Маск считывает ваши кредитные карты(Картридер встроен в корытце Tesla Model Y вместе с безпроводной зарядкой) а потом после работы заказывает через Сбербанк онлайн пиццу на ваши кровные деньги. Поэтому покупайте Жигули семерку. И телефон только Аналоговый и говорите шифрованными словами чтобы Марюся(Унмная Колонка) соседки вас не подслушивала.
METAL; SanchoD; e-its; Garik-1980; vita55555; comptr; Progerok; narayanan; +8 Ответить
27. izidakg 172 10.02.23 08:52 Сейчас в теме
(10) странное замечание для своего сервиса.
безопасникам лучше канал на внешний сервис проверить и сотрудников сервиса, код сервиса?
если параноить так, стоит самому сборку с исходников собрать. и так иногда делают. хотя и тут возникает вопрос - а сотруднику что сборку компилировал вы доверяете?
18. cdb 26 04.02.23 12:43 Сейчас в теме
Раздел "Далее устанавливаем библиотеки" .
7. устанавливаем DLIB
python -m pip install -U dlib==19.22.1
8. устанавливаем tesseract-ocr.
python -m pip install -U dlib==19.22.1

Т.е. одна команда для установки разных библиотек. Так?
METAL; Indgo; +2 Ответить
22. Indgo 413 06.02.23 11:41 Сейчас в теме
(18) Спасибо. Была опечатка. Исправил на "pip install pytesseract"
19. MarryJane 31 05.02.23 16:50 Сейчас в теме
Если кому интересно для ИИС web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\Programs\Python\Python37\python.exe|C:\inetpub\wwwroot\getpolyline\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>

</system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="main.wsgi_app"/>
<add key="PYTHONPATH" value="C:\inetpub\wwwroot\getpolyline\" />
<add key="WSGI_LOG" value="C:\inetpub\wwwroot\getpolyline\wfastcgi.log" />
</appSettings>
</configuration>

* - D:\Programs\Python\Python37\python.exe - адрес питона
* - C:\inetpub\wwwroot\getpolyline\wfastcgi.py - адрес вебсервиса

Пример main.py

from fastapi import FastAPI, Header, Body
from a2wsgi import ASGIMiddleware

tags_metadata = [
{
'name' : 'items',
'description': 'items',
}
]

app = FastAPI(
title = 'Polyline API')

--- описание методов get post (метод post в IE не срабатывает так что не воспринимайте как ошибку)

wsgi_app = ASGIMiddleware(app) // главная обертка

У меня вебсервис рассчитывает расстояния между точками, которое получается от гугла.
_Ramzes; dsdred; Indgo; AleksandrFil; +4 Ответить
21. Indgo 413 06.02.23 11:39 Сейчас в теме
(19)
Если кому интересно для ИИС web.config

Для apache лучше скинь ;-)
Трактор; +1 Ответить
25. vlaskin 82 09.02.23 18:10 Сейчас в теме
А можно использовать другой вариант https://infostart.ru/public/1557184/, локальная установка (правда exe), также на выходе получается текстовый файл, из которого уже можно вытащить нужную информацию. Я так сделал загрузку разовых начислений в ЗУП 3.1 по скану наряда, утвержденного в организации (все данные в скане пропечатаны, от руки только подписи ответственных).
30. evgen 26.02.23 13:55 Сейчас в теме
Т.к. стартманей нет, хотел повторить за автором, но... В показаном passport.py ошибка: у первого аргумента не закрыт description. И видимо в "list_abs_path_folder = ReturnAbsPathPict().main(abs_path_folder)" что то не так. Потому как питон ругается, что "TypeError: main() takes 1 positional argument but 2 were given".
32. websamson 307 03.03.23 08:54 Сейчас в теме
Ошибка:

Traceback (most recent call last):
  File "D:\Python310\paasport\passport.py", line 100, in <module>
    main()
  File "D:\Python310\paasport\passport.py", line 80, in main
    dict_image_no_face_and_cropped_face = FaceWork(path_pict_no_bg, abs_path_folder, visualization=False).main()
  File "D:\Python310\paasport\lib\face_work.py", line 163, in main
    abs_path_resize_pict, list_face_descriptor = self.find_face_and_resize_pict(path_pict_no_bg, sp, facerec)
  File "D:\Python310\paasport\lib\face_work.py", line 92, in find_face_and_resize_pict
    img = dlib.load_rgb_image(path_pict_no_bg)
RuntimeError: Unable to open file: C:\Users\cache\picts/паспорт.png
Показать
33. Indgo 413 11.04.23 17:21 Сейчас в теме
(32)
C:\Users\cache\picts/паспорт.png

Ошибка говорит о том что не может найти файл "C:\Users\cache\picts/паспорт.png" Поменяй ссылку на паспорт
36. syr25 29.11.23 06:23 Сейчас в теме
Добрый день не подскажете в чем ошибка

c:\pyhton39\paasport
c:\pyhton39\paasport\shape_predictor_68_face_landmarks.dat

***Распознование остальных данных:***

100%|████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00,  4.82it/s]

***Распознование серии и номера паспорта:***

100%|████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  3.74it/s]
output
c:/pyhton39/paasport/output.csv,c:\pyhton39\paasport\
Traceback (most recent call last):
  File "C:\pyhton39\paasport\passport.py", line 100, in <module>
    main()
  File "C:\pyhton39\paasport\passport.py", line 90, in main
    OUTput(
  File "C:\pyhton39\paasport\lib\output.py", line 126, in main
    self.write_csv(abs_path_csv, text_recognition_vertical, text_recognition_gorizontal)
  File "C:\pyhton39\paasport\lib\output.py", line 100, in write_csv
    with open(abs_path_csv, "a") as f:
OSError: [Errno 22] Invalid argument: 'c:/pyhton39/paasport/output.csv,c:\\pyhton39\\paasport\\'
Показать
37. METAL 299 23.01.24 16:47 Сейчас в теме
Извините, но мне одному показалось странным, что серия паспорта прочитана неверно?
https://prnt.sc/93t_p2Man7m8 это считается допустимой погрешностью, которой можно пренебречь?
38. McLer 124 16.02.24 12:44 Сейчас в теме
(37) не одному. я тоже заметил, что распознание в примере не корректное :(
39. McLer 124 21.02.24 08:46 Сейчас в теме
Без 1С как проверить что python работает? а то вроде всё сделал, но при запуске в 1С просто ничего не происходит. Как увидеть ошибки какие в python ?
40. McLer 124 21.02.24 08:57 Сейчас в теме
pip install -U dlib==19.22.1
Collecting dlib==19.22.1
Using cached dlib-19.22.1.tar.gz (7.4 MB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Installing backend dependencies ... done
Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: dlib
Building wheel for dlib (pyproject.toml) ... error
error: subprocess-exited-with-error

× Building wheel for dlib (pyproject.toml) did not run successfully.
│ exit code: 1
running build_py
running build_ext

ERROR: CMake must be installed to build dlib

[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for dlib
Failed to build dlib
ERROR: Could not build wheels for dlib, which is required to install pyproject.toml-based projects



dlib - не ставится :( есть решение?
41. QuirkyKot 10 15.03.24 12:39 Сейчас в теме
(40) Попробуй воспользоваться этой инструкцией и установить dlib вручную
https://www.youtube.com/watch?v=BUu6hrcYI_c&ab_channel=Sensei
Оставьте свое сообщение