Есть ли способ исправить ошибку "отказано в разрешении" с помощью pytesseract и python? - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь создать клиент-серверную программу в python, которая отправляет распознанный текст с картинки и полезную информацию о нем клиенту, который затем отображает его на oled-дисплее. Но проблема возникает на стороне сервера программы, когда она пытается использовать tesseract, я получаю следующую ошибку: PermissionError: [WinError 5] Доступ запрещен: 'C: \ Users \ BradS \ AppData \ Local \ Temp \ tess_97901m0e ». Я использую tesseract 5.0.0 с OpenCV 4.2.0 и python 3.8. Я попытался создать новую учетную запись, удалить и переустановить, но, похоже, ничего не работает, и да, я администратор. (Код сервера ниже)

import cv2
import pytesseract
from PIL import Image
import numpy as np
from pytesseract import Output
import wolframalpha
import socket
import datetime
import time
import sys

app_id = "********************"
img_counter = 0
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = socket.gethostname()
print(host)
port = 60539
s.bind((host, port))
s.listen(5)

cam = cv2.VideoCapture(0)

while True:
  c, addr = s.accept()
  print (f'Got connection from: {addr}')
  break

while True:
  ret, frame = cam.read()
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

  def remove_noise(gray):
    return cv2.medianBlur(gray, 5)


  def thresholding(gray):
    return cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

  def dilate(image):
    kernel = np.ones((5, 5), np.uint8)
    return cv2.dilate(image, kernel, iterations=1)

  cv2.imshow("test", gray)
  if not ret:
    break
  k = cv2.waitKey(1)

  if k % 256 == 27:
    print("Escape hit, closing...")
    break
  elif k % 256 == 32:

    img_name = "frames_0.png"
    cv2.imwrite(img_name, gray)
    print("frames_0.png written!")
    img = cv2.imread('frames_0.png')
    cv2.destroyAllWindows()

    d = pytesseract.image_to_data(img, output_type = Output.DICT)

    n_boxes = len(d['text'])
    for i in range(n_boxes):
      if int(d['conf'][i]) > 60:
        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv2.imshow('img', img)
    cv2.waitKey(0)
cam.release()
cv2.destroyAllWindows()

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

image = cv2.imread('frames_0.png')

text = pytesseract.image_to_string(image)
print(text)
cv2.destroyAllWindows

c.send(bytes(text, "utf-8"))
print ("Message sent")

if len(text) <= 0:
  sys.exit()

elif len(text) >= 1:
  query = text
  client = wolframalpha.Client(app_id)
  res = client.query(query)
  print(res.results)
  answer = next(res.results).text
  print (answer)
  c.send(bytes(answer, "utf-8"))
  print("Second message sent")
  c.close()

1 Ответ

0 голосов
/ 17 февраля 2020

Ссылаясь на { ссылка }, автор заявил, что даже если вы запускаете из администратора, это может не решить проблему, если пипс установлен внутри другого пространства пользователя. Это связано с тем, что администратор не владеет чужим каталогом пользовательского пространства, поэтому он не может видеть (go внутри) внутреннюю часть каталога, принадлежащего кому-либо. Ниже приведено точное решение.

python -m pip install -U pip --user //It solves in Windows. Note: You should provide --user option

Надеюсь, это поможет вам.

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