Можно ли pytesseract изображение байтов?

Я пытаюсь обрезать изображение с помощью cv2 (преобразовывая его в файл байтов и, следовательно, не сохраняя его), а затем выполняю pytesseract.

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

  1. Сначала, когда я создаю изображение
  2. При обрезке изображения

Процесс...

## CROPPING THE IMAGE REGION

ys, xs = np.nonzero(mask2)
ymin, ymax = ys.min(), ys.max()
xmin, xmax = xs.min(), xs.max()

croped = image[ymin:ymax, xmin:xmax]


pts = np.int32([[xmin, ymin],[xmin,ymax],[xmax,ymax],[xmax,ymin]])
cv2.drawContours(image, [pts], -1, (0,255,0), 1, cv2.LINE_AA)
#OPENCV IMAGE TO BYTES WITHOUT SAVING TO DISK

is_success, im_buf_arr = cv2.imencode(".jpg", croped)
byte_im = im_buf_arr.tobytes()
#PYTESSERACT IMAGE USING A BYTES FILE

Results = pytesseract.image_to_string(byte_im, lang = "eng")
print(Results)

К сожалению, я получаю сообщение об ошибке: Неподдерживаемый объект изображения

Я что-то пропустил? Есть ли способ сделать этот процесс без сохранения файла при обрезке? Любая помощь высоко ценится.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 316
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий
from PIL import Image

img_tesseract = Image.fromarray(croped)
Results = pytesseract.image_to_string(img_tesseract, lang = "eng")

у вас есть croped, который представляет собой пустой массив.

согласно примерам pytesseract, вы просто делаете это:

# tesseract needs the right channel order
cropped_rgb = cv2.cvtColor(croped, cv2.COLOR_BGR2RGB)

# give the numpy array directly to pytesseract, no PIL or other acrobatics necessary
Results = pytesseract.image_to_string(cropped_rgb, lang = "eng")

from PIL import Image
import io
def bytes_to_image(image_bytes):
    io_bytes = io.BytesIO(image_bytes)
    return Image.open(io_bytes)
pytesseract.image_to_data(byte_array_image,lang='eng')

Другие вопросы по теме