cv2.imread кириллица в пути. мой Софт не сработал у 1 из 100
Продукт прошёл все виды тестирования. Работал около 3 месяцев в демо-режиме. Вышел в сообщество. На данный момент им пользуется около 110 человек. Вчера пишет клиент: купил подписку, установил, софт не работает. Это ввело меня не столько в панику, сколько в глубокий интерес — понять, почему так случилось. 🐛 Первичный разбор Сразу попросил логи приложения. В логах — ошибка: «необходимо взаимодействовать с объектом, объект (текст, картинка) не найдены». Мы разобрали все варианты: — Какое разрешение экрана у клиента? — Совпадает ли с тем, на котором снимали шаблоны? — Масштаб Windows (100%, 125%, 150%)? — Координаты захвата — Тот ли монитор (если их несколько)? — Не перекрыто ли окно другими приложениями? — Добавлен ли бот в исключения? — Не блокирует ли антивирус скриншоты? Всё чисто. Но ошибка осталась. 🧐 Настоящая причина Полез в Dev-логи. Там проскакивает: text: cv2.imread: не удалось прочитать изображение Причина: OpenCV в путях читает только английские буквы. Кириллицу воспринимает как набор непонятных символов. Путь клиента: C:\Максим и Дарья\. Сто клиентов с латиницей — всё ок. А на русских буквах — сломалось. ✌️ Решение Функция imread_unicode() — обход стандартного cv2.imread() через numpy и cv2.imdecode. Было: python img = cv2.imread(r"C:\Максим и Дарья\button.png") # Возвращает None. Кириллица не читается. Стало: python def imread_unicode(path): # Читаем файл как бинарный поток with open(path, "rb") as f: data = f.read() # Декодируем из буфера в изображение img = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR) return img img = imread_unicode(r"C:\Максим и Дарья\button.png") # Работает. Путь любой — кириллица, пробелы, что угодно. 🛠 Что ещё сделал В ходе работы оптимизировал приложение под разные размеры и разрешения экрана — чтобы в дальнейшем не сталкиваться с подобными инцидентами. — Вынес все утилиты в utils/helpers.py — Написал imread_unicode() — чтение файлов с кириллицей — Оптимизировал поиск шаблонов — один скриншот вместо пяти — Убрал перебор 12 масштабов — оставил auto_scale — Обновил все модули под новые утилиты — Исправил зацикливание — флаги clicked{} — Добавил задержку в цикл модулей — 2 секунды — Проверил на клиенте — работает — Собрал .exe и отправил клиенту на личную почту. 🧠 Мой вывод Сто клиентов — не гарантия. Баг найдёт лазейку. Тестируй не только то, что должно работать. Тестируй то, что может сломаться. Кириллица в путях, пробелы, длинные имена — всё это реальность, а не теория. ❓ А вы ловили баги, которые вылезали только на реальных клиентах, а не на тестах? 👇 Делитесь в комментариях. #python #opencv #кириллица #баги #разработка #fullstack #hhru #cv2.imread
· 2 ч
наверное не очень в тему, но прочитал "кириллица" и вспомнилось пару случаев.
1. очень СТАРАЯ история. Не суть чем занимались, но конкретная задача - есть некий файл, который надо распарсить, а именно - взять определенный текст из колонки и через preg_match прогнать его. Тривиально? в 99,9% конечно. Но тут оказывается, что некоторые строки не разбираются. Общее найдено было быстрое - Ё и Й. А вот дальше - танцы с бубнами. Угадывать в чем "корень зла"не предлагаю - озвучу сразу. Под виндой есть 2 варианта написания этих букв - в 1 символ по asc и в 2 символа (!) то есть например Е, а второй - две точки сверху со смещением каретки вправо. В тот момент это было прям открытие :)
2. очень СВЕЖАЯ история Маттермост написан на Go. Подключить антимат? Легко казалось бы. Тем паче что есть пара плагинов в официальной репе. Так вот, у этого супер-пупер языка, как оказалось, мега-проблема с матчем, если не латинница. :) Пришлось реализовывать вебхук, чтобы лочить матные слова внешним скриптом.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён