我tesseract通过pytesseract绑定用于 OCR 。不幸的是,我在尝试提取包含下标样式数字的文本时遇到了困难——下标数字被解释为一个字母。
例如,在基本图像中:
我想将文本提取为“CH3”,即我不担心知道数字3是图像中的下标。
我在此使用的尝试tesseract是:
import cv2
import pytesseract
img = cv2.imread('test.jpeg')
# Note that I have reduced the region of interest to the known
# text portion of the image
text = pytesseract.image_to_string(
img[200:300, 200:320], config='-l eng --oem 1 --psm 13'
)
print(text)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这将错误地输出
'CHs'
Run Code Online (Sandbox Code Playgroud)
也有可能得到'CHa',具体取决于psm参数。
我怀疑这个问题与文本的“基线”在整个行中不一致有关,但我不确定。
如何从此类图像中准确提取文本?
更新 - 2020 年 5 月 19 日
在看到 Achintha Ihalage 的回答后tesseract,我没有为 提供任何配置选项,我探索了这些psm选项。
由于感兴趣的区域是已知的(在这种情况下,我使用 …
可以通过获取可能成员的列表来创建枚举,我这样做是这样的:
# example_issue.py
import enum
yummy_foods = ["ham", "cheese"]
foods = enum.Enum("Foods", yummy_foods)
cheese = foods.cheese
Run Code Online (Sandbox Code Playgroud)
这看起来不错,运行良好,但 mypy 返回
example_issue.py:4: error: Enum() expects a string, tuple, list or dict literal as the second argument
example_issue.py:5: error: "Type[foods]" has no attribute "cheese"
Found 2 errors in 1 file (checked 1 source file)
Run Code Online (Sandbox Code Playgroud)
mypy 在这里做什么,为什么它不能遵循 that foodscan take any value in yummy_foods?
我想在我的 python 文件之一中测试一种失败场景,如下所示:
来源.py
def myfunc():
a()
Run Code Online (Sandbox Code Playgroud)
相关测试.py
def testMyFuncException():
a = Mock()
a.side_effect = MyError
with self.assertRaises(MyError) as _ : <--- THIS LINE I CANNOT USE self.assertRaises
..
Run Code Online (Sandbox Code Playgroud)
但在这里我不能使用 self,因为它不与任何类关联。所以我没有得到任何关于如何做到这一点的线索。
编辑
我现在按照建议做了如下:
def testMyFuncException(TestCase):
a = Mock()
a.side_effect = MyError
with TestCase.assertRaises(MyError) as _ :
...
Run Code Online (Sandbox Code Playgroud)
现在我收到错误如下:
E fixture 'TestCase' not found
Run Code Online (Sandbox Code Playgroud) 当使用可选导入时,即包仅在函数内部导入,因为我希望它成为我包的可选依赖项,有没有办法将函数的返回类型提示为属于此可选的类之一依赖?
举一个简单的例子,pandas作为一个可选的依赖:
def my_func() -> pd.DataFrame:
import pandas as pd
return pd.DataFrame()
df = my_func()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,由于import语句在 内my_func,因此该代码将毫不奇怪地引发:
NameError: 名称 'pd' 未定义
如果改为使用字符串文字类型提示,即:
def my_func() -> 'pd.DataFrame':
import pandas as pd
return pd.DataFrame()
df = my_func()
Run Code Online (Sandbox Code Playgroud)
该模块现在可以毫无问题地执行,但mypy会抱怨:
错误:未定义名称“pd”
如何使模块成功执行并保留静态类型检查功能,同时还可以选择此导入?
我试图使用 python 将 beta 素数分布拟合到我的数据中。因为有scipy.stats.betaprime.fit,我尝试过这个:
import numpy as np
import math
import scipy.stats as sts
import matplotlib.pyplot as plt
N = 5000
nb_bin = 100
a = 12; b = 106; scale = 36; loc = -a/(b-1)*scale
y = sts.betaprime.rvs(a,b,loc,scale,N)
a_hat,b_hat,loc_hat,scale_hat = sts.betaprime.fit(y)
print('Estimated parameters: \n a=%.2f, b=%.2f, loc=%.2f, scale=%.2f'%(a_hat,b_hat,loc_hat,scale_hat))
plt.figure()
count, bins, ignored = plt.hist(y, nb_bin, normed=True)
pdf_ini = sts.betaprime.pdf(bins,a,b,loc,scale)
pdf_est = sts.betaprime.pdf(bins,a_hat,b_hat,loc_hat,scale_hat)
plt.plot(bins,pdf_ini,'g',linewidth=2.0,label='ini');plt.grid()
plt.plot(bins,pdf_est,'y',linewidth=2.0,label='est');plt.legend();plt.show()
Run Code Online (Sandbox Code Playgroud)
它向我显示的结果是:
Estimated parameters:
a=9935.34, b=10846.64, loc=-90.63, scale=98.93
Run Code Online (Sandbox Code Playgroud)
这与原始图和 PDF 中的图有很大不同:
如果我给出 的真实值 …
我想使用 python 将单元格中包含的数据拆分为多行。下面给出了这样的一个例子:
这是我的数据:
fuel cert_region veh_class air_pollution city_mpg hwy_mpg cmb_mpg smartway
ethanol/gas FC SUV 6/8 9/14 15/20 1/16 yes
ethanol/gas FC SUV 6/3 1/14 14/19 10/16 no
Run Code Online (Sandbox Code Playgroud)
我想把它转换成这种形式:
fuel cert_region veh_class air_pollution city_mpg hwy_mpg cmb_mpg smartway
ethanol FC SUV 6 9 15 1 yes
gas FC SUV 8 14 20 16 yes
ethanol FC SUV 6 1 14 10 no
gas FC SUV 3 14 19 16 no
Run Code Online (Sandbox Code Playgroud)
以下代码返回错误:
import numpy as np
from itertools import chain
# return …Run Code Online (Sandbox Code Playgroud) 我想问是否可以在 scikit-learn 中执行“Stratified GroupShuffleSplit”,换句话说,它是GroupShuffleSplit和StratifiedShuffleSplit的组合
这是我正在使用的代码示例:
cv=GroupShuffleSplit(n_splits=n_splits,test_size=test_size,\
train_size=train_size,random_state=random_state).split(\
allr_sets_nor[:,:2],allr_labels,groups=allr_groups)
opt=GridSearchCV(SVC(decision_function_shape=dfs,tol=tol),\
param_grid=param_grid,scoring=scoring,n_jobs=n_jobs,cv=cv,verbose=verbose)
opt.fit(allr_sets_nor[:,:2],allr_labels)
Run Code Online (Sandbox Code Playgroud)
在这里我应用了GroupShuffleSplit但我仍然想根据allr_labels
假设我有以下数组:
a = [4,2,3,1,4]
Run Code Online (Sandbox Code Playgroud)
然后我排序:
b = sorted(A) = [1,2,3,4,4]
Run Code Online (Sandbox Code Playgroud)
我怎么能有一个列表来映射每个数字的位置,例如:
position(b,a) = [3,1,2,0,4]
Run Code Online (Sandbox Code Playgroud)
澄清此列表包含位置而不是值)
(ps' 还考虑到前 4 个在位置 0)
python 2.7版中的turtle和Turtle有什么不同?
import turtle
star = turtle.Turtle()
for i in range(50):
star.forward(50)
star.right(144)
turtle.done()
Run Code Online (Sandbox Code Playgroud) ImportError Traceback (most recent call last)
<ipython-input-13-74c9bc9e3e4a> in <module>
8 from nltk.tokenize.toktok import ToktokTokenizer
9 #import contractions
---> 10 from contractions import CONTRACTION_MAP
11 import unicodedata
12
ImportError: cannot import name 'CONTRACTION_MAP' from 'contractions' (c:\users\nikita\appdata\local\programs\python\python37-32\lib\site-packages\contractions\__init__.py)
Run Code Online (Sandbox Code Playgroud)
一个问题是:该CONTRACTION_MAP变量是否已从包中弃用contractions?
我正在使用最新版本的 pyo3(主分支),目前尚不清楚如何将一个类的实例存储Store在另一个类上,如下例所示。例如,下面的代码组成了两个类,Store并且MyClass在一定程度上会起作用。
use pyo3::prelude::*;
#[pyclass]
#[derive(Clone)]
struct Store {
#[pyo3(get, set)]
data: i32
}
#[pymethods]
impl Store {
#[new]
fn new(data: i32) -> Self {
Store{ data }
}
}
#[pyclass]
struct MyClass {
#[pyo3(get, set)]
store: Store,
}
#[pymethods]
impl MyClass {
#[new]
fn new(store: Store) -> Self {
MyClass{ store }
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当这些类在以下示例中的 Python 中使用时,由于Store被克隆,断言失败。
import pyo3test as po3
mystore = po3.Store(7)
myobj = po3.MyClass(mystore)
assert(myobj.store is mystore)
Run Code Online (Sandbox Code Playgroud)
如何修改 …
我的代码如下:
for user,score in data:
if user in res.keys():
res[user] += [score]
else:
res[user] = [score]
Run Code Online (Sandbox Code Playgroud)
其中 data 是按如下方式排列的列表的列表:
data = [["a",100],["b",200],["a",50]]
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
res = {"a":[100,50],"b":[200]}
Run Code Online (Sandbox Code Playgroud)
是否可以通过单个字典理解来做到这一点?
python dictionary list-comprehension dictionary-comprehension
我的数组大小未知,我想删除最后一列
a = np.array([["A1","A2","A3"],["B1","B2","B3"],["C1","C2","C3"]])
Run Code Online (Sandbox Code Playgroud)
我试过了
a[-1:]
Run Code Online (Sandbox Code Playgroud)
但它删除了除最后一行之外的所有行
我也试过
a[:-1]
Run Code Online (Sandbox Code Playgroud)
它删除了最后一行。
如何删除最后一列?
python ×13
mypy ×2
contractions ×1
data-science ×1
dataset ×1
dictionary ×1
distribution ×1
enums ×1
estimation ×1
list ×1
nlp ×1
numpy ×1
ocr ×1
pandas ×1
pyo3 ×1
python-2.7 ×1
rust ×1
scikit-learn ×1
scipy ×1
shuffle ×1
tesseract ×1
unordered ×1