Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Tesseract识别页面上的单个字符_Python_Image Processing_Ocr_Tesseract_Python Tesseract - Fatal编程技术网

Python 使用Tesseract识别页面上的单个字符

Python 使用Tesseract识别页面上的单个字符,python,image-processing,ocr,tesseract,python-tesseract,Python,Image Processing,Ocr,Tesseract,Python Tesseract,此图像返回空字符串 基本上,我正在尝试为魔兽世界游戏制作一个机器人,但我对OCR这玩意儿真的很陌生。我无法让tesseract阅读这幅图像;我想要一个无序的字符列表,如果可能的话,还有包含它们的每个正方形的坐标。有什么办法可以这样做吗 谢谢你抽出时间 这是我的密码: from PIL import Image import cv2 from pytesseract import image_to_string column = Image.open('photo.png') gray = co

此图像返回空字符串

基本上,我正在尝试为魔兽世界游戏制作一个机器人,但我对OCR这玩意儿真的很陌生。我无法让tesseract阅读这幅图像;我想要一个无序的字符列表,如果可能的话,还有包含它们的每个正方形的坐标。有什么办法可以这样做吗

谢谢你抽出时间

这是我的密码:

from PIL import Image
import cv2
from pytesseract import image_to_string

column = Image.open('photo.png')
gray = column.convert('L')
blackwhite = gray.point(lambda x: 255 if x < 200 else 0, '1')
blackwhite.save("code_bw.jpg")


print(image_to_string(cv2.imread("code_bw.jpg")))
从PIL导入图像
进口cv2
从PyteSeract导入图像到字符串
column=Image.open('photo.png')
灰色=列。转换('L')
黑白=灰色点(如果x<200,则λx:255,否则为0,'1')
blackwhite.save(“code_bw.jpg”)
打印(图像到字符串(cv2.imread(“code\u bw.jpg”))

您需要进行一些预处理以隔离文本字符。一种简单的方法是使用大津阈值获得二值图像,然后我们可以找到轮廓并使用纵横比+轮廓面积进行滤波。这将为我们提供文本的边界框坐标,我们可以将其绘制到遮罩上。我们用输入图像按位和掩码来获得我们的清洁图像,然后将其放入OCR。结果如下:

检测到的文本字符

结果

光学字符识别结果

A
A R
P
代码

导入cv2
导入pytesseract
将numpy作为np导入
pytesseract.pytesseract.tesseract_cmd=r“C:\Program Files\tesseract OCR\tesseract.exe”
#加载图像、灰度、大津阈值
image=cv2.imread('1.jpg')
original=image.copy()
掩码=np.zero(image.shape,dtype=np.uint8)
灰色=cv2.CVT颜色(图像,cv2.COLOR\u BGR2GRAY)
thresh=cv2.阈值(灰色,0,255,cv2.thresh\u二进制\u INV+cv2.thresh\u OTSU)[1]
#查找轮廓并使用纵横比和面积进行过滤
cnts=cv2.找到的孔(阈值,cv2.外部,cv2.链近似,简单)
如果len(cnts)==2个其他cnts[1],则cnts=cnts[0]
对于碳纳米管中的碳:
面积=cv2。轮廓面积(c)
x、 y,w,h=cv2.boundingRect(c)
ar=w/浮子(h)
如果面积>1000且ar>0.85且ar<1.2:
cv2.矩形(图像,(x,y),(x+w,y+h),(36255,12),2)
cv2.矩形(掩模,(x,y),(x+w,y+h),(255255),-1)
投资回报率=原始[y:y+h,x:x+w]
#按位和以隔离字符
结果=cv2.按位_和(原始,掩码)
结果[掩码==0]=255
#光学字符识别
data=pytesseract.image_to_字符串(结果,lang='eng',config='--psm 6')
打印(数据)
cv2.imshow(“图像”,图像)
cv2.imshow('thresh',thresh)
cv2.imshow(“结果”,结果)
cv2.waitKey()

我觉得你是一个蟒蛇学家,所以下面有一个问题我无论如何都无法解决:只有在我的c驱动器上运行并删除pytesseract.pytesseract.tesseract\u cmd=r“c:\Program Files\tesseract OCR\tesseract.exe”行时,这段代码才有效。。。。为什么?我不确定,我使用的是windows,所以我需要这一行,默认情况下,这是可执行文件所在的位置。如果我不把它放进去,我会得到这个,这就是为什么至少对我来说这条线是必需的。如果没有它对你有效,那就太好了
import cv2
import pytesseract
import numpy as np

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

# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.jpg')
original = image.copy()
mask = np.zeros(image.shape, dtype=np.uint8) 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Find contours and filter using aspect ratio and area
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    area = cv2.contourArea(c)
    x,y,w,h = cv2.boundingRect(c)
    ar = w / float(h)
    if area > 1000 and ar > .85 and ar < 1.2:
        cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.rectangle(mask, (x, y), (x + w, y + h), (255,255,255), -1)
        ROI = original[y:y+h, x:x+w]

# Bitwise-and to isolate characters 
result = cv2.bitwise_and(original, mask)
result[mask==0] = 255

# OCR
data = pytesseract.image_to_string(result, lang='eng',config='--psm 6')
print(data)

cv2.imshow('image', image)
cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.waitKey()