热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pythonselenium模块对网页进行截屏保存图片easyocr模块识别提取图片文字

一、selenium对网页截图,Image定位二次精准截图第三方模块“selenium”用于Python自动化与Web浏览器交互。1.安装模块pipinstall

一、selenium对网页截图,Image 定位二次精准截图

第三方模块“selenium”用于Python自动化与Web浏览器交互。

1.安装模块 pip install selenium      pip install Pillow

2.安装浏览器对应版本的驱动器

谷歌查看浏览器版本 访问“chrome://version/”

谷歌驱动器下载地址 http://chromedriver.storage.googleapis.com/index.html

注意将下载解压后的驱动器放到系统环境变量PATH的路径下 

3. 代码如下:

# -*- coding:utf-8 -*-
from selenium import webdriver
#import easyocr
import time
from PIL import Imagedef screenshots(): # 访问网页截屏driver = webdriver.Chrome() # 初始化一个谷歌浏览器实例driver.maximize_window() # 打开最大窗口# option = webdriver.ChromeOptions()
# option.add_argument('headless') # headless静默模式不弹出浏览器(也用于无GUI环境下)
# # 打开chrome浏览器
# driver = webdriver.Chrome(chrome_optiOns=option)driver.get("http://quote.eastmoney.com/sh600797.html") # 访问网页js = "var q=document.documentElement.scrollTop=500" # 滚动条下拉500个像素driver.execute_script(js) # 执行滚动条下拉500个像素操作time.sleep(1)driver.get_screenshot_as_file(r"C:\Zzlong\%s.png" % time.strftime('%Y-%m-%d %H-%M', time.localtime(time.time()))) # 截图保存为C:\Zzlong\2022-02-20 17-30.pngdriver.quit() #关闭浏览器# 另一种控制滚动条的方法
# driver.execute_script("window.scrollBy(0,1000)") 或 driver.execute_script("window.scrollTo(0,1000)")
# x坐标:正数则向右滑动的像素值,负数则向左滑动的像素值 | y坐标:正数则向下滑动的像素值,负数则向上滑动的像素值# imgelement = driver.find_element_by_id('rgt1')
# imgelement = driver.find_element_by_class_name('line24')
# location = imgelement.location
# print(location) # {'x': 1104, 'y': 917}
# size = imgelement.size
# print(size) # {'height': 12, 'width': 26}def crop(): # 定位 二次截图picture = Image.open(r"C:\Zzlong\%s.png" % time.strftime('%Y-%m-%d %H-%M', time.localtime(time.time()))) # 打开第一次的截图picture = picture.crop((1320,520,1450,550)) # 定位二次截图# 注意: crop截图规则,(宽 - x坐标)为截图的宽位置 (高 - y坐标)为截图的高位置,坐标(0,0)位于左上角picture.save(r"C:\Zzlong\img%s.png" % time.strftime('%Y-%m-%d %H-%M', time.localtime(time.time()))) # 保存图片# print(picture.size) # 输出宽、高 (1920, 888)
# picture = picture.crop((0, 0, 1920, 888)) # 截取全图(x坐标,y坐标,宽,高)


二、easyocr 提取图片文字

 Python中有一个不错的OCR库-EasyOCR,在GitHub已有9700star。它可以在python中调用,用来识别图像中的文字,并输出为文本。 https://github.com/JaidedAI/EasyOCR

安装过程比较简单,使用pip或者conda安装。

pip install easyocr

如果用的PyPl源,安装起来可能会耽误些时间,建议大家用清华源安装,几十秒就能安装好。


使用方法

EasyOCR的用法非常简单,分为三步:

# 导入easyocr
import easyocr
# 创建reader对象
reader = easyocr.Reader(['ch_sim','en'])
# 读取图像
result = reader.readtext('test.jpg')
# 结果
print(result)# 使用easyocr报错“Unknown C++ exception from OpenCV code,CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU. ”
# Python与CUDA版本不对应,导致Python安装的OpenCV版本与CUDA版本不照应
# pip install opencv-python==4.3.0.38 -i https://pypi.tuna.tsinghua.edu.cn/simple

这段代码有一段参数['ch_sim','en'],这是要识别的语言列表(所有语言列表放在文章最下方),因为路牌里有中文和英文,所以列表里添加了ch_sim(简体中文)、en(英文)。

识别文字的准确率还是很高的,接下来对文字部分进行抽取。

for i in result:word = i[1]print(word)


三、利用百度 AI 开发平台的 OCR 文字识别 API 也可以识别并提取图片中的文字。

首先,我们需要一个百度账号,然后打开百度AI开放平台(https://ai.baidu.com/)并登陆,点击“控制台”,进入左边栏中的“文字识别”,创建一个应用,并记住你的AppID,API Key和Secret Key。

下面为 百度AI帮助文档提取图片文字示例(此代码使用的是:通用文字识别高精度版 每月免费赠送200次,有QPS每分钟并发限制):

https://ai.baidu.com/ai-doc/OCR/Pkrwx9ye4

# coding=utf-8import sys
import json
import base64# 保证兼容python2以及python3
IS_PY3 = sys.version_info.major == 3
if IS_PY3:from urllib.request import urlopenfrom urllib.request import Requestfrom urllib.error import URLErrorfrom urllib.parse import urlencodefrom urllib.parse import quote_plus
else:import urllib2from urllib import quote_plusfrom urllib2 import urlopenfrom urllib2 import Requestfrom urllib2 import URLErrorfrom urllib import urlencode# 防止https证书校验不正确
import ssl
ssl._create_default_https_cOntext= ssl._create_unverified_contextAPI_KEY = 'XXXXXX' ### 需修改SECRET_KEY = 'XXXXXX' ### 需修改OCR_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"""" TOKEN start """
TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'"""获取token
"""
def fetch_token():params = {'grant_type': 'client_credentials','client_id': API_KEY,'client_secret': SECRET_KEY}post_data = urlencode(params)if (IS_PY3):post_data = post_data.encode('utf-8')req = Request(TOKEN_URL, post_data)try:f = urlopen(req, timeout=5)result_str = f.read()except URLError as err:print(err)if (IS_PY3):result_str = result_str.decode()result = json.loads(result_str)if ('access_token' in result.keys() and 'scope' in result.keys()):if not 'brain_all_scope' in result['scope'].split(' '):print ('please ensure has check the ability')exit()return result['access_token']else:print ('please overwrite the correct API_KEY and SECRET_KEY')exit()"""读取文件
"""
def read_file(image_path):f = Nonetry:f = open(image_path, 'rb')return f.read()except:print('read image file fail')return Nonefinally:if f:f.close()"""调用远程服务
"""
def request(url, data):req = Request(url, data.encode('utf-8'))has_error = Falsetry:f = urlopen(req)result_str = f.read()if (IS_PY3):result_str = result_str.decode()return result_strexcept URLError as err:print(err)if __name__ == '__main__':# 获取access tokentoken = fetch_token()# 拼接通用文字识别高精度urlimage_url = OCR_URL + "?access_token=" + tokentext = ""# 读取测试图片file_cOntent= read_file('./text.jpg') ##### 需修改# 调用文字识别服务result = request(image_url, urlencode({'image': base64.b64encode(file_content)}))# 解析返回结果result_json = json.loads(result)for words_result in result_json["words_result"]:text = text + words_result["words"]# 打印文字print(text)
#Author
#XGmhC18eVP1Fo1ECX911dtOzwX
#XSFG15esdSADWQD78SDW578456swerSDDX
#XPQ2ukO4Aec2PTsgQU9UkiEKYciavlZk8X


四、使用pytesseract进行识别图片文字

1.环境配置

        第三方库:PIL、pytesseract、

        识别引擎tesseract-ocr下载 https://tesseract-ocr.github.io/tessdoc/Home.html ,windows选择此exe方式安装。

        要识别中文,ocr引擎要下载一个中文包 "chi_sim" https://tesseract-ocr.github.io/tessdoc/Data-Files 并放进Tesseract-OCR\tessdata里面。

2. pip install pytesseract     pip install Pillow

      1. 修改"pytesseract.py"中"tesseract_cmd"的路径为识别引擎的路径

        2. 识别图片文字(经测试 识别文字效果不太好,识别数字还可以)

import pytesseract
from PIL import Image
text=pytesseract.image_to_string(Image.open(r'C:\Zzlong\hk-0-First.png'),lang='chi_sim'
) #调用识别引擎识别
print(text)

注:

以下为 easyocr 模块支持的语言列表:


推荐阅读
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
author-avatar
峰的紫色摩天轮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有