小编dsp*_*cer的帖子

如何使用 OCR 检测图像中的下标数字?

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选项。

由于感兴趣的区域是已知的(在这种情况下,我使用 …

python ocr tesseract python-tesseract

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

Mypy 无法推断从列表变量创建的枚举

可以通过获取可能成员的列表来创建枚举,我这样做是这样的:

# 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 enums mypy

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

在 Python 3.6 中使用不带 self 的assertRaises

我想在我的 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)

python python-unittest

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

如何使用可选导入输入提示?

当使用可选导入时,包仅在函数内部导入,因为我希望它成为我包的可选依赖项,有没有办法将函数的返回类型提示为属于此可选的类之一依赖?

举一个简单的例子,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 mypy python-typing

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

有没有比使用 Scipy 更适合数据的 beta 素数分布的解决方案?

我试图使用 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 estimation distribution scipy goodness-of-fit

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

使用python将单元格数据拆分为多行

我想使用 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)

python data-analysis pandas

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

Scikit-learn 中的分层 GroupShuffleSplit

我想问是否可以在 scikit-learn 中执行“Stratified GroupShuffleSplit”,换句话说,它是GroupShuffleSplitStratifiedShuffleSplit的组合

这是我正在使用的代码示例:

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

python shuffle dataset scikit-learn cross-validation

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

排序列表后如何保存原始索引?

假设我有以下数组:

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 list unordered

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

乌龟和乌龟的区别?

python 2.7版中的turtleTurtle有什么不同?

import turtle
star = turtle.Turtle()
for i in range(50):
    star.forward(50)
    star.right(144)
turtle.done()
Run Code Online (Sandbox Code Playgroud)

python turtle-graphics python-2.7 python-turtle

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

ImportError:无法从“contractions”导入名称“CONTRACTION_MAP”

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

python nlp machine-learning data-science contractions

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

如何在pyo3中编写类?

我正在使用最新版本的 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)

如何修改 …

python rust pyo3

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

字典理解:如果键存在,则附加到键值;如果键不存在,则创建一个新的键:值对

我的代码如下:

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

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

如何在python中删除数组的最后一列

我的数组大小未知,我想删除最后一列

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 numpy

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