如何从图像中提取文本?
我不是在谈论扫描文件,而是普通的图像,比如你在课堂上拍摄黑板的高清照片,上面写得很好;或者当你拍摄食谱书页时,想要将食谱转换为文本格式。
有没有免费开源软件可以做到这一点?
我尝试了tesseract,但结果很糟糕。
我不是在谈论扫描文件,而是普通的图像,比如你在课堂上拍摄黑板的高清照片,上面写得很好;或者当你拍摄食谱书页时,想要将食谱转换为文本格式。
有没有免费开源软件可以做到这一点?
我尝试了tesseract,但结果很糟糕。
tesseract-ocr
相比其他所有工具都更好。
安装时,请运行以下命令。
sudo apt-get install tesseract-ocr
tesseract filename.jpg output.txt
,然后它会生成output.txt
文件。tesseract-ocr-LANG
包,其中LANG
是三个字母的ISO 639-2语言代码。目前在18.04仓库中有123种语言。例如,可以使用以下命令:
tesseract mySpanishText.jpg output -l spa
OCR
的效果会更好(后者是我从未开始使用它的原因)。 - Rinzwind试试青蛙
在Ubuntu上使用Flatpak安装:sudo apt install zbar-tools
,然后再执行sudo snap install frog
。 - NingaCodingTRVzbar-tools
?我已经更新了我的答案,包括一个指向 snap 的链接。 - Flimm试试TextSnatcher。这个应用程序在幕后使用Tesseract OCR 4.x进行字符识别。
可能在Ubuntu上安装它最简单的方法是从Flathub获取:sudo apt-get install tesseract-ocr
#!/usr/bin/env python3.10
import os
import subprocess
def list_files(path):
files = []
for name in os.listdir(path):
if os.path.isfile(os.path.join(path, name)):
files.append(os.path.join(path, name))
return files
def convertImageToText(img_file):
#process = subprocess.Popen(['tesseract', img_file,
# ''.join(img_file.rsplit('.png', 1))])
os.system(f"tesseract {img_file} {''.join(img_file.rsplit('.png', 1))}")
def startOperation():
list_file = list_files(".")
print(list_file)
for img_file in list_file:
if img_file.lower().split(".")[-1] == "png":
convertImageToText(img_file)
startOperation()