EasyOCR安装与使用(Win10)
项目网站:https://github.com/JaidedAI/EasyOCR
前提:电脑上有python环境(建议3.8)和pip工具
安装
安装torch torchvision
根据项目的安装注意事项(Window),我们需要先安装一些其他模块
Note 1: For Windows, please install torch and torchvision first by following the official instructions here https://pytorch.org. On the pytorch website, be sure to select the right CUDA version you have. If you intend to run on CPU mode only, select
CUDA = None
.
//我选的是Windows、Pip、Python、CPU(不使用CUDA),得到对应的安装命令是:
pip3 install torch torchvision torchaudio
可以更新一个pip
python.exe -m pip install --upgrade pip
检测torch是否安装成功
E:\anaconda\install>python Python 3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> x = torch.rand(5,3) >>> print(x) tensor([[0.7088, 0.4721, 0.0973], [0.4558, 0.1847, 0.8272], [0.4509, 0.7558, 0.0398], [0.5176, 0.2787, 0.4579], [0.4937, 0.9435, 0.7807]]) >>>
问题1
注意有时候虽然显示你成功安装了torch,但是在import这个模块的是否会找不到,原因是:
电脑中先前安装了多个
python
,且他们的解释器命名都为python.exe
,都放在了系统变量中。所以系统默认的python版本可能与Anaconda
中所需的版本不匹配
查看电脑默认python路径
E:\anaconda\install>py -0p Installed Pythons found by py Launcher for Windows -3.8-64 E:\anaconda\install\python.exe * #带*号的就是默认使用的 -3.7-64 C:\Users\22927\AppData\Local\Programs\Python\Python37\python.exe -3.5-64 C:\Users\22927\AppData\Local\Programs\Python\Python35\python.exe
我这里没有遇到这个问题,如果你遇到了可以到这几个路径把python的名字改一下(后面加个版本),然后使用python+版本进入某个python可执行程序,而不是默认的python
问题2
import torch的时候报错:
ImportError: cannot import name ‘TypeAlias‘ from ‘typing_extensions‘解决方案
方案1:换python版本,我用的是3.8,但是换版本很麻烦,这个方案未使用。
方案2:更新typing-extensions版本
pip install typing-extensions --upgrade
我用的方案2
安装EasyOCR
pip install easyocr
有时候会报出网络不好导致install异常,可以多试几次(我就是试了3、4次就可以下载了),报错堆栈如下:
1 E:\anaconda\install>pip install easyocr 2 Collecting easyocr 3 Downloading easyocr-1.6.2-py3-none-any.whl (2.9 MB) 4 --------------------------------------- 0.1/2.9 MB 2.7 kB/s eta 0:17:21 5 ERROR: Exception: 6 Traceback (most recent call last): 7 File "e:\anaconda\install\lib\site-packages\pip\_vendor\urllib3\response.py", line 438, in _error_catcher 8 yield 9 File "e:\anaconda\install\lib\site-packages\pip\_vendor\urllib3\response.py", line 561, in read 10 data = self._fp_read(amt) if not fp_closed else b"" 11 File "e:\anaconda\install\lib\site-packages\pip\_vendor\urllib3\response.py", line 527, in _fp_read 12 return self._fp.read(amt) if amt is not None else self._fp.read() 13 File "e:\anaconda\install\lib\site-packages\pip\_vendor\cachecontrol\filewrapper.py", line 90, in read 14 data = self.__fp.read(amt) 15 File "e:\anaconda\install\lib\http\client.py", line 454, in read 16 n = self.readinto(b) 17 File "e:\anaconda\install\lib\http\client.py", line 498, in readinto 18 n = self.fp.readinto(b) 19 File "e:\anaconda\install\lib\socket.py", line 669, in readinto 20 return self._sock.recv_into(b) 21 File "e:\anaconda\install\lib\ssl.py", line 1241, in recv_into 22 return self.read(nbytes, buffer) 23 File "e:\anaconda\install\lib\ssl.py", line 1099, in read 24 return self._sslobj.read(len, buffer) 25 socket.timeout: The read operation timed out 26 27 During handling of the above exception, another exception occurred: 28 29 Traceback (most recent call last): 30 File "e:\anaconda\install\lib\site-packages\pip\_internal\cli\base_command.py", line 160, in exc_logging_wrapper 31 status = run_func(*args) 32 File "e:\anaconda\install\lib\site-packages\pip\_internal\cli\req_command.py", line 247, in wrapper 33 return func(self, options, args) 34 File "e:\anaconda\install\lib\site-packages\pip\_internal\commands\install.py", line 419, in run 35 requirement_set = resolver.resolve( 36 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 92, in resolve 37 result = self._result = resolver.resolve( 38 File "e:\anaconda\install\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 481, in resolve 39 state = resolution.resolve(requirements, max_rounds=max_rounds) 40 File "e:\anaconda\install\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 348, in resolve 41 self._add_to_criteria(self.state.criteria, r, parent=None) 42 File "e:\anaconda\install\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 172, in _add_to_criteria 43 if not criterion.candidates: 44 File "e:\anaconda\install\lib\site-packages\pip\_vendor\resolvelib\structs.py", line 151, in __bool__ 45 return bool(self._sequence) 46 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 155, in __bool__ 47 return any(self) 48 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 143, in <genexpr> 49 return (c for c in iterator if id(c) not in self._incompatible_ids) 50 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 47, in _iter_built 51 candidate = func() 52 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 206, in _make_candidate_from_link 53 self._link_candidate_cache[link] = LinkCandidate( 54 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 297, in __init__ 55 super().__init__( 56 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 162, in __init__ 57 self.dist = self._prepare() 58 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 231, in _prepare 59 dist = self._prepare_distribution() 60 File "e:\anaconda\install\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 308, in _prepare_distribution 61 return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) 62 File "e:\anaconda\install\lib\site-packages\pip\_internal\operations\prepare.py", line 491, in prepare_linked_requirement 63 return self._prepare_linked_requirement(req, parallel_builds) 64 File "e:\anaconda\install\lib\site-packages\pip\_internal\operations\prepare.py", line 536, in _prepare_linked_requirement 65 local_file = unpack_url( 66 File "e:\anaconda\install\lib\site-packages\pip\_internal\operations\prepare.py", line 166, in unpack_url 67 file = get_http_url( 68 File "e:\anaconda\install\lib\site-packages\pip\_internal\operations\prepare.py", line 107, in get_http_url 69 from_path, content_type = download(link, temp_dir.path) 70 File "e:\anaconda\install\lib\site-packages\pip\_internal\network\download.py", line 147, in __call__ 71 for chunk in chunks: 72 File "e:\anaconda\install\lib\site-packages\pip\_internal\cli\progress_bars.py", line 53, in _rich_progress_bar 73 for chunk in iterable: 74 File "e:\anaconda\install\lib\site-packages\pip\_internal\network\utils.py", line 63, in response_chunks 75 for chunk in response.raw.stream( 76 File "e:\anaconda\install\lib\site-packages\pip\_vendor\urllib3\response.py", line 622, in stream 77 data = self.read(amt=amt, decode_content=decode_content) 78 File "e:\anaconda\install\lib\site-packages\pip\_vendor\urllib3\response.py", line 587, in read 79 raise IncompleteRead(self._fp_bytes_read, self.length_remaining) 80 File "e:\anaconda\install\lib\contextlib.py", line 131, in __exit__ 81 self.gen.throw(type, value, traceback) 82 File "e:\anaconda\install\lib\site-packages\pip\_vendor\urllib3\response.py", line 443, in _error_catcher 83 raise ReadTimeoutError(self._pool, None, "Read timed out.") 84 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
使用EasyOCR识别图片中的文字
识别下面图片中的繁体中文:
#命令行下依次执行 import easyocr reader = easyocr.Reader(['ch_tra', 'en']) result = reader.readtext(r'd:\temp\chinese_tra.jpg')
print(result)
问题1
import easyocr时候报错:
>>> import easyocr OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.
原因:(我用的是anaconda自带的3.8版本的python编译器)
anaconda的环境下存在两个libiomp5md.dll文件。所以直接去虚拟环境的路径下搜索这个文件,可以看到在环境里有三个dll文件:
其中第一个是torch路径下的,其他二个是虚拟环境本身路径下的,转到第二个目录下把它剪切到其他路径下备份就好(最好把路径也备份一下)。(我是直接改名字)
问题2
在执行第二句代码的时候报错:TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
1 E:\anaconda\install>python 2 Python 3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 3 Type "help", "copyright", "credits" or "license" for more information. 4 >>> import easyocr 5 >>> reader = easyocr.Reader(['ch_tra', 'en']) 6 CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU. 7 Downloading detection model, please wait. This may take several minutes depending upon your network connection. 8 Traceback (most recent call last): 9 File "E:\anaconda\install\lib\urllib\request.py", line 1350, in do_open 10 h.request(req.get_method(), req.selector, req.data, headers, 11 File "E:\anaconda\install\lib\http\client.py", line 1240, in request 12 self._send_request(method, url, body, headers, encode_chunked) 13 File "E:\anaconda\install\lib\http\client.py", line 1286, in _send_request 14 self.endheaders(body, encode_chunked=encode_chunked) 15 File "E:\anaconda\install\lib\http\client.py", line 1235, in endheaders 16 self._send_output(message_body, encode_chunked=encode_chunked) 17 File "E:\anaconda\install\lib\http\client.py", line 1006, in _send_output 18 self.send(msg) 19 File "E:\anaconda\install\lib\http\client.py", line 946, in send 20 self.connect() 21 File "E:\anaconda\install\lib\http\client.py", line 1402, in connect 22 super().connect() 23 File "E:\anaconda\install\lib\http\client.py", line 917, in connect 24 self.sock = self._create_connection( 25 File "E:\anaconda\install\lib\socket.py", line 808, in create_connection 26 raise err 27 File "E:\anaconda\install\lib\socket.py", line 796, in create_connection 28 sock.connect(sa) 29 TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 30 31 During handling of the above exception, another exception occurred: 32 33 Traceback (most recent call last): 34 File "<stdin>", line 1, in <module> 35 File "E:\anaconda\install\lib\site-packages\easyocr\easyocr.py", line 88, in __init__ 36 detector_path = self.getDetectorPath(detect_network) 37 File "E:\anaconda\install\lib\site-packages\easyocr\easyocr.py", line 249, in getDetectorPath 38 download_and_unzip(self.detection_models[self.detect_network]['url'], self.detection_models[self.detect_network]['filename'], self.model_storage_directory, self.verbose) 39 File "E:\anaconda\install\lib\site-packages\easyocr\utils.py", line 586, in download_and_unzip 40 urlretrieve(url, zip_path, reporthook=reporthook) 41 File "E:\anaconda\install\lib\urllib\request.py", line 247, in urlretrieve 42 with contextlib.closing(urlopen(url, data)) as fp: 43 File "E:\anaconda\install\lib\urllib\request.py", line 222, in urlopen 44 return opener.open(url, data, timeout) 45 File "E:\anaconda\install\lib\urllib\request.py", line 525, in open 46 response = self._open(req, data) 47 File "E:\anaconda\install\lib\urllib\request.py", line 542, in _open 48 result = self._call_chain(self.handle_open, protocol, protocol + 49 File "E:\anaconda\install\lib\urllib\request.py", line 502, in _call_chain 50 result = func(*args) 51 File "E:\anaconda\install\lib\urllib\request.py", line 1393, in https_open 52 return self.do_open(http.client.HTTPSConnection, req, 53 File "E:\anaconda\install\lib\urllib\request.py", line 1353, in do_open 54 raise URLError(err) 55 urllib.error.URLError: <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
因为网络问题,自动下载总是失败报错,所以只好去网上手动下载训练好的模型。
以下是一些模型的下载地址:
text detection model (CRAFT)
下载好模型之后就需要解压文件,然后把.pth文件放到C:\Users\你的用户名\.EasyOCR\model文件下,就可以正常使用啦。
例如我使用了一个繁体中文的模型,输出如下:(发现解压后就没有去下载繁体中文模型)
>>> reader = easyocr.Reader(['ch_tra', 'en']) CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU. >>> result = reader.readtext(r'e:\anaconda\install\1.jpg') >>> print(result) [([[1455, 155], [1803, 155], [1803, 276], [1455, 276]], '學生証', 0.7933082015720206)...]
简体中文reader对象的创建(不知道为什么我解压简体中文的模型之后创建reader对象的时候还是需要下载模型,而下载模型又网络超时,所以简体模型就用不了)
reader = easyocr.Reader(['ch_sim', 'en'])
参考文章
【Pytorch安装】windows下,安装了torch但是import torch失败
ImportError: cannot import name ‘TypeAlias‘ from ‘typing_extensions‘解决方案
OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.