Почему python выдаёт исключение при выполнении кода , полностью скопированного с документации по pytesseract?
Полностью проверенный и полностью скопированный код , который выдаёт ошибку , даже картинку использую , которая была на сайте
from PIL import Image
import pytesseract
import cv2
import os
image = 'C:\bot\test2.png'
preprocess = "thresh"
# загрузить образ и преобразовать его в оттенки серого
image = cv2.imread(image)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# проверьте, следует ли применять пороговое значение для
предварительной обработки изображения
if preprocess == "thresh":
gray = cv2.threshold(gray, 0, 255,
cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
# если нужно медианное размытие, чтобы удалить шум
elif preprocess == "blur":
gray = cv2.medianBlur(gray, 3)
# сохраним временную картинку в оттенках серого, чтобы
можно было применить к ней OCR
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)
# загрузка изображения в виде объекта image Pillow,
применение OCR, а затем удаление временного файла
text = pytesseract.image_to_string(Image.open(filename))
os.remove(filename)
print(text)
# показать выходные изображения
cv2.imshow("Image", image)
cv2.imshow("Output", gray)
input('pause…')
Генерируемые исключения
Traceback (most recent call last):
File "test.py", line 13, in <module>
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.3.0) C:\projects\opencv-
python\opencv\modules\imgproc\src\color.cpp:182: error:
(-215:Assertion failed) !_src.empty() in function
'cv::cvtColor'
Ответы (1 шт):
Причина ошибки в том, что путь к картинке был неправильный из-за слешей, что экранировали символы в пути.
Варианты:
Попробуйте использовать raw-строки, чтобы слеши в них не вызывали экранирование:
image = r'C:\bot\test2.png'Либо используйте обычные строки, но добавляя дополнительные слеши:
image = 'C:\\bot\\test2.png'Еще вариантом может быть использование других слешей:
image = 'C:/bot/test2.png'Если используете в проекте pathlib, то путь через него можно указать:
Получите объект, представляющий путь:
from pathlib import Path DIR = Path(r'C:\bot') file_name = DIR / 'test2.png' print(repr(file_name), file_name.exists()) # WindowsPath('C:/bot/test2.png') TrueСтандартные библиотеки умеют работать с
Path(напримерopen,glob, ...), но сторонние могут не поддерживать (opencvнапример), поэтому можно получить путь как строку, используяstr():file_name = str(DIR / 'test2.png') print(file_name) # C:\bot\test2.png