=Start=
缘由:
简单整理一下在macOS系统上对图片做OCR的几种方法,方便有需要的时候参考。
实际测试和使用下来,macOS上最准确好用的还就是macOS系统自带的OCR功能,其它的比如Tesseract或者其他的工具(微信等IM自带的截图文字内容提取)在效果或是使用便利性上还是差了点意思(比如准确性或是要联网等方面)。
正文:
参考解答:
1、OCR提取图片中的文字内容
1. 传统的 Tesseract
brew install tesseract
brew install tesseract-lang
tesseract --help
tesseract --help-extra
tesseract test_pic1.png - --oem 1 #将识别结果直接输出到终端
tesseract test_pic1.png ocr_result_tesseract --oem 1 -l chi_sim
2. 预览(Preview)应用
打开图片/PDF文件之后直接选中即可进行复制操作。
- 在 Mac 上前往“预览” App 。
- 打开照片或图像(其中显示文本)。
- 将指针放在文本上,然后执行以下一项操作:
- 拷贝文本:拖移以选择文本,按住 Control 键点按所选内容,然后选取“拷贝文本”。然后,你可以将该文本粘贴到其他文稿或 App 中。【注】如果无法选择文本,请选取“工具”>“文本选择”以打开文本选择工具。
3. ocrmac
安装方法:
python3 -m venv venv1
source venv1/bin/activate
pip install ocrmac
pip install ipython
安装中的一些注意事项:
- 不建议直接在外层全局系统环境中安装一些不太熟悉的包/库(这样不太安全),建议新起一个虚拟环境来安装和测试,比如:
$ pip3 install ipython
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.
If you wish to install a Python library that isn't in Homebrew,
use a virtual environment:
python3 -m venv path/to/venv
source path/to/venv/bin/activate
python3 -m pip install xyz
If you wish to install a Python application that isn't in Homebrew,
it may be easiest to use 'pipx install xyz', which will manage a
virtual environment for you. You can install pipx with
brew install pipx
You may restore the old behavior of pip by passing
the '--break-system-packages' flag to pip, or by adding
'break-system-packages = true' to your pip.conf file. The latter
will permanently disable this error.
If you disable this error, we STRONGLY recommend that you additionally
pass the '--user' flag to pip, or set 'user = true' in your pip.conf
file. Failure to do this can result in a broken Homebrew installation.
Read more about this behavior here: <https://peps.python.org/pep-0668/>
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
$
$ brew search ipython
==> Formulae
ipython bpython wxpython jython cython
$
推荐方法:
- 简单项目:如果你只需要一个基本的隔离环境并且不想引入额外的工具链,那么
venv
或virtualenv
是很好的选择。 - 复杂项目:对于需要严格控制依赖关系、跨平台支持或者涉及非 Python 包的情况,
conda
是最佳选项。 - 现代开发流程:如果你希望采用更先进的项目管理方式,
poetry
和pipenv
提供了更好的依赖解析和锁定机制,特别适合团队协作和持续集成/部署场景。
根据你的具体需求和技术栈来选择最适合的工具。无论哪种方法,都能够有效地创建和管理 Python 的虚拟隔离环境。
- 安装好了虚拟环境之后可以通过 alias-别名 来方便使用,比如:
# 跳转到专门用于测试的目录新建虚拟环境
cd ~/do_test/
python3 -m venv venv1
# 在shell中添加别名方便随时随地进入虚拟环境
# vim ~/.zshrc
alias venv1="source ~/do_test/venv1/bin/activate"
# source ~/.zshrc
venv1
常规使用:
#!/usr/bin/env python
from ocrmac import ocrmac
annotations = ocrmac.OCR('test_pic1.png').recognize() #对于图片中的中文内容识别不好,需要通过 language_preference 指定语言
annotations = ocrmac.OCR('test_pic1.png', language_preference=['zh-Hans']).recognize() #ok
'''
[('作新年里的第一篇,我们讲什么话题呢?', 0.5, [0.02004453812264858, 0.9707568809405439, 0.4632516871018234, 0.021975676947777467]), ('讲破局。', 1.0, [0.02004454434757439, 0.9243119263511643, 0.09131403086684081, 0.020642201834862317]), ('我经常听到一类声音:', 0.5, [0.020044542850228938, 0.8793604652597939, 0.23608017638194745, 0.017441860032737733]), ('时间不经浪,人生不经晃,只有年纪噌噌往上涨;', 0.5, [0.02004454478891597, 0.8255813958466146, 0.550111365024989, 0.02476264030561537]), ('家里没有矿,全靠自己扛,辛苦到头来一场空忙;', 0.5, [0.02004454570576815, 0.7790697679033006, 0.550111365024989, 0.02482931438936009]), ..., ('这件事,跟着我们阅读超过1年的读者,都记得,不记得你也可以点进去复习复习。', 1.0, [0.020044559825702565, 0.002866972200416651, 0.8930957438866158, 0.021842329873951294])]
'''
annotations = ocrmac.OCR('test_pic1.png', language_preference=['zh-Hans'], framework="livetext").recognize() #ok 不过这里的识别结果单位变成了一个字符,但每个识别结果的置信度都很高
'''
[('作', 1.0, [0.02004454736451367, 0.970756880733945, 0.027846489542340463, 0.020642201834862386]), ('为', 1.0, [0.04789103690685413, 0.970756880733945, 0.023725834797891032, 0.020642201834862386]), ..., ('。', 1.0, [0.9009226713532513, 0.0028669724770642446, 0.012217638223586125, 0.021842329848517084])]
'''
print(annotations)
for x in annotations:
print(x[0])
2、截图后自动OCR提取文字内容
快捷指令
新建一个名为【截屏后OCR】的快捷指令(包含如下流程):
- 【交互】截屏
- 从【截屏】中提取文本
- 在“快速查看”中显示【图像中的文本】
相关操作的解释:
- 截屏:将设备屏幕截屏。结果:设备屏幕的图像。
- 从图像中提取文本:使用OCR提取图像中的文本。结果:文本列表。
- 快速查看:通过系统的“快速查看”显示输入的预览。
- 拷贝至剪贴板:将上一个操作的结果拷贝到剪贴板。
- 获取剪贴板:将剪贴板的内容传递到下一个操作。
- 生成二维码:从输入文本生成二维码。todo:看看一个二维码中可以包含的信息最多能有多少。
补充:创建好快捷指令之后,可以将快捷指令放到菜单栏中,以从Mac的菜单栏运行快捷指令,提高效率。
第三方应用
- Textinator
按照说明安装应用程序 Textinator 了之后,使用快捷键 ⌘ + ⇧ + 4
(Cmd + Shift + 4
)截取屏幕区域的屏幕截图的时候,该应用程序将自动检测屏幕截图中的任何文本并将其复制到剪贴板。
Install the app per instructions below. Then, take a screenshot of a region of the screen using ⌘ + ⇧ + 4
(Cmd + Shift + 4
). The app will automatically detect any text in the screenshot and copy it to your clipboard.
- 其它(待收集)
补充:一般情况下,如果系统原生工具/功能就可以满足要求,不建议额外安装第三方应用来实现。
参考链接:
Cost aside, what is the most accurate OCR app?
https://www.reddit.com/r/macapps/comments/zt23ct/cost_aside_what_is_the_most_accurate_ocr_app/
ocrmac – 使用Apple视觉框架进行图片文本提取的Python包装器
https://github.com/straussmaximilian/ocrmac
Use Apple’s Vision framework from Python to detect text in images
https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac587fc4c
Use Apple’s Vision Framework via PyObjC to perform text detection on images (macOS 10.15+ only)
https://github.com/RhetTbull/osxphotos/blob/main/osxphotos/text_detection.py
Simple MacOS StatusBar / Menu Bar app to automatically detect text in screenshots
https://github.com/RhetTbull/textinator
Recognizing Text in Images
https://developer.apple.com/documentation/vision/recognizing-text-in-images
快捷指令
https://support.apple.com/zh-cn/guide/shortcuts/welcome/ios
=END=
《“在macOS系统上对图片做OCR的几种方法”》 有 1 条评论
# coding=utf-8
import sys, time
from ocrmac import ocrmac
def main():
____for item in sys.argv[1:]:
________# annotations = ocrmac.OCR(item, language_preference=[‘zh-Hans’], framework=”livetext”).recognize()
________annotations = ocrmac.OCR(item, language_preference=[‘zh-Hans’]).recognize()
________for x in annotations:
____________print(x[0])
________#
____#