我正在编写一个小程序,可以识别网络摄像头中的字符。符号有两种类型:单线和双线。它看起来像这样:
如果单行照片一切都清楚:我们只是按 x 坐标排序,那么我在处理两行照片时就会遇到困难。我试图编写一个简单的按类型排序,如下所示:
sorted_df = df.sort_values(by=['x', 'x'], ascending=[False, True])
但这样的决定往往是错误的。问题还在于带有符号的输入图像可能有轻微的角度。
输入看起来像这样。我用 panda 来和他们一起工作。
import pandas as pd
data = {
"xmin": [73.728722, 58.541206, 43.370064, 18.349848, 84.141769, 74.219193, 63.876919, 32.109692, 13.477271],
"ymin": [9.410283, 10.085771, 10.857979, 12.260820, 36.286518, 36.769310, 37.599922, 39.808289, 40.412071],
"xmax": [85.914436, 70.791809, 56.026375, 33.629444, 92.453529, 82.558533, 72.851395, 47.012421, 27.849062],
"ymax": [29.401623, 29.874952, 31.069559, 32.480732, 51.482807, 51.720161, 52.238033, 58.858406, 59.132389],
"name": ["A", "B", "C", "D", "1", "2", "3", "4", "5"]
}
df = pd.DataFrame(data)
有没有人有一个简单有效的解决方案?我应该朝哪个方向发展?我将非常感激!
假设你的倾斜角度不是太大,即第一行的字符总是明显高于第二行的字符:
ymin
对数据进行排序。ymin
的排序值中的大跳转来检测到第二行的跳转(或是否存在第二行)。阈值取决于您的数据。根据您的示例,您可以使用 (ymax - ymin)
的平均值或其中的某一部分作为动态阈值。如果上述关于倾斜角度的假设无效,我会建议进行一些预处理。这应该相对容易,因为您期望值位于不同的行中,因此您可以[“旋转”您的 x/y 值一定角度],直到连续字符的 y 值几乎没有变化(除了一个潜在的相对行之间有较大的跳跃)。 1