如何将手写句子的图片拆分为单词(获取每个单词的起始和结束坐标)
我正在做一个文本识别的脚本(HCR),如果只给它一个单词,它工作得很好。但我的任务是给它一整段文本,现在我卡住了……
这段文本可以同时是竖着和横着的。
我使用的是Python和OpenCV的形态学变换,但我不太确定效果是否很好。
这是文本的例子:
这是我代码的一部分:
img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 5)
img = cv2.medianBlur(img, 5)
kernel = np.ones((4, 4))
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
img = cv2.morphologyEx(img, cv2.MORPH_DILATE, kernel)
这是结果:
根据这些文本,我不知道怎么从中提取出单词的坐标……
我有个想法是用yolo来检测文本单词,但我不确定它的成功率和速度。
目前我在考虑是否可以从整段文本中提取出文本行,但即使这样我也不太确定。有人能帮我吗?
1 个回答
如果你打算用YOLO来识别文字,那就别再做那些图像处理了。比如说,不需要进行阈值处理、模糊、膨胀、腐蚀等等。直接用原始的图片来处理,这样能得到更好的结果。
而且,Darknet/YOLO确实可以用来处理文本。文字其实就是一串像素——就是数字而已!没有什么固定的物体概念可以去触碰或操作。我自己经常用Darknet/YOLO来处理文字,还在YouTube上发布了一些教学视频,展示可以做的事情。例如:https://www.youtube.com/watch?v=XxhbXccHEpA
如果你训练你的Darknet/YOLO网络来识别单个单词,那么你会得到每个单词出现的坐标。如果你使用DarkHelp库或命令行工具,记得设置排序方式为ESort::kPageOrder,这样结果就会按从上到下、从左到右的顺序排列,否则你得到的结果可能会是有点随机的顺序。我在这个YouTube视频中演示了这一点(可以跳到4分50秒),视频中是用来识别字母而不是单词。
如果你想这样进行,我建议你先看看YOLO的常见问题解答:https://www.ccoderun.ca/programming/yolo_faq/#how_to_get_started