opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警
-
安装python,pycharm,自行安装。
-
Python下安装OpenCv
2.1 打开cmd,先安装opencv-python
pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple
2.2 再安装opencv-contrib-python
pip install opencv-contrib-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple
3.Pycharm安装opencv-python
打开pycharm,然后打开setting,打开python解析器
点击Go to tool window。下面红框处管理和下载python依赖包
点击下图的设置,然后点击管理仓库
新增python包仓库: https://pypi.tuna.tsinghua.edu.cn/simple/
在这里搜索并下载opencv-python,numpy
下载完成,新建py文件,执行代码。有窗口输出该路径的图片就说明成功了。
import cv2 as cv# 这段代码是测试opencv是否正常安装。运行下面这段代码出现图片就是成功的
src = cv.imread("C:\\Users\Administrator\Desktop\\city1.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
cv.waitKey(0)
cv.destroyAllWindows()
print("hi python")
-
下载Tesseract OCR,去官网 https://github.com/UB-Mannheim/tesseract/wiki
下载exe。安装完成后,需要设置Tesseract-OCR的系统环境。详细看这篇文章
https://blog.csdn.net/qq_38463737/article/details/109679007 -
下载Tesseract OCR的语言包,中文语言包和英文语言包。
去官网 https://github.com/tesseract-ocr/tessdata 下载eng.traineddata和chi_sim.traineddata
然后把那两个文件放到**/Tesseract-OCR/tessdata
-
pycharm 的python包 安装pytesseract
-
在项目文件.venv/Lib/site-packages/pytesseract/pytesseract.py 文件中修改变量tesseract_cmd,路径自行修改。 这是为了解决BUG:”tesseract is not installed or it‘s not in your PATH“
-
安装gTTS 谷歌语音播报,pillow,pyttsx3 离线语音播报。
-
在手机上下载“IP 摄像头”,并安装。这里我在应用宝里下载了 IP 摄像头。使用该软件,要电脑连接手机热点,同处在局域网内。
10,全部py代码如下
# 本代码参考了https://blog.csdn.net/weixin_35752233/article/details/142606296 , https://blog.csdn.net/m0_58892312/article/details/120923578 和 AI
# 人脸模型库文件“ haarcascade_frontalface_default.xml ”,帮助摄像头获取的画面去对比
# 1. 第二句代码中的admin为我的IP摄像头用户名, admin为我的IP摄像头密码,这个可以在手机APP的设置里查看和修改,代码中的要使用自己的用户名、密码。
# 2. @后面的地址是局域网IP地址,这个在打开IP摄像头服务器之后的界面就能看到,也需要修改为自己的地址。
# 3.代码的其他部分无需修改。
import time
import cv2 as cv
import pytesseract
import numpy as np
import pyttsx3
from gtts import gTTS# 图像的裁剪和缩放是图像预处理的两个基本操作。裁剪主要是根据需要对图像的特定区域进行选取,剔除无效或干扰信息。缩放则是为了满足特定的分辨率或图像尺寸需求,对图像的大小进行调整。
# 裁剪图片
def crop_image(image, x, y, width, height):return image[y:y + height, x:x + width]# 缩放图片
def resize_image(image, width, height):return cv.resize(image, (width, height))# 灰度化. 图像的灰度化和二值化是将图像从彩色转换到灰度图像和黑白图像的过程,这些转换对于提高OCR的准确性和效率至关重要。
def to_grayscale(image):return cv.cvtColor(image, cv.COLOR_BGR2GRAY)# 二值化.
def to_binary(image, threshold=127, maxval=255):return cv.threshold(image, threshold, maxval, cv.THRESH_BINARY)[1]# 噪声去除是图像预处理中非常重要的一步。它通常通过滤波技术实现,可以减少图像中的随机噪声,提高图像质量,有助于后续的文字检测和识别。
def remove_noise(image, kernel_size=3):return cv.medianBlur(image, kernel_size)# 文本行检测 和字符分割是预处理的高级步骤,它们是为了从图像中准确地分离出单独的字符或文本行,这对于OCR识别至关重要。
def detect_text_lines(image):# 使用Canny边缘检测算法edged = cv.Canny(image, 100, 200)# 找到轮廓contours, _ = cv.findContours(edged, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)return contours# 字符分割
def segment_characters(image, contours):characters = []for contour in contours:x, y, w, h = cv.boundingRect(contour)roi_image = image[y:y + h, x:x + w]characters.append(roi_image)return characters# 识别并截取红色区域
def extract_red_region(image):# 转换为HSV颜色空间hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)# 定义红色的范围lower_red = np.array([0, 120, 70])upper_red = np.array([10, 255, 255])mask1 = cv.inRange(hsv, lower_red, upper_red)lower_red = np.array([170, 120, 70])upper_red = np.array([180, 255, 255])mask2 = cv.inRange(hsv, lower_red, upper_red)# 合并两个掩码mask = mask1 + mask2# 形态学操作kernel = np.ones((5, 5), np.uint8)mask = cv.morphologyEx(mask, cv.MORPH_CLOSE, kernel)mask = cv.morphologyEx(mask, cv.MORPH_OPEN, kernel)return mask# 文字保存为临时mp3文件
def text_to_speech(text, lang='en'):# 创建gTTS对象tts = gTTS(text=text, lang=lang)# 保存为临时文件temp_file = "temp_audio.mp3"tts.save(temp_file)return temp_file# 读取视频信息。 # @前为账号密码,@后为ip地址
cap = cv.VideoCapture("http://admin:admin@192.168.169.143:8081/video")
# cap = cv.VideoCapture(0)
while cap.isOpened():# 读取一帧图片f, image = cap.read()# 保存当前帧为图片文件cv.imwrite('captured_image.jpg', image)print("图片已保存为 captured_image.jpg")time.sleep(0.5)# 项目相对路径下captured_image.jpg,自行修改文件路径picture = cv.imread("D:\\download_software\\python_project\\camera_test\\captured_image.jpg")# 提取红色区域 -> 红色底纹白颜色文字red_mask = extract_red_region(picture)# 查找轮廓contours, _ = cv.findContours(red_mask, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)for contour in contours:x, y, w, h = cv.boundingRect(contour)roi = picture[y:y + h, x:x + w]# ps:没有必要灰度处理和二值化处理,因为红色区域的图像已经很清楚了# # 转换为灰度图像# gray_picture = cv.cvtColor(roi, cv.COLOR_BGR2GRAY)# # 二值化处理# _, binary_picture = cv.threshold(gray_picture, 200, 255, cv.THRESH_BINARY_INV)# 使用Tesseract OCR识别文字text = pytesseract.image_to_string(roi, config='--psm 6',lang="eng")print("OCR识别结果:" + text)cv.imshow("Red Region", roi)# 如果文本包含MAU或者AHU,播放mp3语音进行报警if "MAU" in text or "AHU" in text:# 创建语音引擎engine = pyttsx3.init()# 进行语音播报 指定要播报的文本engine.say(text)# 阻止 没播报完程序就退出engine.runAndWait()# 使用OpenCV的自定义函数进行图像预处理# # 设定裁剪区域的坐标和尺寸# x, y, width, height = 100, 100, 200, 200# cropped_image = crop_image(image, x, y, width, height)## # 设定缩放尺寸# new_width, new_height = 300, 300# resized_image = resize_image(cropped_image, new_width, new_height)# 读取图片并转换为灰度图# gray_picture = cv.cvtColor(picture, cv.COLOR_BGR2GRAY)# 读取图片并进行二值化# _, binary_picture = cv.threshold(gray_picture, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)# 读取图片并去除噪声# noise_free_picture = remove_noise(binary_picture)# 使用Tesseract进行OCR处理 chi_sim | eng# text = pytesseract.image_to_string(noise_free_picture,lang="eng")# 打印OCR结果# print("OCR识别结果:" + text)# cv.imshow("Video Stream", picture)#退出视频识别if cv.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv.destroyAllWindows()
- 运行效果展示。我手机的IP摄像头拍摄正对着wps那块区域,识别出来的红色区域在左上角。因为OCR识别使用我用的是english语言包,所以识别文字内容不太准确,汉字没有识别出来,但是我这里的需求只要识别英文单词就可以了。此时,电脑正在播放识别出来的文字内容。大致需求已经实现了。
相关文章:

opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警
安装python,pycharm,自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …...

微服务即时通讯系统(5)用户管理子服务,网关子服务
用户管理子服务(user文件) 用户管理子服务也是这个项目中的一个业务最多的子服务,接口多,但是主要涉及的数据表只有user表,Redis的键值对和ES的一个搜索引擎,主要功能是对用户的个人信息进行修改管理&#…...

postgreSQL安装后启动有The application server could not be contacted问题
不得不说pgsql是真的麻烦,找问题找了几个小时才解决.直接步入主题吧 首先问题如下 安装后,双击启动就出现上述问题 首先删除路径为 c:\Users\your_name\AppData\Roaming\pgAdmin 之内的所有文件和文件夹, 如果找不到AppData,就把这个点开 接着找到你安装pgsql的路径,我的是D…...

架构05-架构安全性
零、文章目录 架构05-架构安全性 1、软件架构安全的重要性 **系统安全:**不仅包括防御黑客攻击,还包括安全备份与恢复、安全审计、防治病毒等。**关注重点:**认证、授权、凭证、保密、传输安全、验证。 2、认证(Authenticatio…...

虚幻引擎---材质篇
一、基础知识 虚幻引擎中的材质(Materials) 定义了场景中对象的表面属性,包括颜色、金属度、粗糙度、透明度等等;可以在材质编辑器中可视化地创建和编辑材质;虚幻引擎的渲染管线的着色器是用高级着色语言(…...
NPM镜像详解
NPM镜像详解 什么是NPM镜像 NPM镜像(NPM Mirror)是一个完整的NPM包的副本服务器。由于npm的官方registry服务器部署在国外,国内访问可能会比较慢,因此使用镜像可以加快包的下载速度。 常用的NPM镜像源 npm官方镜像 https://reg…...

从智能合约到去中心化AI:Web3的技术蓝图
Web3正在成为互联网发展的重要方向,其核心理念是去中心化、用户主权和自治。随着区块链技术、智能合约以及人工智能(AI)等技术的发展,Web3不仅重新定义了数据存储和交易方式,还为更智能化、去中心化的数字生态系统铺平…...

STM32进阶 定时器3 通用定时器 案例1:LED呼吸灯——PWM脉冲
功能 它有基本定时器所有功能,还增加以下功能 TIM2、TIM3、TIM4、TIM5 多种时钟源: 外部时钟源模式1: 每个定时器有四个输入通道 只有通道1和通道2的信号可以作为时钟信号源 通道1 和通道2 的信号经过输入滤液和边缘检测器 外部时钟源…...

开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?
在选择即时通讯软件时,应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异,因此总结两个点简要分析这两种选择,有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…...

930[water]
算法...

2024论文翻译 | Multi-Review Fusion-in-Context
摘要 接地气的文本生成,包括长篇问答和摘要等任务,需要同时进行内容选择和内容整合。当前的端到端方法由于其不透明性,难以控制和解释。因此,近期的研究提出了一个模块化方法,每个步骤都有独立的组件。具体来说&#…...

(78)MPSK基带调制通信系统瑞利平坦衰落信道传输性能的MATLAB仿真
文章目录 前言一、MATLAB仿真1.仿真代码2.仿真结果 二、子函数与完整代码总结 前言 本文给出瑞利平坦衰落信道上的M-PSK通信系统性能仿真的MATLAB源代码与仿真结果。其中,调制方式M-PSK包括BPSK、QPSK、8-PSK、16-PSK、32-PSK等方式。 一、MATLAB仿真 1.仿真代码 …...
【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)
CART(Classification and Regression Tree) CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART …...

【金猿CIO展】复旦大学附属中山医院计算机网络中心副主任张俊钦:推进数据安全风险评估,防范化解数据安全风险,筑牢医疗数据安全防线...
张俊钦 本文由复旦大学附属中山医院计算机网络中心副主任张俊钦撰写并投递参与“数据猿年度金猿策划活动——2024大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 数据要素时代,医疗数据已成为医院运营与决策的重要基石…...

工业机器视觉-基于深度学习的水表表盘读数识别
字轮数字识别、指针读数识别(角度换算)、根据指针角度进行读数修正、根据最高位指针(x0.1)读数对字轮数字进行修正、得到最终读数。 基于深度学习的目标检测技术和OpenCV图像处理技术,可识别所有类型的表盘机械读数。...

基于ZooKeeper搭建Hadoop高可用集群
ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点,集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件: Active NameNode 和 Standby NameNode: 两台 NameNode…...
力扣88题:合并两个有序数组
力扣88题:合并两个有序数组 题目描述 给定两个按非递减顺序排列的整数数组 nums1 和 nums2,以及它们的长度 m 和 n,要求将 nums2 合并到 nums1,使得合并后的数组仍按非递减顺序排列。 输入与输出 示例 1: 输入&am…...
python 笔记之线程同步和死锁
同步: 共享数据: 如果多个线程共同对某个数据修改,则可能出现不可预测的结果,为了保证数据的正确性,需要对多个数据进行同步 同步:一个一个的完成,一个做完另一个才能进来 效率会降低 使用Thre…...

SpringBoot小知识(4):高级配置知识与bean的绑定
一、EnableConfigurationProperties ConfigurationProperties注解在我们之前讲过,他是从配置中读取参数封装给实体类的一个注解。 那么EnableConfigurationProperties是个啥呢? EnableConfigurationProperties 是 Spring Framework 中用于启用基于配置文…...

Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 电子产品管理 系统管理 数据可视化分析看板展示 摘要 本…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...