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

06.02.23

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Модули Python для Распознавания паспорта РФ. Python+1С
.rar 90,71Mb
61
61 Скачать (1 SM) Купить за 1 850 руб.
Внешний отчет обработка 1С 8.3 для Распознавания паспорта РФ. тестировалось на Платформе 8.3.22.1750
.epf 7,08Kb
50
50 Скачать (1 SM) Купить за 1 850 руб.
Тестовый Паспорт РФ в формате jpg
.jpg 104,90Kb
14
14 Скачать (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);
	иначе                                         
		Текст = Новый ЧтениеТекста;
		Текст.Открыть(объект.ИмяВыходногофайла);              
		Строка = Текст.ПрочитатьСтроку();
		объект.данныеПаспорта= Строка;
		ОтключитьОбработчикОжидания("Ожидание");

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

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

 

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

См. также

Загрузка и выгрузка в 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 руб.

04.06.2019    109686    320    175    

329

Распознавание документов и образов Периферийные устройства Программист Автомобили, автосервисы Россия Платные (руб)

Программа считывает кадры с ip-камер (http - запрос к камере), видео, фото (источники кадров (нет ограничения на их количество) настраивается в конфигурационном файле), находит и распознает номера автомашин и сохраняет в базу db, с сохранением фото номера и автомашины, а также времени детекции.

20400 руб.

31.05.2023    5363    4    4    

8

SALE! 30%

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

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

6480 руб.

23.12.2021    13628    18    25    

10

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

ИИ разработчик это не тот, кто не умеет писать код без ИИ помощника. Отличие ИИ разработчика от обычного разработчика не столь уж велико. Но есть один важный нюанс. На простом примере постараюсь вам его продемонстрировать.

1 стартмани

27.02.2025    2006    mkalimulin    21    

17

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

В последнее время у меня возникла необходимость в распознавании текста из изображений и PDF-документов. Данный вариант распознавания текста предлагается как альтернатива традиционным OCR-сервисам. Возможно, кому то данная статья будет полезна. Сравнивал между собой два сервиса Google Cloud Vision и Yandex Vision. Сразу скажу, что результат распознавания рукописного текста не удовлетворил, поэтому искал другие возможности. В процессе поиска альтернатив я обратил внимание на одну интересную возможность, которую предлагает Google Docs. Если загрузить изображение в Google Документы, сервис автоматически добавляет распознанный текст под изображением. Качество меня приятно удивило — текст извлекался даже из рукописных записей!

1 стартмани

24.02.2025    961    SERG326    0    

15

Нейросети Распознавание документов и образов Программист Платформа 1С v8.3 Отраслевые Бесплатно (free)

Пример использования механизма голосового распознавания платформы 1С: Предприятия на примере Демоприложения речевого распознавания от 1С с примером добавленной библиотеки ИИ от Михаила Калимулина с интегрированным голосовым управлением для формирования текста запроса к ИИ.

07.02.2025    526    29    m_aster    3    

6

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

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

1 стартмани

05.12.2024    648    4    nailandroid    0    

2

Распознавание документов и образов Программист Платформа 1С v8.3 1С:Документооборот Россия Бесплатно (free)

1С:Документооборот 3.0 - первое тиражное приложение 1С, в котором встроено распознавание речи. Теперь вы можете диктовать текст электронных писем и голосом подбирать для них адресатов, удобно заполнять содержание, особые наименования и описания для задач, вводить голосом отчёты и резолюции об исполнении.

30.10.2024    1190    VKuser924421    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3160 30.01.23 11:37 Сейчас в теме
Отлично! Только вот нафига каждый раз команду системы дергать? Сделайте в виде сервиса - три строки дописать. И пусть 1С дергает урлу с токеном по SSL.
baracuda; kuzyara; Indgo; Sedaiko; gzharkoj; Nefilimus; nvv1970; +7 Ответить
3. Indgo 419 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}
BigB; e9504100606; JohnyDeath; fancy; German; Sedaiko; sapervodichka; starik-2005; +8 Ответить
13. dsdred 3792 01.02.23 07:44 Сейчас в теме
(3)такие вещи лучше через POST передавать.

А статья отличная.
14. Indgo 419 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 3792 03.02.23 00:27 Сейчас в теме
(14)так то на минуточку... Вы паспортные данные гоняете.
утюгчеловек; y22-k; +2 Ответить
23. Indgo 419 08.02.23 21:08 Сейчас в теме
24. dsdred 3792 08.02.23 21:18 Сейчас в теме
(23) В URL
http://localhost:4567/{jpeg картинка в формате dbase64} - она же паспортные данные

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

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

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

Но я лучше съем то что сделано по ГОСТ чем по ТУ.
35. uno-c 267 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 419 01.02.23 09:43 Сейчас в теме
(13) Недавно смотрел коды яндекса. Там тоже есть программисты , которые постятся. Потом на сайте жмешь назад, а он такой - "Вы подтвержадаете повторую отправку формы"? итп
2. JIEX@ 104 30.01.23 11:43 Сейчас в теме
4. Sedaiko 592 30.01.23 14:01 Сейчас в теме
Лучше python-функции обернуть в FastAPI или даже в Bottle и обращаться через HTTPСоединение.
anvolkov1cbit; Indgo; +2 Ответить
5. Indgo 419 30.01.23 14:21 Сейчас в теме
(4)
е python-функции обернуть в FastAPI или даже в Bottle и обращаться через HTTPС

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


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

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

Точно гадюка.
10. VSvintsov1 31.01.23 11:33 Сейчас в теме
скачиваем ... заимствуем ... воспользуемся сборкой для win64 от немецких коллег ...
откуда такая безграничная уверенность в безопасности открытого ПО в целом, и в частности того что в статье указано?
действительно специалист службы безопасности разрешил все это использовать с конфиденциальными данными?
11. Indgo 419 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 174 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 419 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 419 06.02.23 11:39 Сейчас в теме
(19)
Если кому интересно для ИИС web.config

Для apache лучше скинь ;-)
Трактор; +1 Ответить
25. vlaskin 83 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 419 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 302 23.01.24 16:47 Сейчас в теме
Извините, но мне одному показалось странным, что серия паспорта прочитана неверно?
https://prnt.sc/93t_p2Man7m8 это считается допустимой погрешностью, которой можно пренебречь?
38. McLer 126 16.02.24 12:44 Сейчас в теме
(37) не одному. я тоже заметил, что распознание в примере не корректное :(
39. McLer 126 21.02.24 08:46 Сейчас в теме
Без 1С как проверить что python работает? а то вроде всё сделал, но при запуске в 1С просто ничего не происходит. Как увидеть ошибки какие в python ?
40. McLer 126 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
42. alex25ru 19.11.24 09:15 Сейчас в теме
Столкнулся с такой ошибкой, ковырялся, ковырялся, но так и не нашел что не так. Может кто подскажет.

C:\Python>python.exe passport\passport.py --p "C:\python\passport\ps.jpg" --improved_recognition=off -o=csv -f="C:/python/passport/output8f7f9fbb-62d9-466f-a15d-38ddf897319b.csv"
Идет распознование изображения: c:\python\passport\ps.jpg

поиск
c:\python\passport
c:\python\passport\shape_predictor_68_face_landmarks.dat
Traceback (most recent call last):
  File "C:\Python\passport\passport.py", line 100, in <module>
    main()
  File "C:\Python\passport\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 "C:\Python\passport\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 "C:\Python\passport\lib\face_work.py", line 92, in find_face_and_resize_pict
    img = dlib.load_rgb_image(path_pict_no_bg)
RuntimeError:

Error detected at line 111.
Error detected in file c:\users\aasad\appdata\local\temp\pip-install-wgwd0oxt\dlib_290f72aae51c43eba65850e0c82b5e08\dlib\python/n­umpy_image.h.
Error detected in function const char *__cdecl dlib::assert_is_image::<lambda_4a4ddc9e8efcbe4c2c6bfff0d32880b4>::operator ()(char,unsigned __int64) const.

Failing expression was false.
unknown type
Показать
43. Greeen84 68 31.01.25 12:52 Сейчас в теме
(42) + 1, такая-же петрушка
c:\users\aasad\appdata\local\temp - вот этот путь смущает.
Есть ощущение, что по умолчанию из публикации мало кто смог запустить..

C:\Python\Passp\passport.py --p "C:\python\testpassport.jpg" --improved_recognition=off -o=csv -f="C:/python/Passp/output.csv"
Идет распознование изображения: c:\python\testpassport.jpg

поиск
c:\python
c:\python\shape_predictor_68_face_landmarks.dat
Traceback (most recent call last):
File "C:\Python\Passp\passport.py", line 100, in <module>
main()
File "C:\Python\Passp\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 "C:\Python\Passp\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 "C:\Python\Passp\lib\face_work.py", line 92, in find_face_and_resize_pict
img = dlib.load_rgb_image(path_pict_no_bg)
RuntimeError:

Error detected at line 111.
Error detected in file c:\users\aasad\appdata\local\temp\pip-install-wgwd0oxt\dlib_290f72aae51c43eba65850e0c82b5e08\dlib\python/n­umpy_image.h.
Error detected in function const char *__cdecl dlib::assert_is_image::<lambda_4a4ddc9e8efcbe4c2c6bfff0d32880b4>::operator ()(char,unsigned __int64) const.

Failing expression was false.
unknown type
44. Greeen84 68 31.01.25 13:55 Сейчас в теме
(43) c:\users\aasad\appdata\local\temp - вот этот путь смущает.
тут была проблема с dlib каким-то левым. Поставил Visual Studio c++, dlib установился (python -m pip install -U dlib==19.22.1)

но один фиг:
c:\Python>python C:\Python\Paassport\passport.py --p "C:\python\testpassport.jpg" --improved_recognition=off -o=csv -f="C:/python/Paassport/output.csv"
Идет распознование изображения: c:\python\testpassport.jpg

поиск
c:\python
c:\python\shape_predictor_68_face_landmarks.dat
Traceback (most recent call last):
File "C:\Python\Paassport\passport.py", line 100, in <module>
main()
File "C:\Python\Paassport\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 "C:\Python\Paassport\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 "C:\Python\Paassport\lib\face_work.py", line 92, in find_face_and_resize_pict
img = dlib.load_rgb_image(path_pict_no_bg)
RuntimeError:

Error detected at line 111.
Error detected in file C:\Users\grn\AppData\Local\Temp\pip-install-39qmk3dc\dlib_5e1ea1d8c3a544a29bd07e39f0d58580\dlib\python/n­umpy_image.h.
Error detected in function const char *__cdecl dlib::assert_is_image::<lambda_4393a51ae575b41ce4e9aa1fca7440b1>::operator ()(char,unsigned __int64) const.

Failing expression was false.
unknown type
Показать
45. ntc75 02.03.25 00:26 Сейчас в теме
(32) Такая же ошибка.... Как победили слэш?
Оставьте свое сообщение