标签: ocr

使用 cv2 / pytesseract 增强数字识别的局部对比度

我想使用 pytesseract 从图像中读取数字。图像如下:

在此输入图像描述

在此输入图像描述

数字是点状的,为了能够使用 pytesseract,我需要白色背景上的黑色连接数字。为此,我考虑使用侵蚀扩张作为预处理技术。正如您所看到的,这些图像很相似,但在某些方面却截然不同。例如,第一幅图像中的点比背景更暗,而第二幅图像中的点比背景更白。这意味着,在第一张图像中,我可以使用侵蚀来获得黑色连接线,在第二张图像中,我可以使用扩张来获得白色连接线,然后反转颜色。这导致以下结果:

在此输入图像描述

在此输入图像描述

使用适当的阈值,可以使用 pytesseract 轻松读取第一张图像。第二张图片,不管是谁,都比较棘手。问题是,例如“4”的某些部分比“3”周围的背景更暗。所以简单的阈值是行不通的。我需要诸如局部阈值或局部对比度增强之类的东西。这里有人有想法吗?

编辑:

OTSU、平均阈值和高斯阈值导致以下结果:

在此输入图像描述

python ocr opencv python-tesseract

2
推荐指数
1
解决办法
2416
查看次数

cv2.error (-215:断言失败) reader.ptr != 函数 cvDrawContours 中的 NULL

因此,我正在尝试创建一个车牌检测程序,并且我一直在遵循该指南(https://github.com/nicknochnack/ANPRwithPython/blob/main/ANPR%20-%20Tutorial.ipynb),但是我我目前遇到了问题。

img = cv2.imread('image4.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

bfilter = cv2.bilateralFilter(gray, 11, 17, 17) #Noise reduction
edged = cv2.Canny(bfilter, 30, 200) #Edge detection

keypoints = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = imutils.grab_contours(keypoints)
contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]

location = None
for contour in contours:
    approx = cv2.approxPolyDP(contour, 10, True)
    if len(approx) == 4:
        location = approx
        break

mask = np.zeros(gray.shape, np.uint8)
new_image = cv2.drawContours(mask, [location], 0,255, -1)
new_image = cv2.bitwise_and(img, img, mask=mask)
Run Code Online (Sandbox Code Playgroud)

我也尝试将“位置”更改为 0 或 [0] 但没有成功。

python ocr opencv machine-learning

2
推荐指数
1
解决办法
6166
查看次数

如何提高该图像的 OCR 准确性?

我将使用 Python 中的 OpenCV 和 OCR by 来从图片中提取文本pytesseract。我有这样的图像:

输入

然后我编写了一些代码来从该图片中提取文本,但它没有足够的精度来正确提取文本。

这是我的代码:

import cv2
import pytesseract
    
img = cv2.imread('photo.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_,img = cv2.threshold(img,110,255,cv2.THRESH_BINARY)

custom_config = r'--oem 3 --psm 6'
text = pytesseract.image_to_string(img, config=custom_config)
print(text)

cv2.imshow('pic', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我已经测试过cv2.adaptiveThreshold,但它不起作用cv2.threshold

最后,这是我的结果,与图片中的结果不同:

Color Yellow RBC/hpf 4-6
Appereance Semi Turbid WBC/hpf 2-3
Specific Gravity 1014 Epithelial cells/Lpf 1-2
PH 7 Bacteria (Few)
Protein Pos(+) Casts Negative
Glucose Negative Mucous (Few)
Keton Negative
Blood Pos(+)
Bilirubin Negative …
Run Code Online (Sandbox Code Playgroud)

python ocr opencv image-processing python-tesseract

2
推荐指数
1
解决办法
3213
查看次数

如何提高 EasyOCR 的准确性/预测?

我正在尝试从车牌中获取字符。但很少有错误的预测,比如

在此输入图像描述

我得到的输出为UP74 BD 3465,这是错误的。有许多B预测的例子8以及更多。

  • 如何提高其准确率?
  • 如何预处理图像以获得正确的预测或任何其他方法?
import matplotlib.pyplot as plt
import easyocr
from pylab import rcParams
from IPython.display import Image

rcParams['figure.figsize'] = 8, 16
reader = easyocr.Reader(['en'])

output = reader.readtext(path)
for i in range(len(output)):
    print(output[i][-2])
Run Code Online (Sandbox Code Playgroud)

python ocr text-extraction image-processing easyocr

2
推荐指数
1
解决办法
9531
查看次数

有什么方法可以仅使用 API 获取 Google 访问令牌吗?

我正在构建一个 RPA 流程来与 Google AI Document 集成,我遇到的挑战之一是获取访问令牌并在 API 调用期间使用它。大多数时候,我只是通过运行gcloud auth application-default print-access-token脚本来使用 powershell 来获取令牌。

我是否可以通过其他方式获取该令牌(也许是通过 API 调用或其他方式进行授权)?

ocr google-cloud-platform uipath rpa

2
推荐指数
1
解决办法
930
查看次数

KeyError:使用 pytesseract.image_to_data 时出现“PNG”

我尝试使用 pytesseract function 在图像文件中的文本周围放置方框image_to_data,但在 colab 上遇到以下错误:

    KeyError                                  Traceback (most recent call last)
<ipython-input-10-a92a28892aac> in <module>()
      6 img = cv2.imread("a.jpg")
      7 
----> 8 d = pytesseract.image_to_data(img, output_type=Output.DICT)
      9 print(d.keys())

5 frames
/usr/local/lib/python3.7/dist-packages/PIL/Image.py in save(self, fp, format, **params)
   2121         expand=0,
   2122         center=None,
-> 2123         translate=None,
   2124         fillcolor=None,
   2125     ):

KeyError: 'PNG'
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码是:

import cv2
import pytesseract
from pytesseract import Output
from PIL import Image

img = cv2.imread("a.jpg")

d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())
Run Code Online (Sandbox Code Playgroud)

考虑到可能image_to_data只能使用 PNG 而不能使用 jpeg (这很奇怪),我添加了几行来将 jpeg …

python ocr python-tesseract google-colaboratory

2
推荐指数
1
解决办法
6436
查看次数

R/Python:将 PDF 转换为表格

我有一个 PDF 图像文件(例如“p1.pdf” - 这是原始文档的扫描副本)保存在我的计算机上 - 该文件看起来像这样(我添加了红线以显示区别):

在此输入图像描述

我想将此 PDF 导入到 R 中,并将其转换为“表对象”。我尝试按照本教程(+ https://cran.r-project.org/web/packages/tesseract/vignettes/intro.html )来做到这一点:

library(tesseract)
library(magick)
library(png)
library(pdftools)
library(tidyverse)

pngfile <- pdftools::pdf_convert('p1.pdf', dpi = 600)
text <- tesseract::ocr(pngfile)
cat(text)

raw_img <- image_read(pngfile)

raw_img %>% 
    image_ocr()
Run Code Online (Sandbox Code Playgroud)

这似乎有效 - 我继续按照教程进行操作:

num_only <- tesseract::tesseract(
  options = list(tessedit_char_whitelist = c(".0123456789 "))
  )

raw_img %>% 
  image_quantize(colorspace = 'gray') %>% 
  image_threshold() %>% 
  image_crop(geometry_area(100, 0, 600, 40)) %>% 
  ocr(engine = num_only) 

combo <- tesseract::tesseract(
    options = list(
      tessedit_char_whitelist = paste0(
        c(letters, LETTERS, " ", ".0123456789 …
Run Code Online (Sandbox Code Playgroud)

python ocr tesseract r data-manipulation

2
推荐指数
1
解决办法
352
查看次数

Android中图像的字节表示的字节数每像素值

我目前正在编写一个需要在其中使用OCR的Android应用程序.

为了实现这一点,我将Tesseract与tesseract-android-tools项目结合使用.

我设法让Tesseract API初始化并需要使用以下setImage函数:

void com.googlecode.tesseract.android.TessBaseAPI.setImage(byte[] imagedata, int width, int height, int bpp, int bpl)
Run Code Online (Sandbox Code Playgroud)

我正在努力的是如何获得bpp(每像素字节数)和bpl(每行字节数)的正确值.有谁知道我怎么能得到这些价值观?我现在已经在那里放置了相当随机的值,并且相信它会在以后导致错误.

我应该注意到应用程序也使用JavaCV进行图像识别,这可以很好地识别图像,并且我正在使用相同的图像数据源进行此tesseract调用.

谢谢.

ocr android tesseract

1
推荐指数
1
解决办法
6441
查看次数

识别java中图像中的数字

我想识别下图中的数字

在此输入图像描述

我目前在eclipse java项目中使用Tess4J库,但它只能识别平面颜色背景中的字符.对于此图像,它甚至无法识别此图像上是否有字符(数字).帮我找到完成这项任务的方法.

这是我目前的代码:

import net.sourceforge.tess4j.*; 
import java.io.File; 

public class Main { 
  public static void main(String[] args) { 
    File imageFile = new File("image.png"); 
    Tesseract instance = Tesseract.getInstance(); 
    try { 
      String result = instance.doOCR(imageFile); 
      System.out.println(result); 
    } catch (TesseractException e) {
      System.err.println(e.getMessage()); 
    } 
  } 
}
Run Code Online (Sandbox Code Playgroud)

如果有办法计算黄线分隔的方块.

Thank you

java ocr tesseract image-processing

1
推荐指数
1
解决办法
6479
查看次数

如何更改识别语言

这里使用Google视觉,我成功地分别创建了一个clientimage使用vision.Client()client.image(content=data)。然后使用发送图像image.detect_text(),尝试读取图像中的数字。但是,Google视觉一直不准确,从这个问题中我听说,将语言设置为另一种(非拉丁)语言将对此有所帮助。

但是,这是我在哪里卡住了,我不知道在哪里设置的languageHints,是的,我已经看到了这个链接的文档AnnotateImageRequest,但我仍然困惑,其中该用武之地。

python ocr google-cloud-vision

1
推荐指数
1
解决办法
450
查看次数