Галоўная / Артыкулы

Адаптация архітектуры OCR адзінаму з сканаванымі звярненнямі з лабараторыяў на структураваныя даны

Як стартап у сфере охоры здароўя, які мае обмежаны бюджет, можа выбраць між бібліятэкамі OCR, API-сервісамі Google Cloud і самастаўленым большым мовным модулем для аналізу звуротных даўеджэнняў, калі трэба ператварыць медычныя сканаванні на структураваны JSON.

Выдавец: REACTAPP.TOP8 хв чытання1779 слоў

Крыніцы: How We Chose Our OCR Architecture for a Medical Reports Pipeline (Part 1 of 2)

Ператворэнне фота з выдрукаванага ў лабараторыі дакумента у рядок з тэкстам "Гемаглобін, 13.2, г/дЛ, норма 12.0–15.5" здаецца проблемай OCR, але распазнаванне звычайнага тэксту — толькі першы крок. Настоямая задача — дасягнуць значэння з неакуратна сканаванага дакумента дышча, надзеямо і без выліву дакументаў пацэнтав. У гэтым кераванні практыкай показаныя архітектурныя рашэнні, якія лежачы ў основе такога працэсу выкарыстоўвання дакументаў для MVP медычных атласоў, тады вы зможаце перыскарыстаць гэтыя падходы, калі станёсцеся да падобной проблемы распазнавання дакументаў з мяркавым бюджэтам.

Тэрэтарыў, які керуе всім

Уявіце прылад для дагляду на ранній стадыі. Паціўнты завантажаюць сканаваны медычны атлас – чырвоную кнігу у формате PDF або фота распрытай лабараторнай карткі з тэлефона. Система должна пераканструюваць яго ў структураваныя медычныя записі, якія могу переглядаць і паціўнт, і яго лекар, а таксама якія пазней зможа выкарыстоўваць аналіз, адбываецца за дапамогою штучнага інтэлекту. Кожны такі запис патрабуе чатырох элементаў: назву параметра, яго змераную значэнне, единіцу выражэння і дапустымы дыяпазон.

Гэты апошні пункт ёсць ключовым. Адзін толькі інструмент, який вяртае блок распазнаўаных симвалаў, сам по сабе не задовольняе ціх трэбаванняў. Што-та ўсё равно павінна вырашыць, якое число належыць да каторага тэсту, якая строка ёсць единіцай выражэння і якая пара цифр є дапустымым дыяпазонам. Кожна з такіх рашэнняў стосуецца таго, дзе адбываецца этап „розумэння“ і якія є выкарыстоўваны для цього ресурсы.

Абяцкія умовы былі типавыя для MVP: маленькая каманда, невялікі бюджет на інфраструктуру, а таксама прыбліжна колькасць у 500 заваношаных атласоў на дзень, што дае прыбліжна 30 000 сторанак у месяц.

Рашэнне 1: Выбір мовы для роботы

Прывілеў экасистемы Python ёсць рэальным

Якщо пачаць з пытання «якая мова мае найкращыя інструменты для OCR і ML», то Python без вялікіх сумневоў выгравае. Зрэлыя адкрытые інструменты, такія як PaddleOCR і EasyOCR, ў першую чаргу створаны для Python, у OpenCV таксама є першасортныя інтеграцыі, а большасць прыкладаў комп’ютернай візуалізаціі, якія вы знайдзеце, прыпускаюць викорыстоўванне саме яго. Практычна будь-якая система OCR, створаная з нуля, пачнёцца з Python.

Таксама варта быть чыстасаблівым ў тым, што не яўляецца фактарам разліку. API Vision ад Google была аднай з платных опцыяў, якія расследваліся, і Google публікуе бібліятэкі для кліентаў на Python асобна на Go. Таму наявнасць SDK не спрыяла ні аднаму з ягоў.

Чаму ж выграў Go

Рашаючыя фактары стосаваліся апошней системы, а не самага OCR. Рэшта асінхроннай ланцоўкі вучынена была як працоўнік на Go: ён спрацоўвае заданні з Redis Streams, завантажае аплодаваныя файлы з об’ектнага хранення Cloudflare R2 і запісвае рэзультаты ў Postgres. Адработка крока выкарыстоўвання на Python значыла б запуск двух працоўнікаў, з аднойчы разным розмешчэнням, калітвою залежнасцей і можлівасцямі адзору, для аднай-едзінай функцыі. Інжынер, які яго ствараў, таксама быў наяўнейшы ў працы з Go для такіх служб інфраструктурнага типу.

Загальны вывук: язык з наяўнасцю найбольшага каталогу бібліятэк не ўсегда яўляецца правым выборам. Якщо крок выкарыстоўвання можа быць спраўлены проста праз вызов модэлю через HTTP (што і є канцэнтрацыяй такога падходу), то выкарыстоўванне аднаго тэкучага рашэння для всіх элементаў рабочага шару часта мае большое значэнне, чым глыбіна бібліятэкі, якой вы практычна не будзеце выкарыстоўваць.

Рашэнне 2: Чыстыя API проты самастойнага хоставання, з урахоўваннем цэнаў

Команда параганяла чатыры варыянты на тле прыбліжна 30 000 сторанак у месяц. Наведаны нижэй цифры ўзяты з моменту ацэнкі; цены на чыстыя сервісы могу змяніцца, таму пераканайцеся ў актуальных цэнах пры выкарыстоўванні іх.

  • Google Cloud Vision з DOCUMENT_TEXT_DETECTION. Вернюе неапрануты текст з координатамі, без структураваных поль. Цена складае абоўшынкай $1,50 за 1 000 сторанак, тое ўсьго прыбліжна $45 за месяц.
  • Google Document AI (Form або Custom Parser). Адказвае структураваныя пары «ключ-значэнне» і табліцы. Коштае $30–$65 за 1 000 сторанак, тое ўсьмо раўна прыблізна $900–$1 950 на месцы.
  • Gemini Flash на Vertex AI. Мультімодальны і кераваны прамптамі, адказвае структураваным JSON. Цена выклікаецца за токен, прыблізныя расчыткі паказуюць $20–$50 на месцы.
  • Самастаўлены LLM для аналізу візуальных дадзенняў (MiniCPM-V, які працюе через Ollama). Адразу стварае структураваны JSON. Кошт — гэта фіксаваная плата за сервер, прыблізна $40–$80 на месцы за VPS, незалежна ад колькасці оброблёваных дадзенняў.
  • Правильнае чытанне цых цифраў

    API Vision здаецца дыявольна дешавым, але ён рашае іншую проблему. Ён паведамляе вам, што симвалы „13.2“ з’яўляюцца на певных координатах; ён не мае жаданняў пра тое, што гэта значэнні гемаглобіна. Вам усё рава патрэбна будзе самостайна стварыць весь слой парсінгу, таму яго цена не можа быць парабелічная з тыми варыянтамі, якія вяртаюць структураваныя даны.

    Document AI дэйсна вяртае структуру, але цена у розмерзе 1 000–2 000 долераў у месяц – гэта вельмі высокі зменны расход для продукту, які ўжо не прыносіць доходу.

    Gemini Flash – гэта справжній цікавы кандыдат. Цена, заснованая на токэнах для сканаваных сторанак, знаходзіцца ў той жа дыапазоне, чым самастаяная рэзыдэнція, і вы не мусіце эксплуатаваць жадную інфраструктуру GPU. То чаму бы не выбраць яго?

    Чаму самастаяная рэзыдэнція ўсё ж застала лепшай

    Тры аргументы вплылі на рашэнне:

    • Пята для костоў. Спецыяльны вузел коштае адно і тое ж, незалежна ад таго, працоўвае ён з 5 000 чы 50 000 стораніцаў. API з метражам не мае такой пяты: разыгранне навантажэння, серія праказваў чы масавая імпортаванне адразу паўтарыюцца на рахунку-фактуре.
    • Ізоляцыя дадзенняў. Медычныя атласы маюць захіщаную інформацыю пра здароў’е. Выкананне процэсу выкарыстоўвання дадзенняў у сае прыватной сеті каманды значыць, што дакументы пацэнтав ніколі не адправляюцца да API трохтоўскага прадавцы з кожнай загрузкі, чым ухілваецца ад цэлага класу пытанняў, зв’язаных з салідарнасцю і пераглядам прадавца, з якімі каманда MVP не можа эфектыва справляцца.
    • Няма зовнішнях квот чы затрымкаў. Не існуе лімітавання частоты запытаў, рэвэнюсных рангаў чы дадатковых переходаў па сеті на критычным шляху.

    Рэзультатам было адмова ад варыянтав Google Cloud і Vertex AI і выбор чыста самастойна хоставанай системы.

    Цікава таксама ёсць і другая сторона медалі. Розметку за выкарыстоўванне сервера можна прыбліжна расчысляць толькі па меры працездатнасі, яку можа адрабатваць апаратна частка; за ўзгаленнымі межамі патрэбна пакупка дадзейнага апарата, а таксама самастоятельна планаванне ўместкі та гарантаванне стабільнага працы. Самастойна адрабатка таксама не падрыхтавляе да зваліканняя обавязакаў па сарэгуляцыі, адколі вы яшчэ несете адпаведальнасць за зберагчыцтва, кантроль даступу і аудыт гэтых дадзеных. Для невялікага, стабільнага обсягу роботы з чутлівымі дадзенням самастойна адрабатка зазвычай є прыемнейшым варыянтам; для рэзкаг, швытка расліваючагася обсягу роботы, калі у команды няма можлівасцей для аператывнага кантролю, кращым выборам можа стаць API з адпаведным керуванням.

    Рашэнне 3: Адказа ад традыцыйных бібліятэкаў OCR

    Адынаковыя на адкрытым кодам двайнікі, такія як PaddleOCR і Docling, ўсталяныя для выкарыстання, але іх рэзультаты прызначаны для відображэння. Зазвычай контент пакуецца ў тагі для макетавання або форматуецца як Markdown, ў результаты чаго ён добра відображаецца ў інтерфейсе або у HTML-відображэнні. Гэта ідеальна ситуацыя, калі результат чытае людзь, але некомфортна, калі коду патрэбна чыстая запіс „Гемаглобін: 13,2 г/дл“.

    Складанне гэтага прыему ёсць самастоятны проект. Патрэбна будзе выявленне значэнняў з структуры тагоў, прабыткі і помылкі для адпаведнага падходу да розных лабораторых умов і форматаў звярнункоў, а таксама, верагатна, дадаванне функцый прадзеяння або выдзеяння дадзеных з апэратным камерам OpenCV для табелей і раёнаў, якія двыжак не сегментаваў чыста. Усё гэта дапамагае ў інтеграцыі та адрабоце OCR-двыжка. Для MVP гэта значны обсяг роботы, які стосуецца інфраструктуры, а не самага продукта.

    Адзін момент, які трэба падчеркнуць: гэтае ацэнка ўскладненая на падставе оценкі каманды, а не остаточнага выніку ўжо зараз. Інжынеры з болей шырокым дазвілом у PaddleOCR або Docling можаць знайсці шырэйшы спосаб пры пераходзе з структураваных выхадных дадзеных да чыстых полей, а оба проекты развіваюцца быстра, таму варта знова пераканаліцца ў іх ныякіх форматах выхадных дадзеных.

    Рашынак 4: Самастаяны модель LLM для аналізу звуроцяў, паслядовная да бюджэту

    Выяўленне значэння заместо симвалаў

    Альтернатыва падходу "OCR, а потым стварэнне парсера для выходных даных OCR" — это использованне мовной моделі, якая можа аналізаваць звурок, каб выпрацаваць оба крока адразу. Класычны OCR распазнаёт симвалы. Модель LLM, якая може аналізаваць звурок і мае чытлівае запрашэнне, можа рассмотрэць сканаваны аркуш і безпосереднія вернуць поля параметра, значэння і еўрана, пры чым адмахнуцца проміжнага крока перетварэння на маркдаун з атрыбутамі.

    У гэтым случае можыць аналізаваць звурок ёсць неабходны элемент, а не дапаможны функцыя. Модель, якая працуе толькі з текстам, не можа дапамогчы з сканаваным адпраўкам, таму што ў яго ўжо няма тексту. Модэлю неабходна сама чытаць пікселі.

    Этакі падходы маюць свои рызыкі, і варта планаваць ўсе можлыя наследкі з самага пачатку. Моделі мовы можу неправяльна працаваць з цифрамі або ствараць правдападобныя значэння, якіх няма на сторанцы; болей таго, меньшыя моделі не завжды вярнюют самэ гэтае формату JSON, якое вы прасілі. Чыста для дакументаў з медычнымі данымі, гэта выклекае патрэбу ў захоўнай обработцы адпаведзі моделі, перакананні значэнняў па адпаведным типам і дыапазонам, а таксама у можласці для корыстувачоў або клінічных спецялістаў бачыць і выправляць адпаведныя дакументы.

    Выбір моделі, якую можна фактычна запусціць

    Выбор модэлю адклікаўся той самай логіке бюджэту. Модэлі Qwen з большымя можлівасцямі аналізу звуртка ўваходных дадзенняў є супэрныя, але для роботы такіх масівных модэляў на власным апараты разумнае выкарыстоўванне большай колькасці VRAM і вычысловых ресурсаў, чым магла сабе пэрмітаваць інфраструктура, якую команда закупляла з бюджэту MVP. Таму быў выбран MiniCPM-V — значна меньшы модэль, які Ollama можа запускаць на недорогім апараты без працоўных труднасцей, але які ўсё ж дастатньва хорашы для структураванага аналізу звуртка з фота з лабораторных атласоў.

    Якща вы практыкуеце гэтую задачу знову, теставаўце кандыдатскія модэлі на репрезентатывных прыкладах вашых рэальных дакументаў, уключаючы размытыя фота з тэлефонаў і незвычныя плянування лаборатарый, а не толькі на базе рэйтынгаў. Найлепшы модэль на паперы не мае значэння, якщо вы не можете сабе пэрмітаваць яго запуск.

    Што ўсё ж патрэбна для реалізацыі

    Вышэўжысць архітектуры вялікай меры выявляе што трэба запусціць; пры гэтым процес вырабаткі яшчэ трэба рашыць як гэта зрабіць. Наступныя задачы включаюць пераклад PDF-файлаў у зображэння, якія можа прачытаць модель, структуруванне запиту та прапанняў API Ollama, аберагаючы парсінг JSON, калі малая модель не падтрымлівае запрошанага формата, а таксама викорыстанне Redis Streams у працоўніку на Go, каб звясткі обрабляліся надзеямоўна ў меру зростання обсягу.

    Ключовыя выводы

    • Абмовіцеся з выходным результатам, які вам трэба (тут: назва, значэнне, еўрэквівалент, дыапазон), прычым перад параборам адзінакоў; неапрануты текст OCR і структураваныя даны — гэта разныя продукты з рознымі ценамі.
    • Выберыце мову працоўніка для всей системы, а не тую, якая мае найбольшыя бібліятэкі для аднаго з елементаў.
    • Параборыце пакулькі на хмаре за аднаковы выходны результат, а потым разважыце кантэкст цен, ізоляцію дадзенаў і квоты разам з базовай цэнай.
  • Рэндарынгавая OCR-выходнае падтрыманне можа скрыць сложны проект парсінгу; візуальны LLM можа аб’еднаныць OCR і парсінг у адны крок.
  • Выберыце модель па апаратным забезпечэнню, якое вы можете сабе дазволіць, рэгулярна пераканаўваеце яе выходныя даны, і перапрацаваеце цены ўсіх засобаў прычыну перш чым прыняць рашэнне.