起源
今天想把春节时折腾OCR引擎-Tesseract时产出的脚本整理一下,以便发布到网络方便大家参考。看了一下,觉得没什么必要,因为我自己都很难看懂了。跟住看到一些应用百度文字识别免费接口的文章,心里痒痒,按耐不住自己搞了一个Python图形应用。
概要
我用到了Qt官方的PySide2来实现图形界面,使用下来感觉十分容易上手。官方的教程还是比较齐全的。
我还拼了一个SVG格式的应用图标,设计能力有待提高。我是先在freeicons.io搜索一些具象,再在Method Draw上将两块代码拼接起来,最后生成一个SVG。需要注意的是:
1. 把每块代码放在一个新的独立的<g>标签中。 2. 一次过拼接完代码,否则网站会自动添加一些内容。
百度免费的文字识别接口没有参数设置图片排版(横竖排版),所以我的族谱数字化行动还没有找到完美的OCR工具。我准备自己写个函数,把横版结果解析为竖版原文。
效果图
关键代码
设置窗体标题和图标:
self.setWindowTitle("Py-BaiduOCR")
self.setWindowIcon(QtGui.QIcon("./image2char.svg"))
调用文件浏览器选择图片,然后展示图片:
""" 选择图片 """
def selectImage(self):
dialog = QtWidgets.QFileDialog(self)
dialog.setFileMode(QtWidgets.QFileDialog.ExistingFile) #只允许选择一个已有的文件
self.imageInfo = dialog.getOpenFileName()
self.lineditImagePath.setText(self.imageInfo[0]) #imageInfo是列表,第一个元素为路径
self.showImage()
""" 展示图片 """
def showImage(self):
pixmap = QtGui.QPixmap(self.imageInfo[0])
pixmap = pixmap.scaled(500, 500, QtCore.Qt.KeepAspectRatio) #QtCore.Qt包含了很多枚举,文档值得一看
self.labelImage.setPixmap(pixmap)
self.labelImage.setScaledContents(True)
调用百度接口识别图片:
""" 读取文件内容 """
def get_file_content(self):
with open(self.lineditImagePath.text(), 'rb') as fp:
return fp.read()
""" 识别文字 """
def ocr(self):
image = self.get_file_content()
""" 调用通用文字识别, 图片参数为本地图片 """
ret = bac.client.basicGeneral(image)
print(ret) #返回的是字典
for each in ret['words_result']: #选择字典中的结果列表,遍历输出
self.plaintexteditResult.appendPlainText(each['words'])
分享源码
源码在此,点赞/加星/收藏,助我一指之力。
来源:oschina
链接:https://my.oschina.net/wffger/blog/3275627