阅读PDF书籍时如果该书是扫描版的那么记笔记就需要手打文字。个人感觉及其麻烦(主要还是懒)。所以想着实现一个简单的图片转文字小工具提升一下自己的阅读效率。
操作系统:Ubuntu18.04
编程语言:Python3.6
1. 监听文件夹
使用系统自带的截图工具(Ubuntu为screenshot,快捷键是Shift+PrtSc)选择截取屏幕,screenshot会将截取的图片自动保存到“/home/用户/图片”目录下,那么我只需要监听该目录就可以获取到截取的图片。
使用Python文件监听工具pyinotify来实现目录监听。使用pip3 install pyinotify安装该模块,具体监听代码如下:
class EventHandler(ProcessEvent):
def process_IN_CREATE(self, event):
text = os.path.join(event.path,event.name)
print(text)
def auto_compile(path='.'):
wm = WatchManager()
mask = IN_CREATE
notifier = ThreadedNotifier(wm, EventHandler())
notifier.start()
wm.add_watch(path, mask, rec=True, auto_add=True)
while True:
try:
notifier.process_events()
if notifier.check_events():
notifier.read_events()
except KeyboardInterrupt:
notifier.stop()
break
代码参考
pyinotify使用的是Linux底层的Inotify机制。
2. 使用tesseract-ocr识别获取的图片
获取到截取的图片的地址后就可以通过Python的tesserocr模块调用tesseract-ocr来识别图片中的文字。具体代码如下:
def image2word(path):
try:
time.sleep(1) # 停1秒,否则可能会读取图片失败
image = Image.open(path)
words = tesserocr.image_to_text(image)
print(words)
except (OSError, NameError):
print("os error")
Ubuntu下安装tesserocr
- 安装tesseract-ocr:sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev。
- 查看语言支持:tesseract --list-langs。
- 安装语言:
git clone https://github.com/tesseract-ocr/tessdata.git
sudo mv tessdata/* /usr/share/tesseract-ocr/tessdata - 安装 tesserocr:pip3 install tesserocr pillow。
笔者安装使出现error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 '错误。解决办法。
3. 使用pyperclip模块将识别后的文字添加到剪切版
- 在Ubuntu中使用该模块需要先安装xsel和xclip。
sudo apt-get install xsel
sudo apt-get install xclip - 使用pip安装pyperclip:pip3 install pyperclip。
- 具体代码只需要一行:pyperclip.copy(words)。
源码
改善目标
- 使用Python实现截图后解析替代使用系统自带截图工具。
- 提高中文识别率。
- 解决跨平台问题。